2017-02-05 18 views
1

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); 
} 

ответ

0

Если ваша интеграция добавляет совершенно новый абонент, как и ожидалось, и этот вопрос оказывается изолирован в тех случаях, когда метод обновляемых существующей записи субмарины, вопрос может относиться к метод HTTP и/или конечную точку api.

Как v3 API-интерфейса MailChimp разрешает подписчикам подписываться только при использовании метода POST (который выглядит так, как будто он может быть жестко закодирован в cURL здесь), и, скорее всего, почему новые подписчики добавляются без проблем.

Это означает, что при необходимости добавления или обновления новых подписчиков с использованием PUT рекомендуется и указывается в их документах.

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

например. /members/{lowercase_email_MD5_hash}

Что должно быть предоставлено в ответе, если вы впервые проверяете MailChimp, существует ли абонент, если вы хотите его переработать.

+1

Удивительный помощник, он работал точно так же, как вы объяснили. Спасибо за вашу помощь :) –

+0

Рад это слышать @ShirEkerling :-) – Stu

+0

С удовольствием. Как это сделать? :] –