1С Битрикс предоставляет широкие возможности для работы с заказами, включая отправку писем на почту пользователей. Однако, возникают ситуации, когда нужно отправлять письма только определенным пользователям или при определенных условиях.
Задача состоит в отмене отправки писем о заказах сформированных с площадки Я.Маркет. В этом случае решением может быть написание своей функции для отправки писем с учетом необходимых условий, функция размещается/подключается в файле init.php
.
Пример кода, решающего задачу отправки писем при оформлении заказов с Яндекс Маркета, может быть следующим:
//подключим логирование - если нужно
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/na_log.txt");
use Bitrix\Sale; //подключение для получении пользователя из заказа и ID сайта
//используем событие OnOrderNewSendEmail
AddEventHandler("sale", "OnOrderNewSendEmail", "SendOtherEmail");
function SendOtherEmail($orderID, &$eventName, &$arFields) {
$market_user = 11; //ID пользователя для заказов с Яндекс маркета
$event_post = 'SALE_NEW_ORDER'; //почтовое событие
$template_id = 67; //Шаблон почтового события
$template_id_market = 32; //Шаблон почтового события для заказов маркета
if($eventName == $event_post){
$order = Sale\Order::load($orderID); // объект заказа
$user_order = $order->getUserId(); // ID пользователя
$site_id = $order->getSiteId(); // ID сайта - пример: s1
if($user_order == $market_user){ // Пользователь Я.Маркета
// убрать комментарий, если нужна отправка писем о заказах с маркета
// CEvent::Send($event_post, [$site_id], $arFields, 'N', $template_id_market);
}
if($user_order != $market_user){ // Пользователь не с Я.Маркета
CEvent::Send($event_post, [$site_id], $arFields, 'N', $template_id);
}
}
//Логирование
/*
$log_arr = [
"site_id" => $site_id,
"user_order" => $user_order,
"orderID" => $orderID,
"eventName" => $eventName,
"arFields" => $arFields,
];
AddMessage2Log($log_arr, "my_module_id");
*/
return false; //отмена стандартной отправки для исключения отправки дублей.
}
Код представляет собой функцию SendOtherEmail
, которая вызывается при отправке письма на почту пользователя при оформлении заказа, используя событие OnOrderNewSendEmail
. Функция получает ID заказа $orderID
, название почтового события $eventName
и массив полей $arFields
, передаваемых в шаблон письма.
В первой части функции определяются необходимые параметры:
$market_user
- ID пользователя для заказов с Яндекс Маркета (пользователь появляется в админке после начала работы с маркетом);$event_post
- название почтового события;$template_id
- ID шаблона почтового события для обычных заказов;$template_id_market
- ID шаблона почтового события для заказов с Маркета.
Далее, функция получает объект заказа и необходимые данные из него: ID пользователя и ID сайта. Затем, используя условный оператор, определяется, является ли пользователь Маркета. Если да, то происходит отправка письма на почту с использованием соответствующего шаблона (убрать комментарий если нужно получать письмо о заказе через Я.Маркет). Если нет, то отправляется стандартное письмо (ID шаблона$template_id
) на почту.
Важно отметить, что в данном примере мы отправляем письма при оформлении заказа, используя событие OnOrderNewSendEmail
. Однако, в зависимости от задачи, может потребоваться использовать другие события, например, OnSaleStatusOrder
при изменении статуса заказа.
Наконец, функция создает массив $log_arr
с данными о заказе и переданными полями, добавляет его в логи (раскомментировать если нужно) и отменяет стандартную отправку письма return false;
. для избежания продолжения выполнения события (иначе отправится стандартный шаблон).
Содержимое лог файла na_log.txt
Ниже представлен массив с логируемыми данными (у Вас будут другие значения)
array (
'site_id' => 's1', // ID Сайта
'user_order' => '28', // ID пользователя
'orderID' => 7399, // ID заказа
'eventName' => 'SALE_NEW_ORDER',
'arFields' =>
array (
'ORDER_ID' => 7399,
'ORDER_REAL_ID' => 7399,
'ORDER_ACCOUNT_NUMBER_ENCODE' => '7399',
'ORDER_DATE' => '21.03.2023 10:33:38',
'ORDER_USER' => 'Имя Фамилия',
'PRICE' => '550 ₽',
'BCC' => 'info@test_shop.com',
'EMAIL' => 'client@email.com',
'ORDER_LIST' => '"Вишня-Грейпфрут" 500 мл. - 3 шт x 65 ₽<br/>"Клубника-Лайм" 500 мл. - 2 шт x 65 ₽<br/>',
'SALE_EMAIL' => 'info@test_shop.com',
'DELIVERY_PRICE' => 0.0,
'ORDER_PUBLIC_URL' => '',
),
)
Заключение
Можно сказать, что данный пример кода представляет собой небольшую, но полезную функцию для работы с заказами в 1С Битрикс. Его использование позволяет обрабатывать заказы с Яндекс Маркета отдельно от обычных заказов и отправлять на почту соответствующие письма с учетом требуемых условий.
Чтобы избежать ошибок при написании своей функции для отправки писем, необходимо убедиться в правильности указанных параметров, а также протестировать функцию на разных вариантах заказов и пользователей.
Использование своей функции для отправки писем с учетом требуемых условий позволяет сделать работу с заказами более гибкой и эффективной.