Подписка на рассылку при оформлении заказа в 1С Битрикс

Подписка на рассылку при оформлении заказа в 1С Битрикс

29.06.2018
Итак, возникла необходимость добавить функционал подписки покупателя на рассылку на странице оформления заказа. Как это реализовать?
Вот что необходимо сделать:
1. Добавить свойство заказа в настройках магазина
2. Добавить обработчик события добавления заказа
3. В обработчике подписать покупателя на рассылку

Добавляем свойство заказа

Для чего это вообще нужно?  Это нужно чтобы пользователь мог проставить(снять) галку в форме оформления заказа, выразив желание получать новости и акции от нас.
Переходим в меню Магазин -> Настройки -> Свойства заказа -> Список свойств. Добавляем новое свойство c кодом SUBSCRIBE.
Добавление свойства заказа 1С Битрикс
Если шаблон оформления заказа не кастомизировался, то больше никаких действий для вывода чекбокса в форме оформления заказа предпринимать не нужно.

Добавляем обработчик события создания нового заказа

Находим файл /bitrix/php_interface/init.php, либо /local/php_interface/init.php. Если же файла init.php нет то создаем его по одному из указанных пути и в нем пишем следующий код:

use Bitrix\Main;

Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved',
    'OnOrderAddSubscribe'
);
Таким образом мы добавили через менеджер событий обработчик события сохранения заказа OnSaleOrderSaved. Теперь добавим саму функцию обработчика OnOrderAddSubscribe.

Подписываем пользователя на рассылку

function OnOrderAddUpdateServFields(Main\Event $event)
{
    $order = $event->getParameter("ENTITY");
    $isNew = $event->getParameter("IS_NEW");   //получаем флаг того, что заказ новый
    if ($isNew)   //только для новых
    {
		//подписка на рассылку
		\Bitrix\Main\Loader::IncludeModule("subscribe");
		$orderSubscribePropertyId = 53;   //ID созданного свойства заказа с кодом SUBSCRIBE
		$orderEmailPropertyId = 2;   //ID свойства заказа в котором хранится E-mail адрес покупателя
		
		//информация о подписке при оформлении заказа
		$propertyCollection = $order->getPropertyCollection();
		$subscribe_prop = $propertyCollection->getItemByOrderPropertyId($orderSubscribePropertyId);
		$email_prop = $propertyCollection->getItemByOrderPropertyId($orderEmailPropertyId);
		$subscribe_val = $subscribe_prop->getValue();
		$email_val = $email_prop->getValue();
		
		if($subscribe_val == 'Y'){    //проверяем, что галка проставлена
			$RUB_ID = array(6);   //массив ID рубрик на которые будет подписан покупатель
			\Bitrix\Sender\Subscription::subscribe(array('EMAIL'=>$email_val, 'SUBSCRIBE_LIST'=>$RUB_ID));   //оформляем подписку
		}
     }
}

Узнал сам - поделись с друзьями!

Возврат к списку