Проверьте, подписана ли электронная почта на список в MailChimp API 3.0 с помощью PHP


Я только что прочитал следующее на веб-сайте MailChimp:

MailChimp API v3.0 теперь работает! Предыдущие версии больше не будут поддерживаться после 2016 года, поэтому все пользователи API должны начать переход на версию v3.0.

В результате я хотел бы перейти на версию v3.0 API. Пожалуйста, не могли бы у меня быть функции на PHP, которые возвращают логическое значение, которое будет проверять, подписан ли адрес электронной почты на определенный список MailChimp. Я не хочу подписываться на этого пользователя, а просто проверьте, подписаны они или нет.

Author: ekad, 2016-07-25

3 answers

ОБНОВЛЕНИЕ: Я ответил на другой вопрос более подробным руководством о том, как это сделать с помощью jQuery .ajax(): Добавление подписчиков в список с помощью API Mailchimp v3

Просматривая документацию Mailchimp и предполагая, что у вас есть определенный список, похоже, что вы бы назвали эту конечную точку с помощью GET: /lists/{list_id}/members/{subscriber_hash}

Чтобы сделать это на PHP, я нашел хороший скрипт, размещенный на github. Их последняя функция, вероятно, сделала бы трюк для вы:

function mc_checklist($email, $debug, $apikey, $listid, $server) {
    $userid = md5($email);
    $auth = base64_encode( 'user:'. $apikey );
    $data = array(
        'apikey'        => $apikey,
        'email_address' => $email
        );
    $json_data = json_encode($data);
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://'.$server.'.api.mailchimp.com/3.0/lists/'.$listid.'/members/' . $userid);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
        'Authorization: Basic '. $auth));
    curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    $result = curl_exec($ch);
    if ($debug) {
        var_dump($result);
    }
    $json = json_decode($result);
    echo $json->{'status'};
}

Если эта функция не работает, единственная оболочка, которую я смог найти для библиотеки v3, работает в сочетании с Laravel - Оболочка PHP API Mailchimp v3.

 8
Author: staypuftman, 2018-06-19 16:13:20

Если вы используете mailchimp-api, это выглядит так

include 'Mailchimp.php';
use \DrewM\MailChimp\MailChimp;
$MailChimp = new MailChimp('your**api***key');

function emailExistsMc($subscriberMail, $list_id){
    global $MailChimp;
    $subscriber_hash = $MailChimp->subscriberHash($subscriberMail);
    $result = $MailChimp->get("lists/$list_id/members/$subscriber_hash");
    if($result['status'] == '404') return false;
    return true;
}

Если $result['status'] равно 404, то ресурс не найден. Другие возможные значения для $result['status'] указаны в документах :

  • подписанный
  • отписался
  • очищено
  • в ожидании
  • транзакционный
 5
Author: Adam, 2017-05-04 09:02:26

Я использую библиотеку DrewM

function isSubscribed($emailAddress, $listId) {
    $chimp = new \DrewM\MailChimp\MailChimp($apiKeyHere);

    $subscriberHash = $chimp->subscriberHash($emailAddress);

    $result = $chimp->get('lists/' . $listId . '/members/' . $subscriberHash);

    return ($chimp->success() && isset($result['id']));
}
 2
Author: Brett, 2017-06-16 00:20:40