使用 .Net 调用 MailChimp API v3.0

Calling MailChimp API v3.0 with .Net

我正在尝试通过新的 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 调用组成,因此应该非常简单。我只是在验证部分遇到了问题。

所以我终于能够与 MailChimp 的 超级 技术支持人员聊天。

MailChimp 文档声明如下

The easiest way to authenticate is using HTTP Basic Auth. Enter any string as the username and supply your API Key as the password. Your HTTP library should have built-in support for basic authorization.

他们的文档有点误导。通常 Basic Auth 的 Auth header 看起来像我发送的内容:

Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx where the row of x would represent the base64 encoded username:password.

然而,与支持技术人员交谈后,他们实际使用的实现是:

Authorization: username 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);
}

编辑 注意评论。 TooMuchPete 是正确的,因为正常的 HTTP Basic Auth headers 确实有效。显然我在 MailChimp 端遇到了一些旧代码或其他东西。

我将 post 作为任何尝试调用新 3.0 API 的人的参考。

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);

我写了一篇文章,介绍了使用以下方法向列表添加订阅者的简单方法:

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
这可能会节省一些时间