Как загрузить заказы из Ozon в 1С через Seller API: адреса, авторизация и работа со статусами

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

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

Адрес сервиса и особенности авторизации в Ozon Seller API

Для начала разберем техническую основу взаимодействия. Все запросы к программному интерфейсу Ozon Seller API отправляются на единый базовый URL. Мы должны адресовать наши HTTP-запросы на хост:

https://api-seller.ozon.ru

В отличие от классических веб-сервисов, использующих авторизацию по логину и паролю или сложные протоколы OAuth, Ozon применяет упрощенную схему на основе заголовков (Headers) HTTP-запроса. Для успешной авторизации нам необходимо передавать в каждом запросе два ключевых параметра:

  1. Client-Id — уникальный цифровой идентификатор вашего личного кабинета (магазина).
  2. Api-Key — специальный токен доступа (ключ API), который генерируется в личном кабинете продавца в разделе «Настройки» -> «API ключи».

Важное предупреждение для разработчиков 1С: Начиная с февраля 2026 года, Ozon ввел ограничение на срок действия новых API-ключей. Теперь вновь создаваемые ключи активны только 180 дней (6 месяцев). Бессрочные ключи постепенно выводятся из эксплуатации. Это означает, что при проектировании архитектуры обмена в 1С мы должны предусмотреть механизм хранения настроек, позволяющий пользователю легко обновлять API-ключ без вмешательства в код программы, либо выводить предупреждение о скором истечении срока действия токена.

Разбираемся со статусами: существует ли «неоплаченный заказ» на Ozon?

Часто от бизнес-аналитиков или заказчиков поступает задача: «Нужно загружать в 1С только неоплаченные заказы для анализа спроса или резервирования». Здесь мы сталкиваемся с особенностью бизнес-логики маркетплейса.

Для обычных покупателей (физических лиц) на Ozon практически не существует понятия «неоплаченный заказ» в общем списке отправлений, готовых к сборке. Покупатель либо оплачивает товар в момент оформления, либо (в редких случаях для определенных категорий) выбирает оплату при получении. Рассмотрим основные статусы, с которыми нам придется работать:

Однако для работы с юридическими лицами (B2B-продажи) ситуация иная. Организации могут оплачивать счета по безналичному расчету в течение нескольких дней. Чтобы продавец видел зарезервированные товары и не распродал их случайно другим клиентам, Ozon предоставляет специализированный метод API:

POST /v1/posting/unpaid-legal/product/list

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

Актуальные методы API для работы с заказами (v3 и v4)

Интеграция через старые версии API (v1 и v2) на текущий момент не актуальна и не поддерживается маркетплейсом. Разберем современные методы v3 и v4, которые необходимо использовать в коде 1С:

  1. POST /v3/posting/fbs/list (а также версия /v4/posting/fbs/list) — основной рабочий метод для получения списка отправлений по схеме FBS. Позволяет гибко фильтровать заказы по временным периодам, статусам сборки и складам.
  2. POST /v3/posting/fbs/unfulfilled/list — облегченный метод, возвращающий список только тех отправлений, которые требуют сборки (новые заказы). Отлично подходит для регламентных заданий в 1С, работающих по расписанию.
  3. POST /v3/posting/fbs/get — детальный запрос по конкретному отправлению. С его помощью мы получаем подробный состав заказа, информацию о покупателе, весогабаритные характеристики и требования к маркировке.

Реализация HTTP-запроса к Ozon API в среде 1С

Рассмотрим практический пример реализации обмена на языке 1С:Предприятие 8. Напишем процедуру, которая подключается к API Ozon, передает параметры авторизации в заголовках и получает список отправлений, ожидающих сборки.


Процедура ПолучитьЗаказыИзOzon(ИдентификаторКлиента, КлючAPI) Экспорт

    // Шаг 1. Определяем адрес сервера и ресурс
    АдресСервера = "api-seller.ozon.ru";
    РесурсURL    = "/v3/posting/fbs/list";
    
    // Шаг 2. Задаем параметры SSL-соединения
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
    
    Попытка
        HTTPСоединение = Новый HTTPСоединение(АдресСервера, 443,,,,, ЗащищенноеСоединение);
    Исключение
        ЗаписьЖурналаРегистрации("Интеграция Ozon", УровеньЖурналаРегистрации.Ошибка,,, 
            "Ошибка создания HTTP-соединения: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    // Шаг 3. Формируем заголовки запроса согласно требованиям Ozon API
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Client-Id", СокрЛП(ИдентификаторКлиента));
    Заголовки.Вставить("Api-Key", СокрЛП(КлючAPI));
    Заголовки.Вставить("Content-Type", "application/json");
    
    // Шаг 4. Настраиваем фильтр запроса в формате JSON
    // Нам нужны заказы в статусе "ожидает упаковки" за последние 3 дня
    ДатаНачала = ТекущаяДата() - 3 * 86400;
    СтрокаДатаНачала = Формат(ДатаНачала, "ДФ=yyyy-MM-ddТHH:mm:ss.fffZ");
    СтрокаДатаОкончания = Формат(ТекущаяДата(), "ДФ=yyyy-MM-ddТHH:mm:ss.fffZ");
    
    СтруктураФильтра = Новый Структура;
    СтруктураФильтра.Вставить("since", СтрокаДатаНачала);
    СтруктураФильтра.Вставить("to", СтрокаДатаОкончания);
    СтруктураФильтра.Вставить("status", "awaiting_packaging"); // интересует статус ожидания сборки
    
    ПараметрыЗапроса = Новый Структура;
    ПараметрыЗапроса.Вставить("filter", СтруктураФильтра);
    ПараметрыЗапроса.Вставить("limit", 50);
    ПараметрыЗапроса.Вставить("with", Новый Структура("analytics_data", Истина));
    
    // Преобразуем структуру параметров в строку JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
    ТелоЗапроса = ЗаписьJSON.Закрыть();
    
    // Шаг 5. Отправка HTTP-запроса POST
    HTTPЗапрос = Новый HTTPЗапрос(РесурсURL, Заголовки);
    HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
    
    Попытка
        HTTPОтвет = HTTPСоединение.ОтправитьДляОбъекта(HTTPЗапрос);
    Исключение
        ЗаписьЖурналаРегистрации("Интеграция Ozon", УровеньЖурналаРегистрации.Ошибка,,, 
            "Ошибка отправки запроса: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    // Шаг 6. Анализируем ответ сервера
    КодСостояния = HTTPОтвет.КодСостояния;
    СтрокаОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    
    Если КодСостояния = 200 Тогда
        ОбработатьРезультатЗапроса(СтрокаОтвета);
    Иначе
        ЗаписьЖурналаРегистрации("Интеграция Ozon", УровеньЖурналаРегистрации.Предупреждение,,, 
            СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                "Сервер Ozon вернул ошибку %1. Текст ответа: %2", КодСостояния, СтрокаОтвета));
    КонецЕсли;

КонецПроцедуры

Проанализируем этот код по шагам. Во-первых, обратите внимание на обязательное использование ЗащищенноеСоединениеOpenSSL, поскольку Ozon работает исключительно по защищенному протоколу HTTPS. Во-вторых, даты в параметрах since и to должны передаваться строго в формате ISO 8601 (например, 2026-03-28T12:00:00.000Z). Для преобразования дат в этот формат мы использовали стандартное форматирование 1С.

Обработка полученных данных о заказах

После успешного выполнения запроса Ozon вернет нам JSON-структуру, содержащую массив отправлений (postings). Разберем пример того, как прочитать этот ответ в 1С и извлечь информацию по каждому заказу:


Процедура ОбработатьРезультатЗапроса(Знач СтрокаJSON)

    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
    
    Данные = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Ozon возвращает структуру, где основной массив находится в свойстве "result"
    Если НЕ Данные.Свойство("result") Тогда
        Возврат;
    КонецЕсли;
    
    Отправления = Данные.result.postings;
    
    Для Каждого Отправление Из Отправления Цикл
        
        НомерЗаказа = Отправление.posting_number;
        ТекущийСтатус = Отправление.status;
        ДатаПринятияВРаботу = Отправление.in_process_at;
        
        // Перебираем товары внутри отправления
        Товары = Отправление.products;
        Для Каждого Товар Из Товары Цикл
            АртикулOzon = Товар.sku;
            Количество = Товар.quantity;
            ЦенаПродажи = Товар.price;
            
            // Здесь должна быть ваша логика сопоставления номенклатуры 
            // и создания документа "Заказ клиента" в базе 1С
            СоздатьИлиОбновитьЗаказВ1С(НомерЗаказа, АртикулOzon, Количество, ЦенаПродажи, ТекущийСтатус);
        КонецЦикла;
        
    КонецЦикла;

КонецПроцедуры

При сопоставлении номенклатуры важно помнить, что Ozon оперирует своими внутренними идентификаторами товаров (sku или product_id). Рекомендуется настроить в 1С регистр сведений для хранения связей между вашей внутренней номенклатурой (с учетом характеристик) и идентификаторами Ozon, чтобы избежать путаницы при автоматическом формировании документов.

Сложные нюансы интеграции: Многокоробочные отправления и Маркировка

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

Альтернативный вариант: Использование официального модуля Synchrozon

Если перед вами не стоит задача написать абсолютно кастомный обмен с нуля на чистых HTTP-запросах, настоятельно рекомендуем рассмотреть готовое решение от самого маркетплейса — модуль Synchrozon (официальный инструмент интеграции 1С и Ozon).

Этот модуль бесплатен, регулярно обновляется разработчиками Ozon под любые изменения законодательства (включая требования по маркировке) и изменения в самом API. Он легко встраивается во многие типовые конфигурации 1С (УТ 11, КА 2, ERP 2, УНФ) в виде расширения или внешней обработки и берет на себя все рутинные операции по сопоставлению товаров, выгрузке цен, остатков и загрузке заказов клиентов.

Таким образом, выбор между собственной разработкой и готовым модулем должен зависеть от степени кастомизации ваших бизнес-процессов. Если у вас стандартная схема работы, использование готового решения Synchrozon сэкономит десятки часов разработки и избавит от необходимости постоянной поддержки кода при плановых изменениях API маркетплейса.

← На главную