我正在尝试使用 API 版本 3 为 Mailchimp 事件编写一个 webhook,但由于缺乏库、文档和基本示例,而且我缺乏经验,我有点挣扎。
我知道我们应该通过在 URL 中添加一个秘密来保护 webhook,这很好。顺便说一句,MailChimp 不允许在其门户中配置基本访问身份验证。
他们说“虽然我们确实为实际数据发送 HTTP POST,但我们的 webhook 验证器只会发送 HTTP GET 请求。您需要同时允许这两个请求才能使您的 webhook 正常运行。” 好的,我想如果是 GET,我可以使用 Request.HttpMethod 返回成功状态代码,如果是 POST,则可以处理一些数据。
虽然不知道如何从请求中挑选东西,理想情况下不想编写一堆类和属性来涵盖所有事件类型,C# 是静态类型的,尽管我猜动态关键字也是一个选项。
我需要反序列化 JSON 吗?在库的帮助下,我之前只为另一个 API 编写了一个 webhook,您可以使用来自请求的字符串、流或文本阅读器来构造 API 事件。图书馆让一切变得非常简单。
作为参考,还有这个问题显示了如何使用 PHP 获取一些数据:How to pass email address to webhook from mailchimp
发布的数据如下所示(据说 V3 似乎没有任何文档):
"type": "unsubscribe",
"fired_at": "2009-03-26 21:40:57",
"data[action]": "unsub",
"data[reason]": "manual",
"data[id]": "8a25ff1d98",
"data[list_id]": "a6b5da1054",
"data[email]": "api+unsub@mailchimp.com",
"data[email_type]": "html",
"data[merges][EMAIL]": "api+unsub@mailchimp.com",
"data[merges][FNAME]": "MailChimp",
"data[merges][LNAME]": "API",
"data[merges][INTERESTS]": "Group1,Group2",
"data[ip_opt]": "10.20.10.30",
"data[campaign_id]": "cb398d21d2",
"data[reason]": "hard"
我基本上只需要将这些数据转换为变量,以便我可以将它与我的数据库同步。
到目前为止,这是我的(骨架)控制器:
[Route("mailchimp/newsletter-webhook/super-secret-key-goes-here")]
public HttpStatusCodeResult ChargeBeeWebhook()
{
return new HttpStatusCodeResult(200);
}