Битрикс. Событие создание нового заказа.
В 1С-Битрикс очень часто требуется выполнить дополнительную логику после создания заказа.
Например:
- отправка данных во внешнюю систему;
- уведомления;
- интеграция с CRM;
- изменение свойств заказа;
- логирование;
- автоматическая обработка заказов.
Для этого удобно использовать событие:
OnOrderSave
Пример обработчика события
<?
AddEventHandler(
"sale",
"OnOrderSave",
"OrderMySave"
);
function OrderMySave(
$orderID,
$fields,
&$orderFields,
$isNew
){
if ($isNew) {
// Полезный код
}
}
?>
Что делает OnOrderSave
Событие:
OnOrderSave
вызывается:
- при создании заказа;
- при обновлении заказа.
Проверка нового заказа
Чтобы выполнять код только при создании заказа, используется:
if ($isNew)
Если:
$isNew == true
значит заказ создан впервые.
Параметры обработчика
$orderID
ID заказа.
$fields
Массив полей заказа.
$orderFields
Дополнительные поля заказа, передаются по ссылке.
$isNew
Флаг нового заказа.
Пример получения заказа
<?
AddEventHandler(
"sale",
"OnOrderSave",
"OrderMySave"
);
function OrderMySave(
$orderID,
$fields,
&$orderFields,
$isNew
){
if ($isNew)
{
$order = CSaleOrder::GetByID($orderID);
echo '<pre>';
print_r($order);
echo '</pre>';
}
}
?>
Где размещать обработчик
Обычно обработчик размещают:
/bitrix/php_interface/init.php
или:
/local/php_interface/init.php
Что можно делать в обработчике
- изменять свойства заказа;
- отправлять webhook;
- создавать задачи;
- работать с CRM;
- уведомлять менеджеров;
- записывать данные в лог;
- создавать документы.
Пример записи в лог
<?
file_put_contents(
$_SERVER["DOCUMENT_ROOT"] . "/order.log",
"Создан заказ: " . $orderID . PHP_EOL,
FILE_APPEND
);
?>
Важно про производительность
Не рекомендуется:
- выполнять тяжелые запросы;
- долго обрабатывать API;
- делать медленные интеграции.
Иначе оформление заказа может замедлиться.
Современный D7 аналог
В новых проектах лучше использовать D7-события:
\Bitrix\Main\EventManager
и объект:
\Bitrix\Sale\Order
Пример D7
<?
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'sale',
'OnSaleOrderSaved',
'myOrderHandler'
);
?>
Когда использовать старый обработчик
- старые проекты;
- старый API sale;
- быстрые доработки;
- совместимость со старыми модулями.
Итог
Событие:
OnOrderSave
позволяет выполнять собственный код после создания или изменения заказа в 1С-Битрикс.
А проверка:
if ($isNew)
помогает запускать обработчик только для новых заказов.
Комментарии