Iv'e написал способ подписания пользователями MailChimp. Что особенно важно, так это то, что он автоматически подписывает пользователей на группы в списке и сегменты внутри списка на основе элементов корзины пользователей, элементов списка пожеланий и элемента и/или категории, на которую он подписался.Как обновить сегменты и группы существующего подписчика в API MailChimp 3
Интеграция с MailChimp прямолинейна - я получаю данные> посылать завиток> получить ответ> ответ дескриптора.
Я ищу способ постоянного обновления групп пользователей и сегментов на основе их действий в моем магазине.
Теперь только принятые статусы MailChimp могут получить «подписанные», «ожидающие» и «чистые». Все они не обновляются, а только добавляются новые подписчики. Если письмо уже подписано, ничто не обновляется, даже данные, отличные от того, что подписчик имеет в своем профиле в моих списках MailChimp.
Вот мой код для справки:
protected static function subscribeToMailchimp($email, $fullname)
{
$params = EkerbaseJoomla::getPluginParams('system', 'ekerbaseusers');
$interests = self::getUserInterestsObject();
$apikey = $params->mailChimpApiKey;
$listId = $params->mailChimpListId;
$interestCategoryId = $params->mailChimpInterestCategoryId;
$auth = base64_encode('user:' . $apikey);
$apiUrl = 'https://'.substr($params->mailChimpApiKey, -3).'.api.mailchimp.com/3.0/lists/'.$listId;
$possibleGroups = json_decode(file_get_contents($apiUrl . '/interest-categories/' . $interestCategoryId . '/interests?apikey=' . $apikey))->interests;
$segments = json_decode(file_get_contents($apiUrl . '/segments?apikey=' . $apikey))->segments;
$data = [
'apikey' => $apikey,
'email_address' => $email,
'status' => 'subscribed',
'merge_fields' =>
[
'FNAME' => $fullname
]
];
if(! empty($interests->categories)) {
$data['interests'] = [];
foreach($possibleGroups as $group) {
if(in_array($group->name, $interests->categories)) {
$data['interests'][$group->id] = true;
}
}
}
if(! empty($interests->items)) {
$data['segments'] = [];
foreach($segments as $segment) {
if(in_array($segment->name, $interests->items)) {
$data['segments'][$segment->id] = true;
}
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl . '/members/');
curl_setopt($ch, CURLOPT_HTTPHEADER,
[
'Content-Type: application/json',
'Authorization: Basic '.$auth
]
);
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/3.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_encode($data));
$result = curl_exec($ch);
$response = json_decode($result);
switch($response->status) {
case 'subscribed':
$responseMessage = JText::_('EKERBASE_SUCCESS_NEWSLETTER');
$responseStatus = 'success';
$responseResult = 'mailchimp subscribing succeeded';
break;
default:
$responseStatus = 'error';
$responseMessage = $response->title;
$responseResult = 'mailchimp subscribing failed';
if($response->title === 'Member Exists') {
$responseMessage = JText::_('EKERBASE_NEWSLETTER_ALREADY_SUBSCRIBER');
}
break;
}
return EkerbaseAjax::buildJsonResponse($responseMessage, $responseStatus, $responseResult);
}
Удивительный помощник, он работал точно так же, как вы объяснили. Спасибо за вашу помощь :) –
Рад это слышать @ShirEkerling :-) – Stu
С удовольствием. Как это сделать? :] –