2015-09-25 16 views
7

Mailchimp API(v3.0)に大きなアップデートがあり、多くのjQueryプラグインが古くなっており、POSTのサブスクライバはform.submit()になりました。 V3.0のドキュメントを読んだ後Mailchimp API V3 jQuery Ajax POSTサブスクライバ

Managing subscribersは、次のようなJSONオブジェクト形式を提案する:

{ 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

そして、APIリストのリソースに対して次のルートのエンドポイント:

https://<dc>.api.mailchimp.com/3.0/

だからここに私のform.submit()コードとjQueryのAjaxのPOST要求:

$(document).ready(function(){ 
    var mcForm = $('#mailchimpForm'); 
    var mailchimp = {}; 
    mailchimp.dc='us5'; 
    mailchimp.id='xxxxxxxx'; 
    var url = '//' + mailchimp.dc + '.api.mailchimp.com/3.0/lists/' + mailchimp.id + '/members/'; 

    function beginMailchimpPost(data){ 
     var params = JSON.stringify(data); 
     $.ajax({ 
      url: url, 
      method: 'POST', 
      data: params, 
      dataType: 'jsonp', 
      contentType: 'application/json; charset=utf-8', 
      error: function(res, text){ 
       console.log('Err', res); 
      }, 
      success: function(res){ 
       console.log('Success', res); 
      } 
     }); 
    } 
}); 

これはJSON.stringify(data)オブジェクトです:

{"email_address":"[email protected]","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}} 

そして、私は次のエラーを取得しています:

GET http://... 401 (Unauthorized) 
Err Object {readyState: 4, status: 404, statusText: "error"} 

間違っている可能性が何?

Mailchimp's API v3.0 docs(メンバーリストのリスト)へのリンクです。

+0

最高のものはhttp://stackoverflow.com/a/21491824/1821607 –

答えて

1

あなたはAPIキーを渡していないため、401が表示されます。 mailchimp_api_keyアカウントのための鍵である

beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", 
    "Basic " + btoa("api:" + mailchimp_api_key)); }; 

:あなたはあなたに以下を追加する必要があります

は、AJAX呼び出します。 apiでの認証の詳細については、http://kb.mailchimp.com/api/article/api-3-overviewをご覧ください。

+3

ですが、これはclientside JSからのものであれば、ここでもクロスサイトスクリプティングの問題が発生します。コールは、クライアントに頼るのではなく、サーバー経由でプロキシする必要があります。 – TooMuchPete

+0

@TooMuchPeteだから、クライアント経由でmailchimpに簡単に投稿する方法はありませんか?これを行うAPI v2.0を使用する多くのjQuery/Angularプラグインがあります。 – Gus

+0

@aubreyhodesご返信ありがとうございますが、今は404が手に入りました。適切なAPIも追加しました。失敗。 – Gus

-1

このようにAPIキーをparamsに追加する必要があります。

{ 
    "apikey": "your key here", 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

次に、 "jsonp"から "json"にデータ型を変更する必要があります。 "jsonp"はGETのみでPOSTメソッドでは動作しません。

最後に、クロスドメインスクリプトを許可する必要があります。

http://enable-cors.org/server.html

2

残念ながらフロントエンドMailchimp APIのリクエストを作成することはできません。

Note MailChimp does not support client-side implementation of our API using CORS requests due to the potential security risk of exposing account API keys.

https://developer.mailchimp.com/documentation/mailchimp/guides/get-started-with-mailchimp-api-3/#authentication

+0

あなたの変更されたPHPソリューションを椅子に託すのはいいですか? – Himmators

2

私はそれをやった方法は、あなたのAJAXコードを使用するが、すべてのMailChimpのものを取り除くと、PHPファイルへのPOSTデータを送信することです。私はこのコードを使用:

https://github.com/actuallymentor/MailChimp-API-v3.0-PHP-cURL-example/blob/master/mc-API-connector.php

私はちょうど私が単一のユーザーをサブスクライブするために必要な、それが魅力のように働いた部分以外のすべてを取り除か。エラー報告の場合、おそらくPHP側でエラーを検出し、HTTPステータスをAJAXに送信することができます。

関連する問題