Готовые решения для 1С-Битрикс
Карточка решения
База знаний по решению:
Интеграция с Ozon

Все часто задаваемые вопросы по решению: Интеграция с Ozon

Типовые ситуации

Работа с крупногабаритными товарами

В данном разделе будет собрана информация по работе с крупногабаритными товарами.


1. Я продаю и крупногабаритные и некрупногабаритные товары, как в этом случае работать с решением?

Ниже я опишу типовую схему работы, которую обычно используют в этих случаях. Основное правило от которого мы отталкиваемся - часть складов принимают крупногабаритный товар, а часть не принимают. Соотвественно Ozon не даст загрузить товарный остаток крупногабаритного товара на склад, который не принимает крупногабаритные товары.

Как обычно решают эту проблему:

1. Со стороны Ozon создаётся два склада, один для отгрузки обычных товаров, другой для отгрузки крупногабаритных товаров.


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

2024-04-16_08-50-19.jpg

Не забываем, что для каждого из складов нужно выбрать источник остатков на вкладке каталог

2024-04-16_08-52-33.jpg


3. Крупногабаритных товаров указываем системное свойство решения "Крупногабаритный товар Ozon (системное)" = "Да"

2024-04-16_08-53-46.jpg

4. Готово.

При таких настройках, на первый склад будут выгружаться остатки только некрупногабаритных товаров, а на второй только остатки крупногабаритных товаров (у которых установлено "Крупногабаритный товар Ozon (системное)" = "Да")




Интеграция сайта с несколькими лк

Решение поддерживает интеграцию одного сайта с несколькими личными кабинетами Ozon (количество подключаемых лк не ограничено).

По умолчанию для каждого активного сайта заведенного в админке отображается свой слот интеграции.

Соответственно если у вас создано 2 записи сайтов в битриксе:

список сайтов

То решение будет показывать 2 слота для интеграции с двумя различными кабинетами:

oz-site.jpg


Как добавить еще слоты для интеграции?


Для добавления дополнительных слотов интеграции - нужно добавить дополнительные записи сайтов в битрикс. Заполнять и настраивать их ненужно, нужна только строка сайта.

Добавить и посмотреть записи сайтов можно перейдя в Админку -> Настройки -> Настройки продукта -> Сайты -> Список сайтов

список сайтов

Для добавления сайта нажимаем добавить сайт.

В форме добавления заполняем следующие поля:
  1. ID (например o2)
  2. Название (например служебный сайт oz2)
  3. Папка сайта (например /o2 проще всего делать папку сайта похожую на ID)
  4. Сортировка (например 500)
  5. Создать почтовые шаблоны - выбираем не создавать.
  6. Шаблон сайта - выбрать шаблон и выбираем в первой строке любой шаблон
oz-site.jpg

создание сайта 2

Остальные настройки можно не менять.

Нажимаем сохранить. Если всё заполнено корректно - создание пройдет успешно и отобразится еще один слот.



Добавление кнопки Купить на Ozon

Добавить кнопку купить на Ozon можно разместив компонент решения в нужном месте сайта (например в шаблоне карточки товара).

Код вставки компонента и описание параметров:
<?$APPLICATION->IncludeComponent( "arturgolubev:ozon.link", "", Array( "CACHE_TIME" => "360000", "CACHE_TYPE" => "A", "ELEMENT_ID" => $elementID, // айди товара или торгового предложения "OZON_ACCOUNT" => "s1", // аккаунт ozon "TEXT_BEFORE_BTN" => "Купить на ", // текст перед кнокой "TEXT_BTN" => "Ozon" // текст на кнопке ), $component );?>

Так же можно разместить компонент на тестовой странице, настроить параметры компонента через интерфейс параметров компонентов и переместить в конечное место размещения.

Особое внимание уделите переменной $elementID - вместо неё нужно указать переменную в которой хранится айди товара или торгового предложения для которого формируется ссылка

Компонент проверяет заполнен ли у товара связывающий артикул, запрашивает через API ссылку на карточку и выводит кнопку только если найдена реальная связь.

Маркировка товаров

Решение поддерживает передачу маркировки товаров с сайта в Ozon.

Маркировка по товарам должна быть отправлена, когда заказ находится в статусе "Ожидает упаковки (awaiting_packaging)"

Передать маркировку можно двумя способами - вручную из конкретного заказа и автоматически по триггеру смены статуса.

Передача вручную для конкретного заказа


Для передачи маркировки вручную нужно открыть заказ в админке, перейти на вкладку Ozon. В доступных действиях выбрать "Отправить коды маркировки".

sc1.png

После этого откроется окно передачи маркировки. Вводим в него код маркировки и нажимаем отправить.

sc2.png

После отправки вы увидите сообщение о том что маркировка успешно отправлена. После отправки маркировка будет сохранена в служебное поле конкретной позиции заказа.

Передача автоматически по триггеру


Для автоматической передачи маркировки мы сначала должны выбрать статус, при установке которого будет отправляться маркировка. Это можно сделать в настройках решения, на вкладке Автоматизация FBS, настройка "Отправить доп. информацию при установке статуса".

wb-mark3.png

Теперь при установке указанного статуса в заказе, решение будет проверять наличие маркировки в полях и если маркировка есть - отправлять её в Ozon.

Указать маркировку для передачи можно в одном из двух мест:

а) В свойстве конкретной позиции корзины "Ozon loaded mark" (открываем заказ на изменение, открываем позицию заказа требующую маркировки на изменение и там будет такое свойство)


sc3.png


б) В стандартном интерфейсе указания маркировки битрикса, в отгрузке (это стандартное поле, что бы оно отображалось должна быть настроена работа с маркировкой в битриксе)

wb-mark5.png






Типовые ошибки и методы их решения

В данной заметке будут отписаны ошибки которые вы можете увидеть в логе и необходимая реакция на их:

Остатки

  1. "Ошибка обновления остатков 6204 - Product not found" - решение сделало запрос на установку остатков к озон - у товара с артикулом 6204 установить остаток X. Озон ответил что у него нет товара с артикулом 6204


Цены

  1. "Ошибка обновления цен 6204 - product not found" - решение сделало запрос на установку цен к озон - у товара с артикулом 6204 установить цену X. Озон ответил что у него нет товара с артикулом 6204

События

Модификация рассчёта остатков

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения

Для изменения рассчитанных решением остатков вы можете использовать событие решения onAfterCalculateStocks.

AddEventHandler("arturgolubev.ozon", "onAfterCalculateStocks", "onAfterCalculateStocks", 10); function onAfterCalculateStocks($sid, &$stocks){ // $sid - идентификатор сайта // $stocks - массив актуальных рассчитанных данных }
  • Добавлять значения в массив крайне не рекомендуется.
  • Учитывать режим изменений и итерации выгрузки не нужно - решение сделает это самостоятельно.
  • Ключи массива $stocks в будущем могут измениться (если этого будет требовать дальнейшее улучшение функционала или смена api ozon).
  • Не создавайте "тяжелых" обработчиков - если у вас тяжелая логика лучше её реализовать на событии изменения элемента, записать результат в свойство, свойство выбрать источником (это будет гораздо производительнее).


Модификация рассчёта цен

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения

Для изменения рассчитанных решением цен вы можете использовать событие решения onAfterCalculatePrices.

AddEventHandler("arturgolubev.ozon", "onAfterCalculatePrices", "onAfterCalculatePrices", 10); function onAfterCalculateStocks($sid, &$prices){ // $sid - идентификатор сайта // $prices - массив актуальных рассчитанных данных }
  • Добавлять значения в массив крайне не рекомендуется.
  • Учитывать режим изменений и итерации выгрузки не нужно - решение сделает это самостоятельно.
  • Ключи массива $prices в будущем могут измениться (если этого будет требовать дальнейшее улучшение функционала или смена api ozon).
  • Не создавайте "тяжелых" обработчиков - если у вас тяжелая логика лучше её реализовать на событии изменения элемента, записать результат в свойство, свойство выбрать источником (это будет гораздо производительнее).


Модификация заказов с Ozon

Внимание:
События это заложенная разработчиком возможность вносить изменения в логику решения без кастомизации (с сохранением обновлений)

Для работы с событиями необходимы базовые навыки программирования. События позволяют сделать подстройку решения под индивидуальные требования сайта, поэтому их реализация не входит в стандартную техническую поддержку решения

Для модификации заказов созданных на основе данных с Ozon вы можете использовать стандартное событие OnSaleOrderBeforeSaved


Пример использования события (в заказах созданных решением проверяем наличие заполненного email'а и если он не заполнен подставляем дефолтный):
<? \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'sale', 'OnSaleOrderBeforeSaved', 'onSaleOrderModifyOzonData' ); function onSaleOrderModifyOzonData(\Bitrix\Main\Event $event){ $order = $event->getParameter("ENTITY"); if($order) { $propertyCollection = $order->getPropertyCollection(); $propsData = array(); foreach ($propertyCollection as $propertyItem) { if (!empty($propertyItem->getField("CODE"))) { $propsData[$propertyItem->getField("CODE")] = trim($propertyItem->getValue()); } } if($propsData["AOZ_POSTING_NUMBER"]){ foreach ($propertyCollection as $propertyItem) { switch ($propertyItem->getField("CODE")) { case 'EMAIL': if(!$propsData["EMAIL"]){ $propertyItem->setField("VALUE", "no-reply@ozon.ru"); } break; } } } } } ?>