Интеграция учетной системы 1С с маркетплейсом Ozon — одна из самых частых задач, с которой сталкивается современный разработчик. Автоматизация этого процесса позволяет оперативно резервировать остатки, своевременно собирать отправления и избегать штрафных санкций со стороны торговой площадки. В данной статье мы подробно разберем, как правильно организовать взаимодействие с Ozon Seller API, настроить авторизацию, какие адреса запросов использовать и как корректно обрабатывать статусы заказов, включая специфические сценарии с «неоплаченными» товарами.
Для начала разберем техническую основу взаимодействия. Все запросы к программному интерфейсу Ozon Seller API отправляются на единый базовый URL. Мы должны адресовать наши HTTP-запросы на хост:
https://api-seller.ozon.ru
В отличие от классических веб-сервисов, использующих авторизацию по логину и паролю или сложные протоколы OAuth, Ozon применяет упрощенную схему на основе заголовков (Headers) HTTP-запроса. Для успешной авторизации нам необходимо передавать в каждом запросе два ключевых параметра:
Важное предупреждение для разработчиков 1С: Начиная с февраля 2026 года, Ozon ввел ограничение на срок действия новых API-ключей. Теперь вновь создаваемые ключи активны только 180 дней (6 месяцев). Бессрочные ключи постепенно выводятся из эксплуатации. Это означает, что при проектировании архитектуры обмена в 1С мы должны предусмотреть механизм хранения настроек, позволяющий пользователю легко обновлять API-ключ без вмешательства в код программы, либо выводить предупреждение о скором истечении срока действия токена.
Часто от бизнес-аналитиков или заказчиков поступает задача: «Нужно загружать в 1С только неоплаченные заказы для анализа спроса или резервирования». Здесь мы сталкиваемся с особенностью бизнес-логики маркетплейса.
Для обычных покупателей (физических лиц) на Ozon практически не существует понятия «неоплаченный заказ» в общем списке отправлений, готовых к сборке. Покупатель либо оплачивает товар в момент оформления, либо (в редких случаях для определенных категорий) выбирает оплату при получении. Рассмотрим основные статусы, с которыми нам придется работать:
Однако для работы с юридическими лицами (B2B-продажи) ситуация иная. Организации могут оплачивать счета по безналичному расчету в течение нескольких дней. Чтобы продавец видел зарезервированные товары и не распродал их случайно другим клиентам, Ozon предоставляет специализированный метод API:
POST /v1/posting/unpaid-legal/product/list
Этот метод возвращает список именно тех товаров, которые заказаны юридическими лицами, но платеж по которым еще не поступил на расчетный счет маркетплейса.
Интеграция через старые версии API (v1 и v2) на текущий момент не актуальна и не поддерживается маркетплейсом. Разберем современные методы v3 и v4, которые необходимо использовать в коде 1С:
POST /v3/posting/fbs/list (а также версия /v4/posting/fbs/list) — основной рабочий метод для получения списка отправлений по схеме FBS. Позволяет гибко фильтровать заказы по временным периодам, статусам сборки и складам.POST /v3/posting/fbs/unfulfilled/list — облегченный метод, возвращающий список только тех отправлений, которые требуют сборки (новые заказы). Отлично подходит для регламентных заданий в 1С, работающих по расписанию.POST /v3/posting/fbs/get — детальный запрос по конкретному отправлению. С его помощью мы получаем подробный состав заказа, информацию о покупателе, весогабаритные характеристики и требования к маркировке.Рассмотрим практический пример реализации обмена на языке 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, чтобы избежать путаницы при автоматическом формировании документов.
Разрабатывая собственную интеграцию, вы неизбежно столкнетесь со сложными сценариями, которые требуют детальной проработки архитектуры кода:
POST /v5/fbs/posting/product/exemplar/set. Несвоевременная передача кодов маркировки может привести к блокировке отправления или штрафам.Если перед вами не стоит задача написать абсолютно кастомный обмен с нуля на чистых HTTP-запросах, настоятельно рекомендуем рассмотреть готовое решение от самого маркетплейса — модуль Synchrozon (официальный инструмент интеграции 1С и Ozon).
Этот модуль бесплатен, регулярно обновляется разработчиками Ozon под любые изменения законодательства (включая требования по маркировке) и изменения в самом API. Он легко встраивается во многие типовые конфигурации 1С (УТ 11, КА 2, ERP 2, УНФ) в виде расширения или внешней обработки и берет на себя все рутинные операции по сопоставлению товаров, выгрузке цен, остатков и загрузке заказов клиентов.
Таким образом, выбор между собственной разработкой и готовым модулем должен зависеть от степени кастомизации ваших бизнес-процессов. Если у вас стандартная схема работы, использование готового решения Synchrozon сэкономит десятки часов разработки и избавит от необходимости постоянной поддержки кода при плановых изменениях API маркетплейса.