Ajouter un en-tête d'autorisation pour un webhook ?

Je travaille sur l’intégration d’une option d’abonnement à la newsletter Mailchimp lors de l’inscription de nouveaux utilisateurs, et j’ai fait des progrès en utilisant ce plugin de @pfaffman GitHub - pfaffman/discourse-mailchimp-webhook · GitHub

Le plugin ajoute avec succès un webhook « Événement de création d’utilisateur » qui apparaît à l’adresse /admin/api/web_hooks/new. J’ai déterminé, en me basant sur l’API Mailchimp, comment définir l’URL de charge utile pour le webhook de cette manière (avec mon DC et mon identifiant de liste réels) :
https://[mon-dc].api.mailchimp.com/3.0/lists/[mon-id-de-liste]/members/

J’ai créé un nouvel utilisateur et le webhook s’est déclenché avec succès, mais j’ai reçu une réponse « Clé API invalide » de la part de Mailchimp. En examinant le code de la méthode build_webhook_headers, il ne semblait pas que l’ajout de la clé API au champ « Secret » fonctionnerait, car cela génère un en-tête « X-Discourse-Event-Signature ». Je l’ai tout de même essayé, mais j’ai obtenu la même réponse.

À titre de test, j’ai modifié manuellement la méthode build_webhook_headers pour y insérer l’en-tête d’autorisation attendu par l’API Mailchimp, et cela a fonctionné (j’ai reçu une réponse de succès et le nouveau membre est apparu côté Mailchimp) :

headers['Authorization'] = 'apikey ma-clé-ici'

Bien sûr, modifier Discourse directement n’est pas une solution viable, mais je suis bloqué quant à la manière d’insérer cet en-tête d’autorisation dans ma requête webhook. Il semble exister un moyen d’enrichir le corps de la requête avec :after_build_web_hook_body, mais je n’ai pas trouvé de méthode similaire pour l’en-tête.

Toute aide pour m’orienter dans la bonne direction serait grandement appréciée. Merci !

Je voulais revenir vers vous pour savoir si quelqu’un connaîtrait une solution à cette question… Je n’ai pas encore réussi à résoudre ce problème. J’ai temporairement recours à mon plugin pour remplacer la méthode build_webhook_headers de la classe Jobs::EmitWebHookEvent, bien que je sache que ce n’est pas une solution idéale.

Merci d’avance !

Salut à tous,

Donc, il n’est pas possible de définir un en-tête Authorization sur mon webhook ?

À quoi servent alors les webhooks ? On a l’impression que 99 % des webhooks utiles nécessiteraient cet en-tête.

:face_with_raised_eyebrow:

J’ai une exigence similaire où je dois envoyer les détails du nouvel utilisateur à une liste Mailchimp, et j’ai rencontré le même problème que décrit ci-dessus. Mais j’ai trouvé une solution/contournement pour ce problème.

Puisque l’API Mailchimp utilise l’authentification HTTP Basic lors de la fourniture de la clé API avec votre requête API, vous pouvez également inclure la clé dans l’URL que vous appelez (au lieu de l’en-tête Authorization plus courant).

Donc, dans mon cas, j’ai défini l’URL de charge utile du webhook comme suit :
https://user:[ma-clé-api]@[mon-dc].api.mailchimp.com/3.0/lists/[mon-id-de-liste]/members/

Et cela semble fonctionner correctement car l’utilisateur est maintenant ajouté avec succès à la liste Mailchimp.