Mailchimp Batch Подписаться 2.0 Возвращает False на 500+ записей (PHP)

У меня есть php-скрипт для обновления моих подписчиков из моего списка пользователей WordPress в Mailchimp с помощью пакетной подписки. ( https://apidocs.mailchimp.com/api/2.0/lists/batch-subscribe.php )

Все работает нормально, когда я отправляю около 400 записей. Все записи добавляются, и я получаю возврат из API с количеством добавленных записей и т. Д.

Если я отправлю около 600 или более (у меня около 730 подписчиков), все записи добавляются в Mailchimp, но API возвращает FALSE. Я дважды проверил его с помощью === false, и это неверно. Я не получаю ошибок – он просто возвращает false (но все записи добавляются в Mailchimp).

Mailchimp говорит: «Максимальные размеры партии варьируются в зависимости от количества данных в каждой записи, хотя вы должны ограничить их размером 5k – 10k записей, в зависимости от вашего опыта». ( https://apidocs.mailchimp.com/api/2.0/lists/batch-subscribe.php ).

Я нигде не близок к этому, и каждая запись добавляется в список mailchimp просто отлично. Я просто не получаю возврат от API.

Я увеличил значение тайм-аута до 5 минут. Я также переключился на использование разных записей, подозревая, что у меня, возможно, была запись с чем-то, что заставляло ее испортиться, но у нее было такое же поведение с разными записями.

Я использую библиотеку DrewM для взаимодействия с API Mailchimp версии 2.0. Я дважды проверил, чтобы DrewM использовал сообщение для запроса, и это так. ( https://github.com/drewm/mailchimp-api/ )

Любые идеи, что вызывает это?

Вот код:

function mailchimpdailyupdate () { set_time_limit(300); $api = get_mc_api(); $mcListId = get_mc_mailing_list(); $MailChimp = new \Drewm\MailChimp($api); 

  foreach ( $blogusers as $user ) { $userinfo = get_userdata( $user->ID ); $location = ...//code to get location $merge_vars = array( 'FNAME'=> $userinfo->first_name, 'LNAME'=> $userinfo->last_name, 'MMERGE3'=> $userinfo->user_login, //username 'MMERGE6'=> $location //location ); $batch[] = array( 'email' => array('email' => $user->user_email), 'merge_vars' => $merge_vars ); } //end foreach //mailchimp call $retval = $MailChimp->call('lists/batch-subscribe', array( 'id' => $mcListId, // your mailchimp list id here 'batch' => $batch, 'update_existing' => true ) ); if ($retval === false) { echo "Mailchimp API returned false"; } echo 'Added: ' . $retval['add_count'] . "<br/>"; echo 'Updated: ' . $retval['update_count'] . "<br/>"; echo 'Errors: ' . $retval['error_count'] . "<br/>"; } 

С помощью поддержки Mailchimp я смог найти и решить проблему.

Проблема была в обертке DrewM. Секция длины содержимого заголовка, по-видимому, не работала правильно при длительных вызовах. Я удалил его, и все стало нормально работать.

Исходная часть кода DrewM (не работает):

  $result = file_get_contents($url, null, stream_context_create(array( 'http' => array( 'protocol_version' => 1.1, 'user_agent' => 'PHP-MCAPI/2.0', 'method' => 'POST', 'header' => "Content-type: application/json\r\n". "Connection: close\r\n" . "Content-length: " . strlen($json_data) . "\r\n", 'content' => $json_data, ), ))); 

Обновленный раздел кода (рабочий):

  $result = file_get_contents($url, null, stream_context_create(array( 'http' => array( 'protocol_version' => 1.1, 'user_agent' => 'PHP-MCAPI/2.0', 'method' => 'POST', 'header' => "Content-type: application/json\r\n". "Connection: close\r\n", 'content' => $json_data, ), )));