События связанные с веб-хуком
Чтобы сработало событие для веб-хука, необходимо, чтобы веб-хук был верно настроен, совпадала контрольная строка веб-хука и конкретный веб-хук не должен быть закеширован.
[OnBeforeWebhookProcess] Событие перед обработкой любого веб-хука модуля
Событие вызывается на каждый веб-хук, который установлен в настройках модуля. Данным событием можно остановить обработку веб-хука.
- Описание события
- Пример вызова события
- Примеры использования
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
data | object | Объект веб-хука, который пришёл из МойСклад |
Возвращаемое значение
Для остановки обработки верните EventResult::ERROR. Если обработку останавливать не нужно — ничего не возвращайте.
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, []);
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnBeforeWebhookProcess',
'OnBeforeWebhookProcessHandler'
);
function OnBeforeWebhookProcessHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
// Структура $data — объект веб-хука из МойСклад
// $data = (object)[
// 'meta' => (object)[
// 'type' => 'customerorder', // string — тип сущности (customerorder, demand, paymentin и др.)
// 'href' => 'https://api.moysklad.ru/api/remap/1.2/...' // string — ссылка на сущность в API МС
// ],
// 'action' => 'CREATE', // string — действие: CREATE, UPDATE или DELETE
// 'accountId' => '...' // string — UUID аккаунта МС
// ];
$data = $eventParams['data']; //объект веб-хука, которые прилетел из МС
//Отправляем \Bitrix\Main\EventResult::ERROR только в случае, если нужно остановить дальнейшую работу веб-хука
//return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, []);
}
Фильтрация по типу сущности
Блокируем обработку веб-хуков для определённых типов сущностей — например, пропускаем всё, кроме заказов покупателей.
function OnBeforeWebhookProcessHandler(\Bitrix\Main\Event $event)
{
$data = $event->getParameters()['data'];
// Обрабатываем только заказы покупателей, остальные веб-хуки игнорируем
$allowedTypes = ['customerorder'];
if (!in_array($data->meta->type, $allowedTypes)) {
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, []);
}
}
Фильтрация по действию
Обрабатываем только создание новых сущностей, игнорируя обновления и удаления.
function OnBeforeWebhookProcessHandler(\Bitrix\Main\Event $event)
{
$data = $event->getParameters()['data'];
// Пропускаем только CREATE, блокируем UPDATE и DELETE
if ($data->action !== 'CREATE') {
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::ERROR, []);
}
}
[OnCreateWebhookOrder] Событие после создания заказа модулем из МС
Событие вызывается после того, как модуль создаст заказ в Битриксе. Используется для дополнительных действий с только что созданным заказом.
- Описание события
- Пример вызова события
- Примеры использования
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
bxOrder | \Bitrix\Sale\Order | Объект созданного заказа в БУС |
msOrder | object | Объект заказа МойСклад (customerorder) |
Возвращаемое значение
Ничего возвращать не нужно. Событие информационное.
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnCreateWebhookOrder',
'OnCreateWebhookOrderHandler'
);
function OnCreateWebhookOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
// $bxOrder — стандартный объект заказа Bitrix
// Доступные методы: $bxOrder->getId(), $bxOrder->getField('STATUS_ID'), и т.д.
$bxOrder = $eventParams['bxOrder']; //объект созданного заказа в БУС
// $msOrder — объект заказа МойСклад (сокращённый пример)
// $msOrder = (object)[
// 'id' => '00000000-0000-0000-0000-000000000000', // UUID заказа в МС
// 'name' => '00001', // номер заказа
// 'externalCode' => '123', // внешний код (обычно ID заказа БУС)
// 'moment' => '2025-01-01 12:00:00', // дата заказа
// 'sum' => 1000000, // сумма в копейках
// 'agent' => (object)[ // контрагент
// 'meta' => (object)[...]
// ],
// 'state' => (object)[ // статус
// 'name' => 'Новый'
// ],
// 'positions' => (object)[ // позиции заказа
// 'meta' => (object)[...],
// 'rows' => [...]
// ]
// ];
$msOrder = $eventParams['msOrder']; //объект заказа МС
//Ничего возвращать не нужно
}
Сохранение UUID заказа МойСклад в свойство заказа
Записываем UUID заказа из МойСклад в пользовательское свойство заказа БУС для дальнейшей связки.
function OnCreateWebhookOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$bxOrder = $eventParams['bxOrder'];
$msOrder = $eventParams['msOrder'];
$propertyCollection = $bxOrder->getPropertyCollection();
foreach ($propertyCollection as $property) {
if ($property->getField('CODE') === 'MS_ORDER_ID') {
$property->setValue($msOrder->id);
break;
}
}
$bxOrder->save();
}
Отправка уведомления о новом заказе
Отправляем уведомление в Telegram при создании заказа из МойСклад. Реализация отправки сообщения остаётся на стороне разработчика.
function OnCreateWebhookOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$bxOrder = $eventParams['bxOrder'];
$msOrder = $eventParams['msOrder'];
$message = sprintf(
"Новый заказ из МС: #%s (БУС #%d), сумма: %s руб.",
$msOrder->name,
$bxOrder->getId(),
number_format($msOrder->sum / 100, 2, '.', ' ')
);
// Отправка сообщения — реализуйте свой метод доставки
// Например: sendTelegramMessage($chatId, $message);
}
[OnUpdateWebhookOrder] Событие после обновления заказа модулем
Событие вызывается по следующим условиям:
- Веб-хук сущности customerorder
- Событие UPDATE
- Для данного заказа из МС найден соответствующий заказ в БУС
- Заказ проходит по фильтрам в настройках модуля
- Описание события
- Пример вызова события
- Примеры использования
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
bxOrder | \Bitrix\Sale\Order | Объект заказа БУС |
msOrder | object | Объект заказа МойСклад |
customerorder | \Rbs\Moysklad\Customerorder | Объект обработчика заказа модуля (содержит дополнительные методы) |
Возвращаемое значение
Ничего возвращать не нужно. Событие информационное.
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnUpdateWebhookOrder',
'OnUpdateWebhookOrderHandler'
);
function OnUpdateWebhookOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
// $bxOrder — стандартный объект заказа Bitrix
$bxOrder = $eventParams['bxOrder']; //объект заказа БУС
// $msOrder — объект заказа МойСклад (аналогичен структуре в OnCreateWebhookOrder)
$msOrder = $eventParams['msOrder']; //объект заказа МС
// $customerorder — внутренний объект модуля, доступные методы:
// $customerorder->getOrderEntity() — получить объект \Bitrix\Sale\Order
// $customerorder->getOrder() — получить объект заказа МС
// $customerorder->isLoaded() — загружен ли заказ
$customerorder = $eventParams['customerorder'];
//Ничего возвращать не нужно
}
Логирование обновлений заказа
Записываем факт обновления заказа в собственную таблицу для аудита и анализа.
function OnUpdateWebhookOrderHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$bxOrder = $eventParams['bxOrder'];
$msOrder = $eventParams['msOrder'];
// Сохраняем запись об обновлении в свою таблицу аудита
// Реализация хранения — на стороне разработчика
YourAuditLogger::log([
'event' => 'order_updated',
'bx_order_id' => $bxOrder->getId(),
'ms_order_id' => $msOrder->id,
'ms_order_name' => $msOrder->name,
'timestamp' => date('Y-m-d H:i:s'),
]);
}
[OnAfterWebhookProcess] Событие после работы любого веб-хука
Событие вызывается на каждый веб-хук, который установлен в настройках модуля. Срабатывает после завершения обработки веб-хука (независимо от результата).
- Описание события
- Пример вызова события
- Примеры использования
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
data | object | Объект веб-хука, который пришёл из МойСклад |
Возвращаемое значение
Ничего возвращать не нужно. Событие информационное.
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moysklad',
'OnAfterWebhookProcess',
'OnAfterWebhookProcessHandler'
);
function OnAfterWebhookProcessHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
// Структура $data — аналогична OnBeforeWebhookProcess
// $data = (object)[
// 'meta' => (object)[
// 'type' => 'customerorder', // string — тип сущности
// 'href' => 'https://api.moysklad.ru/api/remap/1.2/...' // string — ссылка на сущность
// ],
// 'action' => 'UPDATE', // string — действие: CREATE, UPDATE или DELETE
// 'accountId' => '...' // string — UUID аккаунта МС
// ];
$data = $eventParams['data']; //объект веб-хука, которые прилетел из МС
//Ничего возвращать не нужно
}
Логирование обработанных веб-хуков
Записываем информацию о каждом обработанном веб-хуке для мониторинга и отладки.
function OnAfterWebhookProcessHandler(\Bitrix\Main\Event $event)
{
$data = $event->getParameters()['data'];
// Сохраняем запись о веб-хуке в свою систему логирования
// Реализация хранения — на стороне разработчика
YourWebhookLogger::log([
'type' => $data->meta->type,
'action' => $data->action,
'href' => $data->meta->href,
'timestamp' => date('Y-m-d H:i:s'),
]);
}