我写了一个方法来订阅用户MailChimp。什么特别的'关于它是自动订阅用户到列表中的组,以及列表中的段,基于用户'购物车商品,心愿单商品以及他订购的商品和/或类别。
与MailChimp的集成很简单 - 我得到的数据>发送卷曲>得到回应>处理回应。
我正在寻找一种不断更新用户的方法'小组和细分,基于他们在我店里的行为。
现在,MailChimp可以获得的唯一接受的状态是'订阅','等待'' clean'。所有这些都没有更新,只插入新订阅者。如果电子邮件已经订阅,则不会更新任何内容,甚至不会更新与订阅者在我的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);
}
答案 0 :(得分:0)
如果您的集成按预期添加了全新的订阅者,并且该问题在方法更新现有子记录的情况下显得孤立,则该问题可能与HTTP方法和/或api端点有关。
由于MailChimp API的v3仅允许在使用POST方法时初始化订阅者(这看起来可能在此处硬编码到cURL中),并且可能是为什么全新订阅者的添加没有问题。
这就是说,当建议使用PUT添加或更新新订阅者时,会在他们的文档中指定。
此外,除了这种替代方法的使用,为了确保更新现有订阅者,您还需要将其电子邮件小写版本的MD5哈希附加到端点。 这只需要对现有潜艇进行。
e.g。 /members/{lowercase_email_MD5_hash}
如果您首先使用MailChimp检查是否存在订户,如果您想要回收该订户,则应在响应中提供。