Как отследить смену статуса заказа в Bitrix и отправить email
При корректной настройке система автоматически обрабатывает изменение статуса заказа и связанные почтовые события. Рассмотрим способ отслеживания таких изменений с помощью обработчика OnOrderSave.
Код обработчика события OnOrderSave
Любое изменение заказа активирует этот обработчик:
use Bitrix\Main\Mail\Event; // Обязательно подключите класс Event
AddEventHandler("sale", "OnOrderSave", "OrderMySave");
function OrderMySave($orderID, $fields, $orderFields) {
if ($fields['STATUS_ID'] == 'F') { // Проверяем статус "Выполнен" (код F)
$email = $orderFields['USER_EMAIL'];
Event::sendImmediate([
"EVENT_NAME" => "SEND_RATING",
"LID" => "s1",
"C_FIELDS" => [
"EMAIL" => $email,
"ORDER_ID" => $orderID
],
]);
}
}Как это работает?
-
Обработчик вешается на событие сохранения заказа (
OnOrderSave). -
Проверяется статус заказа (
STATUS_ID = 'F'— "Выполнен"). -
Если статус подходит, система отправляет email через почтовое событие
SEND_RATING.
Дополнительные настройки
-
Для отладки можно использовать
AddMessage2Log, предварительно добавив вdbconn.php:define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"] . "/.log.txt");
-
Event::sendImmediateгарантирует мгновенную отправку письма. -
SEND_RATING— название почтового события (настраивается в административной части Bitrix).
Когда это полезно?
-
Автоматическая отправка опроса после выполнения заказа.
-
Уведомление клиента о завершении заказа.
-
Логирование изменений статусов заказов.
Этот метод подходит для большинства интернет-магазинов на Bitrix и легко адаптируется под другие статусы.