Интеграция устаревших систем, таких как 1С:Предприятие 7.7, с современными REST API сервисами (например, Wildberries) часто сопровождается техническими сложностями. Одной из наиболее распространенных проблем является некорректная передача HTTP-заголовков и тела запроса через внешние компоненты, такие как curl1c.dll. В этой статье мы подробно разберем, как правильно настроить авторизацию, передать JSON-данные и избежать типичных ошибок кодировки.
Проанализируем ситуацию: при попытке отправить запрос к content-api.wildberries.ru сервер возвращает ошибку, указывающую на пустой заголовок авторизации, хотя токен в коде прописан. Выясним причину. В 1С 7.7 при использовании компоненты curl1c.dll крайне важен синтаксис строки заголовка. Рассмотрим пример кода, который вызывает ошибку:
Карлик.УстановитьПараметр("HTTPHEADER","Authorization : "+ Токен);
Проблема заключается в лишнем пробеле перед двоеточием. Протокол HTTP крайне чувствителен к структуре заголовков. Рассмотрим правильный вариант формирования заголовка:
// Правильный формат без пробела перед двоеточием
Карлик.УстановитьПараметр("HTTPHEADER", "Authorization: " + СокрЛП(Токен));
Также важно помнить, что в зависимости от конкретного метода API Wildberries (Контент, Маркетплейс или Реклама), иногда может потребоваться префикс Bearer. Посмотрим на универсальный пример:
// Если API требует Bearer-токен
Карлик.УстановитьПараметр("HTTPHEADER", "Authorization: Bearer " + СокрЛП(Токен));
После того как мы разобрались с заголовками, перейдем к передаче данных. В 1С 7.7 нет штатных средств работы с JSON, поэтому строку приходится формировать вручную или с помощью внешних библиотек. Рассмотрим, как отправить POST запрос с телом JSON через curl1c.dll. Проанализируем использование параметра POSTFIELDS.
Многие разработчики ошибочно пытаются использовать метод Добавить, который предназначен для multipart/form-data. Для работы с чистым JSON нам нужно использовать прямую передачу строки. Разберем по шагам:
application/json.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);
Выясним причину, по которой даже при правильном 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-запроса.