Как получить все заказы с Ozon по API в 1С?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

Интеграция с маркетплейсом Ozon часто вызывает вопросы у разработчиков 1С из-за специфической структуры документации и разделения методов работы в зависимости от схемы логистики. В этой статье мы подробно разберем, как реализовать получение всех заказов, используя штатные средства 1С и возможности Ozon API. Мы проанализируем существующие готовые решения и изучим механику формирования прямых HTTP-запросов.

Варианты реализации: Готовое расширение vs Собственная разработка

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

  1. Использование официального расширения Synchrozon. Это бесплатное решение от команды Ozon, которое подключается как расширение (.cfe) к типовым конфигурациям (УТ 11, КА 2, ERP, УНФ). В нем уже реализованы механизмы авторизации, формирования запросов и парсинга ответов. Даже если ваша конфигурация сильно кастомизирована, вы можете изучить код этого расширения и использовать его функции как библиотеку.
  2. Прямая интеграция через HTTP-запросы. Этот путь выбирают, когда требуется максимальная производительность, специфическая логика обработки данных или работа в старых конфигурациях (например, УПП 1.3 или Бухгалтерия 2.0).

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

Разделение схем работы: FBS и FBO

Важно понимать, что в 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).

Проанализируем алгоритм работы такого цикла:

  1. Устанавливаем limit = 1000 и offset = 0.
  2. Выполняем запрос к API.
  3. Обрабатываем полученный массив заказов (помещаем в таблицу значений или сразу создаем документы в 1С).
  4. Если количество полученных заказов равно значению limit, значит, в базе есть еще данные. Увеличиваем offset на 1000 и повторяем запрос.
  5. Цикл завершается, когда API возвращает меньше записей, чем указано в limit.

Посмотрим на пример реализации цикла загрузки в 1С:


Лимит = 1000;
Смещение = 0;
ВсеДанныеПолучены = Ложь;

Пока Не ВсеДанныеПолучены Цикл
    ТелоЗапроса = СформироватьТелоЗапроса(Лимит, Смещение); // Функция формирования JSON
    Ответ = ОтправитьЗапросНаOzon(ТелоЗапроса);          // Функция выполнения HTTP-запроса
    
    СписокЗаказов = Ответ.result.postings;
    Для Каждого Заказ Из СписокЗаказов Цикл
        ОбработатьЗаказ(Заказ); 
    КонецЦикла;
    
    Если СписокЗаказов.Количество() < Лимит Тогда
        ВсеДанныеПолучены = Истина;
    Иначе
        Смещение = Смещение + Лимит;
    КонецЕсли;
КонецЦикла;

Ограничения (Throttling) и стабильность

При массовой выгрузке заказов (например, за несколько лет) легко столкнуться с ошибкой 429 (Too Many Requests). API Ozon ограничивает количество запросов в единицу времени. Чтобы избежать прерывания работы, рекомендуется:

Обновление статусов заказов

Получить заказ один раз недостаточно. Жизненный цикл заказа на Ozon постоянно меняется: awaiting_packaging (ожидает упаковки), delivering (доставляется), delivered (доставлен) или cancelled (отменен). Чтобы данные в 1С были актуальными, процедуру синхронизации заказов необходимо запускать регламентным заданием.

Для этого в 1С удобно использовать реквизит ИдентификаторЗаказаOzon (поле posting_number в API). При загрузке мы сначала ищем в базе документ с таким идентификатором: если он найден — обновляем его статус, если нет — создаем новый «Заказ клиента».

Таким образом, комбинируя методы для FBS/FBO, используя правильную авторизацию и реализуя цикл пагинации, мы можем построить надежную систему обмена данными с Ozon, которая обеспечит полную прозрачность продаж в вашей базе 1С.

← На главную