Отправляем купон при подписке на рассылку Битрикс
Очень хорошим стимулом для подписки на рассылку вашего интернет-магазина является выдача купона со скидкой на товар. Сейчас мы реализуем функционал выдачи купона пользователю, если тот подписался на рассылку.
В примере мы создаём купон для правил работы с корзиной. Кроме того, пример будет работать только в случае, если в компоненте не выставлен параметр "Запрашивать подтверждение подписки".
Реализовывать отправку купона при подписке на рассылку, мы будем кастомизируя стандартный компонент подписки bitrix:sender.subscribe.
Для начала полностью копируем этот компонент в своё пространство имён. Затем открываем файл component.php, находим условие if($arParams["CONFIRMATION"]) примерно на 102 строке и в else для этого условия вставляем такой код:
$sendCoupon = true;
if(count($mailingIdList) > 0)
{
$arExistedSubscription = array();
$subscriptionDb = \Bitrix\Sender\MailingSubscriptionTable::getSubscriptionList(array(
'select' => array('EXISTED_MAILING_ID' => 'MAILING.ID'),
'filter' => array('=CONTACT.EMAIL' => strtolower($_POST["SENDER_SUBSCRIBE_EMAIL"]), '!MAILING.ID' => null),
));
while(($subscription = $subscriptionDb->fetch()))
{
$arExistedSubscription[] = $subscription['EXISTED_MAILING_ID'];
}
// send if it have new subscriptions only
if(count(array_diff($mailingIdList, $arExistedSubscription)) <= 0)
$sendCoupon = false;
}
else
{
// do not send if no selected mailings and subscriber existed
$contactDb = \Bitrix\Sender\ContactTable::getList(array('filter' => array('=EMAIL' => strtolower($_POST["SENDER_SUBSCRIBE_EMAIL"]))));
if($contact = $contactDb->fetch())
$sendCoupon = false;
}
\Bitrix\Sender\Subscription::add($_POST["SENDER_SUBSCRIBE_EMAIL"], $mailingIdList, SITE_ID);
if($sendCoupon)
{
if(\Bitrix\Main\Loader::includeModule('sale'))
{
$COUPON = \Bitrix\Sale\Internals\DiscountCouponTable::generateCoupon(true); //генерируем купон
$fields = array(
"DISCOUNT_ID" => "3", //ID правила работы с корзиной
"ACTIVE" => "Y",
"TYPE" => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER, //купон на один заказ
"COUPON" => $COUPON,
"DATE_APPLY" => false
);
$result = \Bitrix\Sale\Internals\DiscountCouponTable::add($fields);
if($result->isSuccess())
{
$arEventFields = array(
"EMAIL" => $_POST["SENDER_SUBSCRIBE_EMAIL"],
"COUPON" => $COUPON
);
CEvent::Send("SEND_COUPON", "s1", $arEventFields);
}
}
}
$APPLICATION->set_cookie("SENDER_SUBSCR_EMAIL", $_POST["SENDER_SUBSCRIBE_EMAIL"], $cookieLifeTime);
$arResult['MESSAGE'] = array('TYPE' => 'NOTE', 'CODE' => 'message_success');
$subscr_EMAIL = $_POST["SENDER_SUBSCRIBE_EMAIL"];
unset($_SESSION['SENDER_SUBSCRIBE_LIST']);
И теперь нам остаётся только создать тип почтового события SEND_COUPON и шаблон письма к нему. В шаблоне для вывода купона используйте переменную #COUPON#, а для адреса получателя - #EMAIL#.