Интеграция с маркетплейсом Ozon часто вызывает вопросы у разработчиков 1С из-за специфической структуры документации и разделения методов работы в зависимости от схемы логистики. В этой статье мы подробно разберем, как реализовать получение всех заказов, используя штатные средства 1С и возможности Ozon API. Мы проанализируем существующие готовые решения и изучим механику формирования прямых HTTP-запросов.
Прежде чем приступать к написанию кода с нуля, рассмотрим наиболее рациональные пути решения задачи. Существует два основных подхода:
.cfe) к типовым конфигурациям (УТ 11, КА 2, ERP, УНФ). В нем уже реализованы механизмы авторизации, формирования запросов и парсинга ответов. Даже если ваша конфигурация сильно кастомизирована, вы можете изучить код этого расширения и использовать его функции как библиотеку.Разберем подробнее техническую сторону прямой интеграции, так как именно она вызывает наибольшее количество вопросов у программистов.
Важно понимать, что в API Ozon не существует единого метода для получения «вообще всех» заказов. Данные разделены по схемам работы склада, и для каждой схемы используется свой эндпоинт. Проанализируем их различия:
Схема FBS (Fulfillment by Seller): Когда заказы хранятся и упаковываются на вашем складе. Для получения списка отправлений используется метод /v3/posting/fbs/list. В версии v3 API предоставляет более гибкие фильтры по статусам и времени.
Схема FBO (Fulfillment by Ozon): Когда товары находятся на складе маркетплейса. Здесь применяется метод /v2/posting/fbo/list. Структура ответа (JSON) в этой схеме отличается от FBS, поэтому нам потребуется реализовать отдельные алгоритмы парсинга для каждой схемы.
Для взаимодействия с API нам необходимо настроить объект HTTPСоединение. Каждый запрос должен содержать обязательные заголовки авторизации, которые можно получить в личном кабинете продавца в разделе «Настройки API».
Рассмотрим пример формирования заголовков в 1С:
Заголовки = Новый Соответствие;
Заголовки.Вставить("Client-Id", ИдентификаторКлиента); // Ваш Client-ID
Заголовки.Вставить("Api-Key", КлючAPI); // Ваш API Key
Заголовки.Вставить("Content-Type", "application/json");
Обратите внимание, что без этих заголовков сервер Ozon вернет ошибку 401 (Unauthorized).
Чтобы получить заказы за определенный период, в теле POST-запроса необходимо передать структуру filter. Выясним причину частой ошибки: Ozon ожидает время в формате UTC (ISO 8601). Если передать локальное время без смещения часового пояса, часть заказов за последние несколько часов может просто не попасть в выборку.
Пример структуры тела запроса для FBS:
ПараметрыЗапроса = Новый Структура;
Фильтр = Новый Структура;
Фильтр.Вставить("since", "2023-10-01T00:00:00Z");
Фильтр.Вставить("to", "2023-10-31T23:59:59Z");
Фильтр.Вставить("status", ""); // Если нужно получить все статусы
ПараметрыЗапроса.Вставить("filter", Фильтр);
ПараметрыЗапроса.Вставить("limit", 1000);
ПараметрыЗапроса.Вставить("offset", 0);
Вы не сможете получить 10 000 заказов одним запросом. API Ozon имеет ограничение на количество возвращаемых записей в одном ответе — максимум 1000 (параметр limit). Для получения всей истории необходимо реализовать цикл с использованием смещения (offset).
Проанализируем алгоритм работы такого цикла:
limit = 1000 и offset = 0.limit, значит, в базе есть еще данные. Увеличиваем offset на 1000 и повторяем запрос.limit.Посмотрим на пример реализации цикла загрузки в 1С:
Лимит = 1000;
Смещение = 0;
ВсеДанныеПолучены = Ложь;
Пока Не ВсеДанныеПолучены Цикл
ТелоЗапроса = СформироватьТелоЗапроса(Лимит, Смещение); // Функция формирования JSON
Ответ = ОтправитьЗапросНаOzon(ТелоЗапроса); // Функция выполнения HTTP-запроса
СписокЗаказов = Ответ.result.postings;
Для Каждого Заказ Из СписокЗаказов Цикл
ОбработатьЗаказ(Заказ);
КонецЦикла;
Если СписокЗаказов.Количество() < Лимит Тогда
ВсеДанныеПолучены = Истина;
Иначе
Смещение = Смещение + Лимит;
КонецЕсли;
КонецЦикла;
При массовой выгрузке заказов (например, за несколько лет) легко столкнуться с ошибкой 429 (Too Many Requests). API Ozon ограничивает количество запросов в единицу времени. Чтобы избежать прерывания работы, рекомендуется:
Приостановить(1)).Попытка...Исключение для обработки временных сбоев сети.Получить заказ один раз недостаточно. Жизненный цикл заказа на Ozon постоянно меняется: awaiting_packaging (ожидает упаковки), delivering (доставляется), delivered (доставлен) или cancelled (отменен). Чтобы данные в 1С были актуальными, процедуру синхронизации заказов необходимо запускать регламентным заданием.
Для этого в 1С удобно использовать реквизит ИдентификаторЗаказаOzon (поле posting_number в API). При загрузке мы сначала ищем в базе документ с таким идентификатором: если он найден — обновляем его статус, если нет — создаем новый «Заказ клиента».
Таким образом, комбинируя методы для FBS/FBO, используя правильную авторизацию и реализуя цикл пагинации, мы можем построить надежную систему обмена данными с Ozon, которая обеспечит полную прозрачность продаж в вашей базе 1С.