
Рассказ пойдет о том, как подружить сайт под управлением 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
Данный материал был скопирован, с закрытого сайта yuriysmirnov.ru, и сохранен для себя. На авторство не претендую.