У меня есть список, который уже создан в MailChimp, и у него есть некоторые адреса в подписанных и отписавшихся списках.
Теперь мне нужно создать / обновить список подписчиков, используя API в PHP-коде.
$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 в ответе на запрос, который я сделал. затем я сделал запрос Get с BatchId, для этого я получаю ответ, содержащий информацию об операции с ошибкой. Я получил ссылку, чтобы получить ответ на пакетную операцию с результатами всех адресов, которые я отправил. которая просто выполняет все операции, но если адрес уже существует, то эта операция является успешной (в том смысле, что она только добавлена в счетчик успешных операций), но сделанные мной изменения не отражаются, а также, если добавленный адрес не существует в неудачной операции.
Я исправил проблему. Это из-за пути URL. Хотя в документации Mailchimp сказано, как показано ниже (даже я пытаюсь выполнить пакетную операцию) документы,
Я изменил путь в операции, должно быть так.
'path'=>'lists/'.$listId.'/members/'.md5(strtolower($subscriber['email_address'])),
теперь работает как положено. Пробовал с методом «PUT» в действии, он создает и обновляет подписчиков на список в mailchimp.
Удалите следующий код и измените тип на POST, проблема решена.
array_push($batch_operations, $operation);