Как вернуть ошибки из пакетной операции MailChimp API v3.0
Я борюсь с новым API MailChimp и пакетной функциональностью, в частности, с тем, как вернуть любые ошибки из базовых операций, которые были пакетированы, а не самой пакетной операции.
Мой код ниже и работает для добавления двух тестовых подписчиков. Ответ показывает только успех для всей партии:
[errored_operations] => 0
Если я запустлю его снова, он вернет аналогичный ответ, но с двумя ошибками:
[errored_operations] => 2
Кроме этого, нет никаких указаний относительно того, что не удалось или почему. В этом случае мы знаем, что это потому, что пользователи уже подписаны. Если я пытаюсь добавить одного пользователя без пакетного вызова, используя POST /lists/{list_id}/members
Я получаю ответ, который подробно описывает, что именно не удалось.
stdClass Object
(
[type] => http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/
[title] => Member Exists
[status] => 400
[detail] => mary@jackson.net is already a list member. Use PUT to insert or update list members.
[instance] =>
)
Как я могу зафиксировать отдельные ошибки при добавлении (или обновлении или удалении) сотен подписчиков?
Я пробовал просто проходить через пользователей, совершать несколько отдельных звонков, и это работает: он добавляет пользователей и / или предоставляет подробные отчеты об ошибках. Но кажется, что глупо делать 500 вызовов, когда API настроен для обработки этого за один вызов. Спасибо за любые идеи!
Вот мой код:
$list_id = 'xyz123';
$subscribers = array(
array(
'email' => 'jeff@jackson.net',
'status' => 'subscribed',
'firstname' => 'Jeff',
'lastname' => 'Jackson'
),
array(
'email' => 'mary@jackson.net',
'status' => 'subscribed',
'firstname' => 'Mary',
'lastname' => 'Jackson'
)
);
$add_subs_batch = add_subs_batch($list_id, $subscribers);
echo '<pre>add_subs_batch: ';
print_r($add_subs_batch);
echo '</pre>';
function add_subs_batch($list_id, $data) {
$method = 'POST';
$batch_path = 'lists/' . $list_id . '/members';
$result = mc_request_batch($method, $batch_path, $data);
if($result && $result->id) {
$batch_id = $result->id;
$batch_status = get_batch_status($batch_id);
return $batch_status;
}
else {
return $result;
}
}
function get_batch_status($batch_id, $i=1) {
$method = 'GET';
$target = 'batches/'.$batch_id;
$result = mc_request($method, $target, $data);
sleep(1); // wait 1 second and try
if($result->status == 'finished' ) {
return $result;
}
else {
return get_batch_status($batch_id, $i+1);
}
}
function mc_request_batch( $method, $batch_path, $data = false ) {
$api_key = '12345-us1';
$dataCenter = substr($api_key,strpos($api_key,'-')+1);
$url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/';
$target = 'batches';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url . $target );
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST' );
curl_setopt($ch, CURLOPT_TIMEOUT, 10 );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_USERAGENT, 'YOUR-USER-AGENT' );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
if( $data ) {
$batch_data = new stdClass();
$batch_data->operations = array();
foreach ($data as $item) {
$batch = new stdClass();
$batch->method = $method;
$batch->path = $batch_path;
$batch->body = json_encode( array(
'email_address' => $item['email'],
'status' => $item['status'],
'merge_fields' => array(
'FNAME' => $item['firstname'],
'LNAME' => $item['lastname']
)
) );
$batch_data->operations[] = $batch;
}
$batch_data = json_encode($batch_data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $batch_data );
$response = curl_exec( $ch );
}
curl_close( $ch );
return json_decode($response);
}
1 ответ
Вы получите id
в ответ на пакетную операцию. Это "Batch ID", который является строкой, которая однозначно идентифицирует пакетный запрос.
Чтобы получить статус пакетного запроса, вы должны вызвать запрос GET на URL, /batches/{batch_id}
,
Из ответа вы можете найти URL в response_body_url
поле, содержащее архив с архивом результатов всех операций в пакетном вызове.
Ссылка:
- http://developer.mailchimp.com/documentation/mailchimp/reference/batches
- http://developer.mailchimp.com/documentation/mailchimp/guides/how-to-use-batch-operations/
Заметка
По соображениям безопасности response_body_url действителен только в течение 10 минут. Через 10 минут сгенерируйте еще один вызов GET для /3.0/batches/ndombatch_id}.
После того, как вы сделаете запрос на пакетную операцию, результаты будут доступны в течение 7 дней.