使用 .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 调用使用 AJAX

只需一次调用 MailChimp API v3 即可获取所有 mailchimp 活动的详细信息

MailChimp API DrewM\MailChimp\MailChimp::call() 调用未定义的方法

Mailchimp API (.Net Wrapper) - 自动订阅用户

使用 OAuth 2 令牌调用 MailChimp API