Как исправить ошибку 400 (Bad Request) при отправке POST-запроса к API Wildberries из 1С?

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

При интеграции 1С с внешними маркетплейсами, такими как Wildberries, разработчики часто сталкиваются с проблемой получения кода ошибки 400. Эта ошибка означает, что сервер не может распознать ваш запрос, чаще всего из-за некорректного формирования тела JSON. Давайте разберем, почему ручная сборка строк в 1С — это путь к ошибкам, и как сделать этот процесс надежным. Для ознакомления с примерами корректных вызовов можно использовать обработку для демонстрации запросов к Open API Wildberries.

Почему ручное формирование строк приводит к ошибкам?

Когда вы формируете JSON-запрос методом конкатенации строк (склейки через «+»), вы вынуждены вручную расставлять кавычки, следить за запятыми и экранированием спецсимволов. В примере, который привел автор темы, ошибка возникла из-за сложности визуального контроля структуры {"sort": {"limit": 50...}}. Ошибка 400 в данном случае указывает на то, что сформированная строка не является валидным JSON-объектом, который ожидает сервер suppliers-api.wildberries.ru.

Решение: использование встроенной библиотеки работы с JSON

Чтобы навсегда забыть о проблемах с кавычками и структурой данных, давайте перейдем на использование штатных объектов 1С: ЗаписьJSON и Структура (или Соответствие). Это позволит платформе автоматически соблюсти все стандарты формата JSON.

Разберем по шагам, как правильно сформировать запрос:

  1. Создайте структуру, соответствующую ожидаемому телу запроса.
  2. Используйте ЗаписьJSON для сериализации этой структуры в строку.
  3. Передайте полученную строку в тело HTTPЗапрос.

Пример правильной реализации кода

Рассмотрим, как правильно подготовить тело запроса и отправить его на сервер Wildberries:


// Создаем структуру с данными для запроса
ДанныеЗапроса = Новый Структура;
ДанныеЗапроса.Вставить("limit", 50);
ДанныеЗапроса.Вставить("offset", 0);
ДанныеЗапроса.Вставить("searchValue", "");
ДанныеЗапроса.Вставить("sortColumn", "updateAt");
ДанныеЗапроса.Вставить("ascending", Ложь);

Сортировка = Новый Структура("sort", ДанныеЗапроса);

// Сериализуем структуру в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Сортировка);
ТелоJSON = ЗаписьJSON.Закрыть();

// Формируем HTTP-запрос
Заголовки = Новый Соответствие();
Заголовки.Вставить("Authorization", Токен);
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("accept", "application/json");

HTTPЗапрос = Новый HTTPЗапрос("/content/v1/cards/list", Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(ТелоJSON, КодировкаТекста.UTF8);

// Отправляем запрос
SSL = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("suppliers-api.wildberries.ru", 443, , , , , SSL);
Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Ключевые рекомендации для успешной интеграции

Чтобы избежать повторения ошибок при работе с API Wildberries, проанализируем важные аспекты:

Таким образом, переход на использование объектов Структура и ЗаписьJSON является универсальным решением для устранения ошибок синтаксиса при обмене с любыми API. Это сделает ваш код более читаемым, поддерживаемым и устойчивым к изменениям в требованиях маркетплейса.

← На главную