为 Webhook 添加授权头?

我正在尝试将 Mailchimp 新闻订阅选项集成到新用户注册流程中,并已通过使用 @pfaffman 提供的此插件取得了一些进展:GitHub - pfaffman/discourse-mailchimp-webhook · GitHub

该插件成功添加了一个“用户创建事件”(User Created Event)网络钩子,该钩子出现在 /admin/api/web_hooks/new 页面。我根据 Mailchimp API 文档 配置了网络钩子的 Payload URL,格式如下(使用我实际的 DC 和列表 ID):
https://[my-dc].api.mailchimp.com/3.0/lists/[my-list-id]/members/

我创建了一个新用户,网络钩子成功触发,但 Mailchimp 返回了“API Key Invalid”(API 密钥无效)的响应。通过阅读 build_webhook_headers 方法的代码,我发现将 API 密钥添加到“Secret”字段似乎不起作用,因为这样只会生成一个“X-Discourse-Event-Signature”头部。不过我还是试了一下,结果仍然相同。

作为测试,我手动编辑了 build_webhook_headers 方法,插入了 Mailchimp API 所期望的授权头部,结果成功了(我收到了成功响应,并且新成员也出现在 Mailchimp 端):

headers['Authorization'] = 'apikey my-key-here'

显然,直接修改 Discourse 代码并不是可行的解决方案。但我现在卡住了,不知道如何将这个授权头部添加到我的网络钩子请求中。看起来可以通过 :after_build_web_hook_body 来增强请求体,但我尚未找到类似的方式来操作请求头。

如果有任何指引能帮我找到正确的方向,我将不胜感激。谢谢!

想跟进一下,看看是否有人知道这个问题的解决方案……我还没能解决。我暂时通过插件重写了 Jobs::EmitWebHookEvent 类中的 build_webhook_headers 方法,不过我知道这并不是一个理想的方案。

提前感谢!

大家好,

那么,无法在我的 webhook 上设置 Authorization 头吗?

webhook 的用途是什么呢?感觉 99% 有用的 webhook 都需要这个头。

:face_with_raised_eyebrow:

我有一个类似的需求,需要将新用户的信息发送到 Mailchimp 列表,并遇到了上述相同的问题。但我已经找到了该问题的解决方案/变通方法。

由于 Mailchimp API 在提供 API 密钥时使用的是 HTTP 基本认证,您也可以将密钥包含在调用的 URL 中(而不是更常见的 Authorization 请求头)。

因此,在我的情况下,我将 Webhook 负载 URL 设置为:
https://user:[my-api-key]@[my-dc].api.mailchimp.com/3.0/lists/[my-list-id]/members/

这似乎运行良好,因为新用户现在已成功添加到 Mailchimp 列表中。