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

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

В 1С-Битрикс очень часто требуется выполнить дополнительную логику после создания заказа.

Например:

  • отправка данных во внешнюю систему;
  • уведомления;
  • интеграция с CRM;
  • изменение свойств заказа;
  • логирование;
  • автоматическая обработка заказов.

Для этого удобно использовать событие:

OnOrderSave

Пример обработчика события

<?
AddEventHandler(
    "sale",
    "OnOrderSave",
    "OrderMySave"
);

function OrderMySave(
    $orderID,
    $fields,
    &$orderFields,
    $isNew
){
    if ($isNew) {

        // Полезный код

    }
}
?>

Что делает OnOrderSave

Событие:

OnOrderSave

вызывается:

  • при создании заказа;
  • при обновлении заказа.

В своих проектах я использую серверную инфраструктуру Timeweb Cloud

VPS и облачные решения для стабильной работы сайтов на PHP и 1С-Битрикс — от корпоративных сайтов до интернет-магазинов и высоконагруженных веб-проектов.

Перейти на Timeweb Cloud
Реклама · ERID: CQH36pWzJqVJ4YD9t5y227AkMQdhpG2THarwRmX2g9tS8x

Проверка нового заказа

Чтобы выполнять код только при создании заказа, используется:

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)

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

121 просмотров

Если возникли сложности

Помогу разобраться с настройкой, исправить ошибки и реализовать решение под ваш проект.

Поддержка сайтов на 1С-Битрикс

Поддержка сайтов на 1С-Битрикс: быстрое решение ошибок, консультации, обучение сотрудников и сопровождение сайта. 
Резервирую время под ваш проект для оперативной помощи и стабильной работы сайта.
Подробнее
Где заказы?

Почему один сайт стабильно приносит заявки, а другой годами просто «висит в интернете»?

В телеграм-канале «Где заказы?» я разбираю реальные ошибки бизнеса, SEO, сайты, рекламу, воронки продаж и показываю, почему компании теряют клиентов и как это исправить.

Без инфоцыганства и мотивационных цитат — только практика, кейсы и рабочие решения для бизнеса и веб-разработки.

Комментарии

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