新しい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);
}
ただし、このコードを実行すると、次のjsonの詳細を含む401エラーが発生します。
{"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を使用すると、MailChimpSDKがURIで行っているのと同じDCを呼び出していることがわかります。
なぜ認証に問題があるのかについてのアイデアはありますか?
[〜#〜] edit [〜#〜]質問に記載されているように、私は新しい3.0 REST APIにアクセスすることについて具体的に質問しています。試しています。サードパーティのラッパーを使用するのではなく、これを直接行うため。
新しいAPIはhttp呼び出しで構成されているため、非常に簡単です。認証部分に問題があるだけです。
それで、私はついにMailChimpのsuperテクニカルサポート担当者とチャットすることができました。
MailChimpのドキュメントには次のように記載されています
認証する最も簡単な方法は、HTTP基本認証を使用することです。ユーザー名として任意の文字列を入力し、パスワードとしてAPIキーを指定します。 HTTPライブラリには、基本認証のサポートが組み込まれている必要があります。
彼らのドキュメントは少し誤解を招くものです。通常、基本認証のAuthヘッダーは、私が送信したもののようになります。
承認:基本xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxここで、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);
}
[〜#〜] edit [〜#〜]コメントに注意してください。 TooMuchPeteは、通常のHTTP基本認証ヘッダーが機能するという点で正しかった。どうやら私はMailChimp側で古いコードか何かを打っていたようです。
新しい3.0APIを呼び出そうとしている人のためのリファレンスとして投稿を残しておきます。
Mailchimpeコマース
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$ = "[email protected]" '"[email protected]"
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
これは誰かの時間を節約するかもしれません