Обновление подписчиков в списке с использованием 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] уже является участником списка. Используйте PATCH для обновления существующих участников.

Как мне использовать PATCH для обновления информации о пользователе? Я не уверен, где это указать.

7

Решение

Я понял, где я иду не так. Когда пользователь первоначально добавляется в список, в ответе предоставляется идентификатор. Мне нужно сохранить идентификатор в моей базе данных с данными этого человека и ссылаться на идентификатор в 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");
7

Другие решения

Ты ищешь CURLOPT_CUSTOMREQUEST вариант в cURL.

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

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

3

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

<?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
По вопросам рекламы [email protected]