Статус API Mailchimp 200 для участников, которые уже подписаны

Следующий код работает и успешно подписывает новых участников. Однако статус возвращает 200, даже если адрес электронной почты уже подписан. Я проверил, что $member_id правильно хэшируется, и, несмотря на идентичные значения, он все еще возвращает 200.

$result = array(
    'status' => sync_mailchimp($data)
);

var_dump($result) // 200

function sync_mailchimp($data) {

    // Setup our Mailchimp info
    $api_key = 'xxxxx';
    $list_id = 'ab8abde5bb';

    $member_id  = md5(strtolower($data['email'])); // lowercase hash of the email
    $datacenter = 'us16';
    $url = 'https://' . $datacenter . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . $member_id;

    $json = json_encode([
        'email_address' => $data['email'],
        'status'        => $data['status']
    ]);

    // Send via curl
    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);                                                                                                                 

    $result = curl_exec($ch);

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $httpcode;
}

person Nick    schedule 19.06.2017    source источник


Ответы (1)


У меня также была такая же проблема при использовании аналогичного фрагмента.

Чтение документации MailChimp API 3.0, касающейся управления подписчикам (в частности, раздел Подписаться на адрес), было ясно, что этот метод не является правильным способом добавления нового подписчика.

Тип запроса должен быть POST

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

и должен быть отправлен в конечную точку

https://<data_center>.api.mailchimp.com/3.0/lists/<list_id>/members/

Тело запроса, содержащее JSON, идентично.

Код ответа будет 200, когда адрес электронной почты будет успешно добавлен в список, и 400, если адрес электронной почты уже существует в списке.

Обратите внимание, что этот метод не работает для обновления существующего подписчика — для этого тип запроса должен быть PATCH, и вы должны использовать исходную конечную точку, оканчивающуюся хэшированным адресом электронной почты.

person Slava Nossar    schedule 24.08.2017