Как правильно передать параметры JSON в Ozon Seller API из 1С?

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

Интеграция 1С с маркетплейсами, такими как Ozon, требует строгого соблюдения формата передаваемых данных. Одной из наиболее частых проблем является некорректное формирование JSON-пакета или пропуск обязательных параметров, что приводит к ошибкам типа BAD_REQUEST или Invalid request payload. В этой статье мы подробно разберем, как уйти от «извращенных» способов формирования строки вручную и прийти к чистому, надежному коду.

Анализ проблемы: почему ручное формирование JSON — это путь к ошибкам

Рассмотрим ситуацию, когда разработчик пытается сформировать JSON-строку последовательной записью свойств через объект ЗаписьJSON. В коде это выглядит так:


json = Новый ЗаписьJSON;
json.УстановитьСтроку;
json.ЗаписатьНачалоОбъекта;
Json.ЗаписатьИмяСвойства("page");
json.ЗаписатьЗначение(1);
// ... и так далее для каждого вложенного объекта
json.ЗаписатьКонецОбъекта;
Результат = json.Закрыть();

Проанализируем этот подход. Во-первых, легко ошибиться в количестве вызовов ЗаписатьКонецОбъекта(), что приведет к невалидному JSON. Во-вторых, такой код крайне сложно читать и поддерживать. В-третьих, малейшее изменение в структуре фильтра Ozon потребует переписывания всей цепочки команд. Выясним причину ошибки: даже если JSON валиден по структуре, Ozon может вернуть ошибку, если пропущен хотя бы один обязательный параметр, например transaction_type.

Рекомендуемый способ: использование структур 1С

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

  1. Создаем основную структуру запроса.
  2. Вкладываем в нее другие структуры (например, для фильтров).
  3. Используем стандартную функцию ЗаписатьJSON.

Посмотрим на пример функции, которая преобразует структуру в готовую JSON-строку:


Функция СформироватьПараметрыJSON(Параметры)
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    // Сериализуем структуру 1С в формат JSON
    ЗаписатьJSON(ЗаписьJSON, Параметры);
    Возврат ЗаписьJSON.Закрыть();
КонецФункции

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


ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("page", 1);
ПараметрыЗапроса.Вставить("page_size", 100);

Фильтр = Новый Структура;
Фильтр.Вставить("transaction_type", "all"); // Обязательный параметр!

Даты = Новый Структура;
Даты.Вставить("from", "2023-01-01T00:00:00.000Z");
Даты.Вставить("to", "2023-01-31T23:59:59.999Z");

Фильтр.Вставить("date", Даты);
ПараметрыЗапроса.Вставить("filter", Фильтр);

ТекстJSON = СформироватьПараметрыJSON(ПараметрыЗапроса);

Как правильно форматировать дату для Ozon

Одной из самых коварных задач является приведение даты 1С к формату ISO8601, который ожидает Ozon (например, 2020-08-19T23:59:59.897Z). Стандартная функция XMLString(ТекущаяДата()) выдает формат без миллисекунд и суффикса Z, что может не подойти.

Рассмотрим несколько вариантов решения проблемы:

Вариант 1. Использование функции Формат. Это самый простой способ быстро получить строку нужного вида:

СтрДата = Формат(ТекущаяДата(), "ДФ=yyyy-MM-ddThh:mm:ss") + ".000Z";

Вариант 2. Комбинирование с XMLString. Если вам нужна большая точность или вы привыкли к XML-сериализации:

СтрДата = XMLString(ТекущаяДата()) + ".878Z";

Вариант 3. Профессиональный подход (UTC). Помните, что Ozon ожидает время в формате UTC. Если ваша база работает по местному времени (например, МСК+2), просто добавить "Z" в конце будет логической ошибкой. Необходимо сначала пересчитать время в UTC.

Обязательные параметры и заголовки

Проанализируем типичную ошибку Invalid request payload. В контексте Ozon Seller API для метода списка транзакций параметр transaction_type является строго обязательным. Допустимые значения:

Кроме того, убедитесь, что ваши HTTP-заголовки настроены корректно. Даже идеальный JSON не будет принят без следующих параметров в HTTPЗапрос:

Итоговые рекомендации

Подведем итог нашего анализа. Чтобы ваша интеграция работала стабильно:

  1. Всегда используйте Структура и Массив для подготовки данных. Это защитит вас от ошибок в иерархии JSON.
  2. Внимательно проверяйте документацию Ozon на предмет обязательных полей (поле data в ответе с ошибкой часто подсказывает, какого именно ключа не хватает).
  3. Для формирования дат используйте шаблоны, включающие миллисекунды и часовой пояс (Z).
  4. Если вы используете платформу ниже 8.3.6, рассмотрите возможность обновления, так как работа с JSON в старых версиях требует в десятки раз больше кода.

Применяя эти подходы, мы делаем код 1С чистым, а процесс обмена данными с маркетплейсом — предсказуемым и надежным.

← На главную