我试图使用API版本3为Mailchimp事件编写webhook,由于缺少库,文档和基本示例,我有点挣扎,但也缺乏经验。
我知道我们应该通过在网址中加入一个秘密来保护网络链接,这很好。顺便说一下,MailChimp不允许在其门户中配置基本访问认证。
他们说"当我们为实际数据发送HTTP POST时,我们的webhook验证器将只发送HTTP GET请求。为了让您的webhook正常运行,您需要同时允许这两种情况。"好的,我想我可以使用Request.HttpMethod返回成功状态代码,如果它是GET并处理一些数据(如果它是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);
}
答案 0 :(得分:3)
假设您已按照here所述设置了MailChimp Webhook,您可以使用Request.Form
语法获取发布的数据。使用问题中的示例发布数据,这里是控制器代码的样子:
[AllowAnonymous]
public void ChargeBeeWebhook()
{
// type variable will be "unsubscribe"
string type = Request.Form["type"];
// action variable will be "unsub"
string action = Request.Form["data[action]"];
// reason variable will be "manual"
string reason = Request.Form["data[reason]"];
// ...
// ...
// ... do the same with the rest of the posted variables
// ...
// sync the posted data above with your database
// ...
// ...
}