Как исправить ошибку empty Authorization header и настроить работу с API Wildberries в 1С 7.7

Программист 1С v7.7 Торговля и дистрибуция
← На главную

Интеграция устаревших систем, таких как 1С:Предприятие 7.7, с современными REST API сервисами (например, Wildberries) часто сопровождается техническими сложностями. Одной из наиболее распространенных проблем является некорректная передача HTTP-заголовков и тела запроса через внешние компоненты, такие как curl1c.dll. В этой статье мы подробно разберем, как правильно настроить авторизацию, передать JSON-данные и избежать типичных ошибок кодировки.

Разбор ошибки empty Authorization header

Проанализируем ситуацию: при попытке отправить запрос к content-api.wildberries.ru сервер возвращает ошибку, указывающую на пустой заголовок авторизации, хотя токен в коде прописан. Выясним причину. В 1С 7.7 при использовании компоненты curl1c.dll крайне важен синтаксис строки заголовка. Рассмотрим пример кода, который вызывает ошибку:

Карлик.УстановитьПараметр("HTTPHEADER","Authorization : "+ Токен);

Проблема заключается в лишнем пробеле перед двоеточием. Протокол HTTP крайне чувствителен к структуре заголовков. Рассмотрим правильный вариант формирования заголовка:


// Правильный формат без пробела перед двоеточием
Карлик.УстановитьПараметр("HTTPHEADER", "Authorization: " + СокрЛП(Токен));

Также важно помнить, что в зависимости от конкретного метода API Wildberries (Контент, Маркетплейс или Реклама), иногда может потребоваться префикс Bearer. Посмотрим на универсальный пример:


// Если API требует Bearer-токен
Карлик.УстановитьПараметр("HTTPHEADER", "Authorization: Bearer " + СокрЛП(Токен));

Передача тела запроса в формате JSON

После того как мы разобрались с заголовками, перейдем к передаче данных. В 1С 7.7 нет штатных средств работы с JSON, поэтому строку приходится формировать вручную или с помощью внешних библиотек. Рассмотрим, как отправить POST запрос с телом JSON через curl1c.dll. Проанализируем использование параметра POSTFIELDS.

Многие разработчики ошибочно пытаются использовать метод Добавить, который предназначен для multipart/form-data. Для работы с чистым JSON нам нужно использовать прямую передачу строки. Разберем по шагам:

  1. Сформируем строку JSON согласно документации WB API.
  2. Установим тип контента application/json.
  3. Передадим строку в параметр POSTFIELDS.

Пример реализации на языке 1С 7.7:


ТекстJSON = "{
| ""settings"": {
|  ""cursor"": { ""limit"": 100 },
|  ""filter"": { ""withPhoto"": -1 },
|  ""sort"": { ""ascending"": true }
| }
|}";

Карлик.УстановитьПараметр("CUSTOMREQUEST", "POST");
Карлик.УстановитьПараметр("HTTPHEADER", "Content-Type: application/json; charset=utf-8");
Карлик.УстановитьПараметр("POSTFIELDS", ТекстJSON);
// Рекомендуется также включить копирование данных для стабильности
Карлик.УстановитьПараметр("COPYPOSTFIELDS", 1);

Критический нюанс: Кодировка UTF-8

Выясним причину, по которой даже при правильном JSON сервер может вернуть ошибку 400 Bad Request. Платформа 1С 7.7 работает в кодировке Windows-1251, в то время как Wildberries принимает данные только в UTF-8. Если ваш JSON содержит только цифры и латиницу, запрос может пройти, но при наличии кириллицы (например, в названиях товаров или описаниях) сервер не сможет распарсить данные.

Посмотрим, как решить эту задачу. В curl1c.dll может присутствовать встроенная функция ToUTF8, но если она работает нестабильно, воспользуемся объектом ADODB.Stream для перекодировки:


Функция ПреобразоватьВUTF8(Текст)
    Стрим = СоздатьОбъект("ADODB.Stream");
    Стрим.Type = 2; // adTypeText
    Стрим.Charset = "windows-1251";
    Стрим.Open();
    Стрим.WriteText(Текст);
    Стрим.Position = 0;
    Стрим.Charset = "utf-8";
    Результат = Стрим.ReadText();
    Стрим.Close();
    Возврат Результат;
КонецФункции

// Использование в коде
ТекстJSON_UTF8 = ПреобразоватьВUTF8(ТекстJSON);
Карлик.УстановитьПараметр("POSTFIELDS", ТекстJSON_UTF8);

Работа с пагинацией и курсором

Рассмотрим особенности метода /v2/get/cards/list. Wildberries не отдает все карточки разом. Максимальный лимит за один запрос — 100 штук. Чтобы получить следующую порцию данных, проанализируем структуру ответа. В ответе придет объект cursor, данные из которого (метку времени или ID) нужно подставить в следующий запрос.

Поскольку парсинг JSON в 7.7 затруднен, рекомендуется использовать регулярные выражения через VBScript.RegExp для извлечения нужных полей из ответа сервера:


РегВыр = СоздатьОбъект("VBScript.RegExp");
РегВыр.Pattern = """nmId"":(\d+)"; // Пример поиска ID номенклатуры
Matches = РегВыр.Execute(ОтветСервера);

Обработка лимитов и ошибок

Wildberries применяет жесткие Rate Limits (ограничения по количеству запросов в секунду). Если ваша обработка в 1С 7.7 делает запросы в цикле слишком быстро, вы получите ошибку 429 Too Many Requests. Проанализируем, как этого избежать. Самый простой способ — добавить небольшую паузу между итерациями цикла.

Для реализации задержки в 1С 7.7 можно использовать команду системы или внешние компоненты:


// Пауза в 1 секунду через системный timeout
КомандаСистемы("timeout /t 1 /nobreak > nul");

Подведем итог: для успешной работы с API WB из "семерки" необходимо строго соблюдать синтаксис заголовков (без лишних пробелов), принудительно конвертировать данные в UTF-8 и использовать правильные параметры компоненты curl для передачи тела POST-запроса.

← На главную