如何使用 api 3.0 create/update 将大量电子邮件发送到 Mailchimp 列表?

How to create/update bulk of emails to Mailchimp list using their api 3.0?

我有一个已在 MailChimp 中创建的列表,它在已订阅和未订阅列表中有一些地址。

现在,我需要在 PHP 代码中使用 api create/update 订阅者列表。

$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 的响应。

它returns 操作完成,一切都成功但列表尚未更新。有没有人成功使用过他们的批次api?

编辑1: 我收到了具有新电子邮件地址的操作的回复。

{"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 个操作,如 post)。然后我在我发出的请求的响应中得到一个 BatchId。然后我用 BatchId 发出了一个 Get 请求,为此我得到一个响应,其中包含错误信息 operation.I 得到一个 link 来获得批处理操作的响应以及所有地址的结果我发了。它只有所有操作,但如果地址已经存在,则该操作成功(从某种意义上说,它只是添加到成功的操作计数中)但我所做的更改没有反映出来,而且如果添加的地址不存在在失败的操作中。

我解决了这个问题。这是因为 url path.Though Mailchimp 文档如下所示(即使我正在尝试批处理操作)docs,

我在运行中改了路径,应该是这样的

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

现在它按预期工作了。已尝试使用 'PUT' 方法运行,它会同时向 mailchimp 中的列表提供 creates/updates 订阅者。

请删除以下代码并将类型更改为 POST,问题已解决。

array_push($batch_operations, $operation);