10

我正在尝试通过新的 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 正在调用与我在 URI 中所做的相同的 dc。

关于我为什么无法进行身份验证的任何想法?

编辑 如问题中所述,我特别询问有关访问新的 3.0 REST API 的问题。我正在尝试直接执行此操作,而不是使用第三方包装器。

新的 API 由 http 调用组成,因此应该非常简单。我只是在身份验证方面遇到了麻烦。

4

3 回答 3

18

因此,我终于能够与 MailChimp 的超级技术支持人员聊天。

MailChimp 文档声明如下

最简单的身份验证方法是使用 HTTP Basic Auth。输入任何字符串作为用户名并提供您的 API 密钥作为密码。您的 HTTP 库应该具有对基本授权的内置支持。

他们的文档有点误导。通常,基本身份验证的 Auth 标头看起来像我发送的内容:

授权:基本 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,其中 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);
}

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

我将把这篇文章留作任何试图调用新 3.0 API 的人的参考。

于 2015-05-21T17:57:08.903 回答
0

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);
于 2016-10-03T09:11:15.877 回答
0

我写了一篇文章,介绍了一种将订阅者添加到列表的简单方法:

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

于 2016-10-19T11:18:07.780 回答