Интеграция 1С Bitrix и ExpertSender с использованием API

Рассказ пойдет о том, как подружить сайт под управлением 1C Bitrix и систему ExpertSender (профессиональное решение для реализации email-кампаний). На терминалогии и нюансах останавливаться не будем. Если интересно узнать что это за такие звери, что они едят и где живут, добро пожаловать в Google ?  Итак, начнем повествование…

Постановка задачи

Давайте разберем все необходимые действия на примере, думаю, так будет нагляднее. Допустим, у нас на сайте существует следующая форма регистрации:


Задача: При регистрации пользователя создавать в ExpertSender подписчика с указанными в форме полями. При изменении данных пользователя в Bitrix, обновлять информацию в ExpertSender.

Итак, что нужно сделать ясно, приступили к решению.

Подготавливаем ExpertSender

Для начала создадим лист в который будем собирать наших подписчиков с формы регистрации. Заходим в систему и выбираем Подписчики → Списки рассылок → Создать лист подписчиков и заполняем все требуемые поля.

Далее разберемся с полями подписчика. По умолчанию ExpertSender предполагает хранение следующих требуемых нам полей: Имя, Фамилия, Email, соответсвенно нам потребуется добавить недостающие поля (Дата рождения, номер телефона, город) как дополнительные. Для этого перейдем в Подписчики → Дополнительные поля  и выберем Добавить поле.

Для нас важны здесь такие поля как Название и  Тип настраиваемого поля, т.к. они потребуются нам при написании API запроса.

Я предлагаю назвать поля следующим образом:


Полное названиеНазваниеТип поля
Дата рожденияbirthdateДата
Номер телефонаphoneЧисло
ГородcityТекст

Теперь подготовим API, для этого перейдем в Настройки → Субаккаунт → API. Мы можем использовать уникальный ключ для API, который позволяет нам делать все что заблагорассудится, но из соображений безопасности рекомендуется создать ключ с определенными правами. Нажимаем Добавить новый ключ API, и выбираем пункт Действия с подписчиками — добавление подписчика/подписчиков в лист. Если позднее нам понадобятся какие-либо другие права, добавим их.

ExpertSender подготовили, далее переходим к настройке Bitrix.

Интегрируем

В Bitrix у пользователей все требуемые нам поля существуют по умолчанию, соответственно создавать их не требуется. Теперь пришло время написать немного кода.

Для того, чтобы при изменении полей пользователя в Bitrix данные изменения так же отражались на подписчиках в ES, создадим и зарегистрируем обработчики событий  OnBeforeUserRegister(событие возникающее после регистрации пользователя), и OnBeforeUserUpdate(событие возникающее при обновлении данных пользователя) которые будут получать нужные нам данные, формировать и отправлять запрос к API ES на добавление/обновление подписчиков. Сделаем это в файле bitrix/php_interface/init.php следующим образом.// регистрируем обработчики
AddEventHandler(«main», «OnBeforeUserRegister», $onBeforeUserUpdateHandlerEmailToLogin);
AddEventHandler(«main», «OnBeforeUserUpdate», $onBeforeUserUpdateHandlerEmailToLogin);

// регистрируем обработчики
AddEventHandler("main", "OnBeforeUserRegister", $onBeforeUserUpdateHandlerEmailToLogin);
AddEventHandler("main", "OnBeforeUserUpdate", $onBeforeUserUpdateHandlerEmailToLogin);

$expertsenderUserAddOrUpdate = function (&$arFields) {

 // т.к. код на добовление и обновление пользователя идентичен
 // но ID пользователя в одном случае хранится в $arFields['ID']
 // а вдругом в $arFields['USER_ID'] сделаем проверку перед выборкой полей
 // и получим нужные нам поля
if (isset($arFields['ID'])) {
 $rsUser = CUser::GetByID($arFields['ID']);
 }
 else
 {
 $rsUser = CUser::GetByID($arFields['USER_ID']);
 }

 $arUser = $rsUser->Fetch();

 //Получаем поля в переменные
 $email = $arFields['EMAIL'];
 $name = $arFields['NAME'];
 $last_name = $arFields['LAST_NAME'];
 $personal_phone = $arFields['PERSONAL_PHONE'];
 $personal_city = $arFields['PERSONAL_CITY'];
 $personal_birthday = $arFields['PERSONAL_BIRTHDAY'];


 //формируем запрос к api Expertsender
 $request ='<ApiRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">';
 $request .='<ApiKey>YOUR_API_KEY</ApiKey>';
 $request .='<Data xsi:type="Subscriber">';
 $request .='<Mode>AddAndUpdate</Mode>';
 $request .='<Force>false</Force>';
 $request .='<ListId>3</ListId>';
 $request .='<Email>'.$email.'</Email>';
 $request .='<Firstname>'.$name.'</Firstname>';
 $request .='<Lastname>'.$last_name.'</Lastname>';
 $request .='<Properties>';
 $request .='<Property>';
 $request .='<Id>1</Id>';
 $request .='<Value xsi:type="xs:string">'.$personal_phone.'</Value>';
 $request .='</Property>';
 $request .='<Property>';
 $request .='<Id>2</Id>';
 $request .='<Value xsi:type="xs:string">'.$personal_city.'</Value>';
 $request .='</Property>';
 $request .='<Property>';
 $request .='<Id>6</Id>';
 $request .='<Value xsi:type="xs:date">'.date('Y-m-d', strtotime($personal_birthday)).'</Value>';
 $request .='</Property>';
 $request .='</Properties>';
 $request .='</Data>';
 $request .='</ApiRequest>';
//отправляем запрос
 $curl_options = array (
 CURLOPT_URL => 'https://api2.esv2.com/Api/Subscribers/', //ваш путь к api expertsender
 CURLOPT_POST => TRUE,
 CURLOPT_RETURNTRANSFER => FALSE,
 CURLOPT_HEADER => array(
 'POST https://api2.esv2.com/Api/Subscribers/ HTTP/1.1',
 'Accept-Encoding: gzip,deflate',
 'Content-Type: text/xml',
 'User-Agent: Jakarta Commons-HttpClient/3.1',
 'Host: api.esv2.com',
 'Content-Length: 715'
 ),
 CURLOPT_POSTFIELDS => ($request)

 );
 $curl = curl_init() or die("cURL init error");
 curl_setopt_array($curl, $curl_options) or die("cURL set options error" . curl_error($curl));
 $response = curl_exec($curl) or die ("cURL execute eroor" . curl_error($curl));
 curl_close($curl);

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

Вот и все. Далее отлаживаем и наслаждаемся проделанной работой.

Так же, мы можем использовать другие события Bitrix и методы Expertsender для решения поставленных нам задач (например, отправки сообщений). Ссылки на документации по данной теме ниже:

Документация по Expert Sender REST API

Список событий 1С Битрикс

Данный материал был скопирован, с закрытого сайта yuriysmirnov.ru, и сохранен для себя. На авторство не претендую.

Вам также может понравиться

About the Author: Vladimir Kusakin

Hi. I am web developer. For the past 9 years, I've been developing applications for the web using mostly PHP and Python. About me

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

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