2

MailChimp で既に作成されたリストがあり、購読済みリストと購読解除済みリストにいくつかのアドレスがあります。

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

$apiKey = "XXXXXXXXXXXXXXXXXXXXXXXXX-us12";

$subscribers = array(array(
    'email_address'     => 'subscriber1@gmail.com',
    'status'    => 'subscribed',
    'merge_fields'  => array(
            'FNAME'     => "subscriber1F",
            'LNAME'     => "Arunachalam1L"
        )
),
array(
    'email_address'     => 'subscriber2@gmail.com',
    '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 要求を作成しました。このため、エラーが発生した操作の情報を含む応答を取得しています。送信したすべてのアドレスの結果を含むバッチ操作の応答を取得するためのリンクを取得しました。これにはすべての操作がありますが、アドレスが既に存在する場合、その操作は成功します (成功した操作カウントに追加されるという意味で) が、加えた変更は反映されず、追加されたアドレスが存在しない場合も失敗した操作でアップします。

4

2 に答える 2

-1

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

array_push($batch_operations, $operation);
于 2016-07-01T10:00:55.933 に答える