2016-03-31 6 views
1

私は既にMailChimpで作成したリストを持っており、購読済みおよび購読中のリストにはいくつかのアドレスがあります。api 3.0を使用してMailchimpリストに電子メールを大量に作成/更新する方法は?

ここで、PHPコードでapiを使用してサブスクライバのリストを作成/更新する必要があります。

$apiKey = "XXXXXXXXXXXXXXXXXXXXXXXXX-us12"; 

$subscribers = array(array(
    'email_address'  => '[email protected]', 
    'status' => 'subscribed', 
    'merge_fields' => array(
      'FNAME'  => "subscriber1F", 
      'LNAME'  => "Arunachalam1L" 
     ) 
), 
array(
    'email_address'  => '[email protected]', 
    'status' => 'subscribed', 
    'merge_fields' => array(
      'FNAME'  => "subscriber2F", 
      'LNAME'  => "subscriber2L" 
     ) 
)); 

$listId = "b633deb4c8"; 

$url = "https://us12.api.mailchimp.com/3.0/batches"; 
$id = 1; 
    foreach ($subscribers as $subscriber) { 
     #echo $subscriber['email_address']; 
     $operation = array(
      'method'=>'PUT', 
      'path'=>'/lists/'.$listId.'/members/'.md5(strtolower($subscriber['email_address'])), 
      'body'=>json_encode($subscriber)); 
     $id++; 
     array_push($batch_operations, $operation); 
    } 

    $request_encoded = json_encode(array('operations'=>$batch_operations)); 

    $curl = curl_init($url); 

    curl_setopt($curl, CURLOPT_USERPWD, 'user:' . $apiKey);  
    curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//raw output 
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, $request_encoded); 
$result = curl_exec($curl); 

私は応答200を取得していますし、その後も、私は、提出されたバッチ処理後に返されBatchIdの応答を取得してみました。

操作は終了し、すべて正常終了しますが、リストは更新されていません。誰もがバッチAPIを正常に使用しましたか?

Edit1: 新しい電子メールアドレスを持つ操作に対してこの応答が表示されています。

{"status_code":404,"operation_id":null,"response":"{\"type\":\"http:\/\/developer.mailchimp.com\/documentation\/mailchimp\/guides\/error-glossary\/\",\"title\":\"Resource Not Found\",\"status\":404,\"detail\":\"The requested resource could not be found.\",\"instance\":\"\"}"} 

編集2

説明 私はあなたが何を意味するかを正確に理解していない申し訳ありません。しかし、私がやっていることは、まずバッチ要求を送信することです(例えば: - それは2つの操作がポストのようにあります)。次に、私が作成した要求に対する応答でBatchIdを取得しています。私はBatchIdでGetリクエストを作成しました。これはエラーが発生した操作の情報を持つレスポンスを取得しています。私は、送信したすべてのアドレスの結果でバッチ操作の応答を取得するためのリンクを取得しました。これは単にすべての操作を持っていますが、アドレスがすでに存在する場合、その操作は成功します(つまり、正常な操作カウントに追加されます)。しかし、変更は反映されず、アドレスが存在しない失敗した操作では

+0

あなたが投稿したコードには、$ url変数が割り当てられている構文エラーがあります。また、あなたのパスには[MailChimpのドキュメントが示す]最初にスラッシュがありません(http://developer.mailchimp.com/documentation/mailchimp/guides/how-to-use-batch-operations/)。それが問題ではないと仮定すると、バッチ操作の表示は成功しますか?それはあなたが期待した数字ですか? – TooMuchPete

+0

投稿を$ url変数とパスで更新しました。まだエラーが発生しています。実際には、リストに既に存在するアドレスに対してのみ成功応答を得ています。新しいアドレスごとに、操作が失敗しています。 –

+1

成功したバッチコールの内部に戻ってくる応答、またはバッチコールを実行したときの応答はありますか?前者の場合、リストIDが正しくない可能性が最も高いです。あなたがrunscopeのようなものを使うと、どの郵便体が送られているか見ることができます。 – TooMuchPete

答えて

2

問題を修正しました。そのため、URLのpath.Though Mailchimpのドキュメントは、(でも私はバッチ操作をしようとしています)以下のように述べていdocs

enter image description here

私はそれがこのようにする必要があり、操作にパスを変更しました。

'path'=>'lists/'.$listId.'/members/'.md5(strtolower($subscriber['email_address'])), 

現在、期待通りに機能します。操作中に 'PUT'メソッドを試してみましたが、mailchimpのリストの登録者を作成/更新します。

+3

彼が言うことは、「パスから最初のスラッシュを取り除く」ことです。 –

-1

次のコードを削除し、タイプをPOSTに変更して問題を解決してください。

array_push($batch_operations, $operation); 
+1

ようこそ。なぜこれがOPの問題を解決するかについて詳しく説明できますか? – m00am

関連する問題