Событие срабатывания веб-хука
[OnWebhookUpdate] Событие после обработки элемента веб-хуком
Событие OnWebhookUpdate вызывается после того, как модуль обработал элемент по веб-хуку CREATE или UPDATE для товара, модификации, комплекта, услуги или группы товаров. Условия вызова:
- Веб-хук не повтор: то же событие не приходило в пределах времени дедупликации (
cache_webhook_time). - Элемент, который изменяется по веб-хуку, найден или создан в Битрикс. Если модуль элемент не загрузил, вместо этого события вызывается
OnWebhookSkipped.
Событие не вызывается:
- для действия
DELETE— см.OnBeforeDeleteItem— и для скидокspecialpricediscount; - для групп товаров, если их импорт выключен, и для модификаций, если они загружаются агентом (опция
variant_load_agent); - если
hrefне прошёл проверку на принадлежность API МойСклад или действие не изCREATE,UPDATE,DELETE; - если сущность объявлена в реестре
OnBuildWebhookEntityListв режимеreplaceили обработчик в режимеbeforeотменил обработку.
Обработчик реестра в режиме after вызывается строго после этого события.
Исключения не перехватываются
Исключение из обработчика модуль не ловит: оно обрывает обработку остальных событий этого веб-хука. Оборачивайте свой код в try/catch.
- Описание события
- Пример вызова события
- Примеры использования
Параметры события
| Параметр | Тип | Описание |
|---|---|---|
bx_element | array | Для товаров, модификаций, комплектов и услуг — строка товара торгового каталога (\Bitrix\Catalog\ProductTable, все поля) с добавленными полями элемента инфоблока XML_ID, IBLOCK_ID, NAME, ACTIVE. Для групп — строка раздела инфоблока (\Bitrix\Iblock\SectionTable) |
ms_element | object | Сущность из МойСклад (объект, доступ к полям через свойства) |
Возвращаемое значение
Ничего возвращать не нужно. Событие информационное — используется для реактивной логики после обработки веб-хука.
//Пример кода нужно вставить в файл init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'rbs.moyskladstocks',
'OnWebhookUpdate',
'OnWebhookUpdateHandler'
);
function OnWebhookUpdateHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
// $bxElement — для товара, модификации, комплекта и услуги это строка
// \Bitrix\Catalog\ProductTable (все поля товара каталога) плюс поля элемента:
// [
// 'ID' => 1234, // ID элемента инфоблока
// 'QUANTITY' => 10,
// 'TYPE' => 1,
// 'WEIGHT' => 500,
// // ... другие поля ProductTable
// 'XML_ID' => 'abc123externalcode',
// 'IBLOCK_ID' => 5,
// 'NAME' => 'Название товара',
// 'ACTIVE' => 'Y',
// ]
// CODE, PREVIEW_TEXT, IBLOCK_SECTION_ID и прочих полей элемента здесь нет —
// берите их сами по $bxElement['ID'].
// Для группы товаров — строка раздела \Bitrix\Iblock\SectionTable.
$bxElement = $eventParams['bx_element'];
// $msElement — сущность из МойСклад, доступ к полям через свойства объекта:
// $msElement->name // 'Название товара'
// $msElement->externalCode // 'abc123externalcode'
// $msElement->archived // false
// $msElement->description // 'Описание из МС'
// $msElement->weight // 0.5
// $msElement->volume // 0.001
// $msElement->article // 'ART-001'
// $msElement->variantsCount // 3 (только для product)
// $msElement->meta->href // 'https://api.moysklad.ru/api/remap/1.2/entity/product/...'
// $msElement->meta->type // 'product' | 'variant' | 'bundle' | 'service' | 'productfolder'
// ... другие поля из API МойСклад
$msElement = $eventParams['ms_element'];
#WORK_AREA#
}
Логирование обновлений товаров
Записываем факт обновления товара веб-хуком в собственную таблицу для аудита и анализа.
function OnWebhookUpdateHandler(\Bitrix\Main\Event $event)
{
$eventParams = $event->getParameters();
$bxElement = $eventParams['bx_element'];
$msElement = $eventParams['ms_element'];
// Сохраняем запись об обновлении в свою таблицу аудита
// Реализация хранения — на стороне разработчика
YourAuditLogger::log([
'event' => 'webhook_update',
'bx_element_id' => $bxElement['ID'],
'ms_type' => $msElement->meta->type,
'ms_name' => $msElement->name,
'timestamp' => date('Y-m-d H:i:s'),
]);
}