События обработки заказов
Изменить процесс сохранения заказа Авито можно с помощью событий до (onBeforeOrderSave) и после (onAfterOrderSave). Также объявления, добавленные вручную, можно сопоставить с элементами инфоблока автоматически (onOrderUnknownItems).
Номер заказа Авито в номере заказа 1С-Битрикс
Если необходимо использовать номер заказа Авито в номере заказа 1С-Битрикс, предлагаем сохранить номер на событии onBeforeOrderSave и переопределить на событии onBeforeOrderAccountNumberSet модуля Интернет-магазин.
Пример на
[spoiler]
Дублирование информации в комментарий
Пользователи сталкиваются с проблемой, что при синхронии с RetailCRM, не передается трек-номер и название службы доставки. В качестве решения предлагаем дублировать информацию в комментарий заказа на событии onBeforeOrderSave.
<?php use Bitrix\Main; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('avito.export', 'onBeforeOrderSave', function(Main\Event $event) { /** @var \Avito\Export\Api\OrderManagement\Model\Order $avitoOrder */ /** @var \Bitrix\Sale\OrderBase $saleOrder */ $avitoOrder = $event->getParameter('AVITO_ORDER'); $saleOrder = $event->getParameter('ORDER'); $current = trim($saleOrder->getField('USER_DESCRIPTION')); $additional = implode(PHP_EOL, [ $avitoOrder->delivery()->serviceName(), $avitoOrder->delivery()->trackingNumber(), ]); $new = ($current !== '' ? $current . PHP_EOL . '------' . PHP_EOL : '') . $additional; $saleOrder->setField('USER_DESCRIPTION', $new); }); |
Поиск товаров заказа
Если модулю не удалось найти товары заказа в инфоблоке, вы можете выполнить поиск самостоятельно на событии onOrderUnknownItems. Например, при добавлении объявления в названии указывайте идентификатор товара после символа # - Футболка Мужской Огонь #21.
<?php use Bitrix\Main; use Avito\Export\Api; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('avito.export', 'onOrderUnknownItems', function(Main\Event $event) { /** @var Api\OrderManagement\Model\Order\Item[] $items */ $items = $event->getParameter('ITEMS'); $newMapping = []; foreach ($items as $key => $item) { if (preg_match('/#([a-z0-9]+)\s*$/i', $item->title(), $matches)) { $newMapping[$key] = $matches[1]; } } return new Main\EventResult(Main\EventResult::SUCCESS, $newMapping); }); |
События файлов объявлений
В файлах объявлений доступны события для форматирования значений onFeedOfferExtend и изменения тегов onFeedOfferWrite.
Форматирование значений
Для создания объявления значения должны быть отформатированы в соответствие с
Например, для автомобильных шин в 1С-Битрикс вводите бренд производителя Nordman, но на Авито требуется — Nokian Tyres.
<?php use Bitrix\Main; use Avito\Export\Feed; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('avito.export', 'onFeedOfferExtend', function(Main\Event $event) { /** @var Feed\Engine\Data\TagValues[] $groupValues */ $groupValues = $event->getParameter('VALUES'); foreach ($groupValues as $tagValues) { if ($tagValues->get('Brand') === 'Nordman') { $tagValues->set('Brand', 'Nokian Tyres'); } } }); |
Изменение тега
Если необходимо изменить содержимое тега, используйте событие onFeedOfferWrite. Например, поменять домен для изображений:
<?php use Bitrix\Main; use Avito\Export\Feed; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler('avito.export', 'onFeedOfferWrite', function(Main\Event $event) { /** @var Feed\Engine\Data\TagCompiled[] $groupTags */ $groupTags = $event->getParameter('TAGS'); foreach ($groupTags as $tag) { $images = $tag->getChild('Images'); if ($images !== null) { foreach ($images->getChildren() as $image) { $url = $image->getAttribute('url'); $url = str_replace('olddomain.ru', 'newdomain.ru', $url); $image->setAttribute('url', $url); } } } }); |