Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Битрикс Битрикс
26.04.2022

Битрикс. Событие создание нового заказа.

В 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)

помогает запускать обработчик только для новых заказов.

15 просмотров

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться