Mailchimp API. Как подписать пользователя

О том как программно подписать пользователя в Mailchimp список, я рассказывал в статье Mailchimp api на русском.

В этой статье я расскажу о том, как его отписать, разумеется тоже программно.

Предположим, что такие мелочи жизни как API KEY, у вас уже есть. Если нет, или не знаете где его взять, то просто посетите статью в которой вы узнаете как получить API KEY Mailchimp, зайдите в свой Логин на сервисе MailChimp, и получите его.

Создадим класс и в __construct получим наш api key из опции, которую мы сохранили в разрабатываемом плагине, на странице в админ-панели.


private $apiKey = '';
	public $url = '';
	public $listID;

	public function __construct(){
		$this->apiKey = get_option ('mailchimpkey');// из сохраненной ранее опции в плагине
                // $this->apiKey = 'Либо укажем здесь вручную';

		preg_match_all('/[\d]+$/', $this->apiKey, $matches, PREG_SET_ORDER, 0); 
               /*
                выберем только цифры для номера нашего сервера
                в моем случае это 14
                https://us14.admin.mailchimp.com/
                */
		$link_num = ( !empty($matches[0][0]) ) ? $matches[0][0] : '';

		$this->url = 'https://us'.$link_num.'.api.mailchimp.com/3.0';
               // $this->url = 'https://us14.com.api.mailchimp.com/3.0' -- url будет выглядеть вот так
		$this->listID = get_option ('maillist'); // аналогично из сохраненной ранее опции в плагине


	}

Далее нужно получить список всех пользователей списка MailChimp


	// запросим наших подписчиков из определенного списка
	public function getListUsers(){ 
		
		$ch = curl_init($this->url.'/lists/' . $this->listID . '/members/');
	       curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $this->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_SSL_VERIFYPEER, false);

	       $result = curl_exec($ch);
	       $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	       curl_close($ch);
	       $res =  json_decode($result)->members;
		return $res;
	}

Удалим подписчика из списка


public function unsubscribe_user($email){
		$list = $this->getListUsers();
		foreach ($list as $l) {
		
			if ( $l->email_address == $email ){ 

				// если совпал Email пользователя при переборе списка

				$ch = curl_init($this->url.'/lists/' . $this->listID . '/members/'.$l->id);
			       curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $this->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, 'DELETE');
			   		// то удалим его
			       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

			       $result = curl_exec($ch);
			       $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
			       curl_close($ch);
			       $res =  json_decode($result);
				return $res;
			}else continue;
		}
		
	}

И конечно же создадим экземпляр класса и дернем его метод удаления.


$email = 'user_ne_zaplatil@podpiska.net'; 
(new MailchimpSub)->unsubscribe_user($email);

Итого, полный код выглядит так:


class MailchimpSub {
	
	private $apiKey = '';
	public $url = '';
	public $listID;

	public function __construct(){
		$this->apiKey = get_option ('mailchimpkey');

		$re = '/[\d]+$/';

		preg_match_all($re, $this->apiKey, $matches, PREG_SET_ORDER, 0);

		$link_num = ( !empty($matches[0][0]) ) ? $matches[0][0] : '';

		$this->url = 'https://us'.$link_num.'.api.mailchimp.com/3.0';

		$this->listID = get_option ('maillist');


	}

	// запросим наших подписчиков из определенного списка
	public function getListUsers(){ 
		
		$ch = curl_init($this->url.'/lists/' . $this->listID . '/members/');
	       curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $this->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_SSL_VERIFYPEER, false);

	       $result = curl_exec($ch);
	       $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
	       curl_close($ch);
	       $res =  json_decode($result)->members;
		return $res;
	}



	public function unsubscribe_user($email){
		$list = $this->getListUsers();
		foreach ($list as $l) {
		
			if ( $l->email_address == $email ){ 

				// если совпал Email пользователя при переборе списка

				$ch = curl_init($this->url.'/lists/' . $this->listID . '/members/'.$l->id);
			       curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $this->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, 'DELETE');
			   		// то удалим его
			       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

			       $result = curl_exec($ch);
			       $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
			       curl_close($ch);
			       $res =  json_decode($result);
				return $res;
			}else continue;
		}
		
	}
}


$email = 'user_ne_zaplatil@podpiska.net'; 
(new MailchimpSub)->unsubscribe_user($email);

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *