Обновление подписчиков в списке с помощью CURL и Mailchimp API v3


У меня есть этот код ниже, который добавляет пользователя в уже существующий список в Mailchimp.

$apikey = '<api_key>';
        $auth = base64_encode( 'user:'.$apikey );

        $data = array(
            'apikey'        => $apikey,
            'email_address' => $email,
            'status'        => 'subscribed',
            'merge_fields'  => array(
                'FNAME' => $name
            )
        );
        $json_data = json_encode($data);

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://us2.api.mailchimp.com/3.0/lists/<list_id>/members/');
        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_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);                                                                                                                  

        $result = curl_exec($ch);

        var_dump($result);
        die('Mailchimp executed');

Этот код только добавляет пользователей в список, и когда я пытаюсь добавить сведения об одном и том же пользователе дважды, со второй попытки он выдает следующую ошибку:

[email protected] уже является членом списка. Используйте ИСПРАВЛЕНИЕ для обновления существующих участников.

Как мне использовать ИСПРАВЛЕНИЕ для обновления сведений о пользователе? Я не уверен, где это указать.

Author: ekad, 2015-05-29

3 answers

Я понял, в чем я ошибаюсь. Когда пользователь изначально добавляется в список, в ответе указывается идентификатор. Мне нужно сохранить идентификатор в своей базе данных с данными этого человека и указать идентификатор в URL-адресе, по которому я звоню, когда я хочу обновить данные пользователя в списке Mailchimp.

https://us2.api.mailchimp.com/3.0/lists/<list_id_goes_here>/members/<members_id_goes_here>

Спасибо @toomuchpete за правильную команду curl.

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
 6
Author: VenomRush, 2015-06-02 11:14:00

Вы ищете опцию CURLOPT_CUSTOMREQUEST в cURL.

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");

Но, поскольку теперь это ваш второй вопрос за столько дней, в котором вы спрашиваете, как использовать встроенную библиотеку cURL, возможно, стоит использовать что-то немного лучшее. Если вы используете PHP 5.4 или лучше, я рекомендую Жрать. Запросы PHP также очень хороши, хотя и работают с PHP 5.3.

 3
Author: TooMuchPete, 2015-05-29 21:08:44

Попробуйте вот это. Это работает на меня. Я использую эту функцию. Надеюсь, это решит вашу проблему.

<?php
/**
 * Created by PhpStorm.
 * User: Faisal
 * Website: www.faisal-ibrahim.info
 * Date: 2/12/2016
 * Time: 10:07 AM
 */
if (isset($_POST['email'])) {
    $email = $_POST['email'];
} else {
    $email = '[email protected]';
}

$data              = [
    'email'     => $email,
    'status'    => 'subscribed',
    'firstname' => 'Faisal',
    'lastname'  => 'Ibrahim'
];
$api_response_code = listSubscribe($data);
echo $api_response_code;

/**
 * Mailchimp API- List Subscribe added function.In this method we'll look how to add a single member to a list using the lists/subscribe method.Also, We will cover the different parameters for submitting a new member as well as passing in generic merge field information.
 *
 * @param array $data Subscribe information Passed.
 *
 * @return mixed
 */
function listSubscribe(array $data)
{
    $apiKey = "cf8a1fd222a500f27f9e042449867c7c-us15";//your API key goes here
    $listId = "e8f3f5f880";// your trageted list ID

    $memberId   = md5(strtolower($data['email']));
    $dataCenter = substr($apiKey, strpos($apiKey, '-') + 1);
    $url        = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $listId . '/members/' . $memberId;
    $json       = json_encode([
        'email_address' => $data['email'],
        'status'        => $data['status'], // "subscribed","unsubscribed","cleaned","pending"
        'merge_fields'  => [
            'FNAME' => $data['firstname'],
            'LNAME' => $data['lastname']
        ]
    ]);

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $apiKey);
    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_CUSTOMREQUEST, "PATCH");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);

    $result   = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $httpCode;
}
 0
Author: Faisal, 2017-02-16 19:28:47