使用 .Net 调用 MailChimp API v3.0
Posted
技术标签:
【中文标题】使用 .Net 调用 MailChimp API v3.0【英文标题】:Calling MailChimp API v3.0 with .Net 【发布时间】:2015-08-02 08:05:08 【问题描述】:我正在尝试通过新的 3.0 REST API 访问我们的 MailChimp 帐户。我做了以下事情:
using(var http = new HttpClient())
var creds = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:mailchimpapikey-us1"));
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", creds);
string content = await http.GetStringAsync(@"https://us1.api.mailchimp.com/3.0/lists");
Console.WriteLine(content);
但是,当我运行此代码时,我收到一个 401 错误,其中包含以下 json 详细信息:
"type":"http://kb.mailchimp.com/api/error-docs/401-api-key-invalid","title":"API Key Invalid","status":401,"detail":"Your API key may be invalid, or you've attempted to access the wrong datacenter.","instance":"a9fe4028-519e-41d6-9f77-d2caee4d4683"
我在 URI 中使用的数据中心(本例中为 us1)与我的 API 密钥上的 dc 匹配。如果我使用 MailChimp SDK,我的 API 密钥有效,所以我知道我的密钥不是无效的。此外,使用 Fiddler,我可以看到 MailChimp SDK 调用的 dc 与我在 URI 中所做的相同。
关于我为什么无法进行身份验证的任何想法?
编辑 如问题中所述,我专门询问有关访问新的 3.0 REST API 的问题。我正在尝试直接执行此操作,而不是使用第三方包装器。
新 API 由 http 调用组成,因此应该非常简单。我只是在身份验证方面遇到了问题。
【问题讨论】:
How to integrate MailChimp in C#/.Net 的可能重复项 【参考方案1】:所以我终于能够与 MailChimp 的超级技术支持人员聊天。
MailChimp 文档声明如下
最简单的身份验证方法是使用 HTTP 基本身份验证。输入任何字符串 作为用户名并提供您的 API 密钥作为密码。 您的 HTTP 库应该具有对基本授权的内置支持。
他们的文档有点误导。通常,基本身份验证的 Auth 标头看起来像我发送的内容:
授权:基本 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 其中 x 行代表 base64 编码的用户名:密码。
但是,在与支持技术人员交谈时,他们使用的实际实现是:
授权:用户名keyid
没有 base64 编码,没有 Basic 关键字。用户名甚至不必是您的用户名。
所以,这里是工作代码:
using(var http = new HttpClient())
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", mailchimpapikey-us1);
string content = await http.GetStringAsync(@"https://us1.api.mailchimp.com/3.0/lists");
Console.WriteLine(content);
编辑 注意 cmets。 TooMuchPete 是正确的,因为正常的 HTTP Basic Auth 标头确实有效。显然我在 MailChimp 方面遇到了一些旧代码或其他东西。
我将这篇文章留作参考,供任何尝试调用新的 3.0 API 的人参考。
【讨论】:
顺便说一句,如果您希望在 AuthenticationHeaderValue 构造函数中使用您的用户名,您可以用您的用户名替换单词“Basic”,并且一切正常。 这实际上只是部分正确——提供的支持确实有效,但 API 的主要身份验证方法是 HTTP 基本身份验证。下面是一些示例 .NET 代码,它以一种不那么老套的方式做到这一点:gist.github.com/bryanbarnard/8102915 嗯,您的代码看起来与我最初发布的非工作代码几乎相同。你有什么理由说明你的能用而我的不能吗? 看起来可能存在要求用户名为“apikey”的错误,但最近已修复。我会再试一次你的原始代码,看看它现在是否有效。 哇,你说得对。今天,“非工作”代码运行得很好。昨天,同样的代码到处都失败了。感谢您的意见。【参考方案2】:我写了一篇文章,介绍了一种将订阅者添加到列表的简单方法:
Dim mailchimp As New ZmailChimp
Dim ListId$ = "9b2e63f0b9" 'List Sage' List
Dim email$ = "samsmith20@anymail.com" '"sam19@postcodelite.com"
Dim fieldListOnAdd = "FNAME,Sam,LNAME,Smith,MTYPE,User,MID,631637"
Dim fieldListOnUpdate = "FNAME,Sam,LNAME,Smith,MID,631637" 'Don't change MTYPE
'Put on 'Sage One' and 'Sage 50' group
Dim groupList = "407da9f47d,05086211ba"
With mailchimp
.API$ = "46cMailChimpAPIKeyd1de-us14" 'MailChimp API key
.dataCenter$ = "us14" 'Last 4 letters of API key
.password$ = "Password!"
MsgBox(.addSubscriber(ListId$, email, fieldListOnAdd, fieldListOnUpdate, groupList))
End With
mailchimp = Nothing
见:http://www.codeproject.com/Tips/1140339/Mail-Chimp-Add-Update-e-mail-to-List-and-Subscribe 这可能会节省一些时间
【讨论】:
你试过github.com/brandonseydel/MailChimp.Net 吗?真实世界的样本?【参考方案3】:Mailchimp 电子商务
var mcorder = new Standup.Ecomm.MailChimpManager(ConfigurationManager.AppSettings["MailChimpApiKey"]);
var orders = new MailOrder();
orders.CampaignId = ConfigurationManager.AppSettings["MailChimpCampaignId"];
orders.EmailId = ConfigurationManager.AppSettings["MailChimpEmailId"];
orders.Id = orderNumber;
orders.StoreId = "abcde";
orders.StoreName = "E-Commerce Store";
orders.Total = Convert.ToDouble(orderTotal);
orders.Tax = Convert.ToDouble(tax);
orders.Items = new List<MailOrderItem>();
foreach (var orderItem in orderItemList)
var item = new MailOrderItem();
item.ProductId = orderItem.OrderNumber;
item.ProductName = orderItem.Title;
item.SKU = orderItem.Sku;
item.CategoryId = 0;
item.CategoryName = " ";
item.Quantity = orderItem.Quantity;
item.Cost = Convert.ToDouble(orderItem.ProductCost);
orders.Items.Add(item);
mcorder.AddOrder(orders);
【讨论】:
以上是关于使用 .Net 调用 MailChimp API v3.0的主要内容,如果未能解决你的问题,请参考以下文章
使用 mailchimp-api-v3 批量调用不超过 10 个分段成员
只需一次调用 MailChimp API v3 即可获取所有 mailchimp 活动的详细信息
MailChimp API DrewM\MailChimp\MailChimp::call() 调用未定义的方法