使用.Net调用MailChimp API v3.0

我正在尝试通过新的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。

有关为什么我在validation时遇到问题的想法?

编辑正如问题中所述,我特别要求访问新的3.0 REST API。 我试图直接这样做而不是使用第三方包装器。

新的API由http调用组成,所以它应该非常简单。 我只是遇到了身份validation问题。

所以我终于可以和MailChimp的超级技术支持人员聊天了。

MailChimp文档声明如下

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

他们的文件有点误导。 通常,Basic Auth的Auth标头看起来像我发送的内容:

授权:基本xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,其中x行代表base64编码的用户名:password。

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

授权:用户名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方面遇到了一些旧代码。

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

我写了一篇关于使用以下方法将订阅者添加到列表的简单方法的文章:

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

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