Как подключить 1С к API Wildberries и исправить ошибку формата даты

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

Интеграция 1С с маркетплейсом Wildberries через API — одна из самых востребованных задач для автоматизации торговли. В процессе разработки программисты часто сталкиваются с тем, что стандартные запросы возвращают ошибки, даже если документация кажется соблюденной. Рассмотрим детально процесс подключения, проанализируем типичные ошибки при передаче параметров и разберем современные требования площадки. Для быстрой настройки обмена без разработки с нуля можно использовать готовое расширение для интеграции 1С с маркетплейсами.

Основы подключения к API Wildberries через 1С

Для взаимодействия с внешними сервисами в 1С используется объект HTTPСоединение. Нам необходимо настроить защищенное соединение через SSL, так как все запросы к Wildberries проходят по протоколу HTTPS. Разберем базовый каркас инициализации соединения.

Прежде всего, нам понадобятся учетные данные: токен доступа, который генерируется в личном кабинете поставщика. Важно помнить, что современные методы API требуют передачи токена в заголовках запроса.

Посмотрим на пример инициализации соединения:


// Настройка SSL-соединения
SSL_Соединение = Новый ЗащищенноеСоединениеOpenSSL;

// Инициализация HTTP-соединения
// Обратите внимание на использование актуального домена (например, marketplace-api.wildberries.ru)
ИмяСервера = "statistics-api.wildberries.ru"; 
Порт = 443;
HttpСоединение = Новый HTTPСоединение(ИмяСервера, Порт, , , , , SSL_Соединение);

Проблема передачи даты в GET-запросах

Одной из самых распространенных проблем является ошибка "Некорректный формат переданной даты". Проанализируем ситуацию: при формировании GET-запроса параметры передаются непосредственно в строке URL. Например, дата в формате 2021-01-13T00:00:00+03:00 содержит символы + и :. Эти символы являются зарезервированными в протоколе HTTP.

Если передать их "как есть", сервер может интерпретировать плюс как пробел, а двоеточие — как разделитель порта или другой служебный знак. В результате Wildberries получает искаженную строку и выдает ошибку 400. Чтобы этого избежать, необходимо использовать функцию КодироватьСтроку с параметром СпособКодированияСтроки.КодировкаURL.

Рассмотрим правильный подход к формированию строки запроса:


НужнаяДата = "2024-05-20T00:00:00+03:00";

// Кодируем строку для URL, чтобы превратить '+' в '%2B', а ':' в '%3A'
НужнаяДатаУРЛ = КодироватьСтроку(НужнаяДата, СпособКодированияСтроки.КодировкаURL);

// Формируем путь к ресурсу с параметрами
ПутьКРесурсу = "/api/v1/orders?date_start=" + НужнаяДатаУРЛ;

// Подготовка заголовков
Заголовки = Новый Соответствие;
// Используем современный стандарт авторизации
Заголовки.Вставить("Authorization", "Bearer " + МойТокен);
Заголовки.Вставить("Content-Type", "application/json");

// Создание запроса
HTTPЗапрос = Новый HTTPЗапрос(ПутьКРесурсу, Заголовки);

Современные требования к авторизации и доменам

Разберем важные изменения, которые произошли в API Wildberries за последнее время. Ранее использовался заголовок X-Auth-Token, однако сейчас стандартом является Authorization с типом Bearer. Если вы используете старые примеры кода, обязательно обновите логику формирования заголовков, иначе вы получите ошибку 401 (Unauthorized).

Также проанализируем разделение API на домены. В зависимости от того, какую задачу мы решаем, необходимо обращаться к разным серверам:

  1. statistics-api.wildberries.ru — получение данных о продажах, заказах и складе (для аналитики).
  2. marketplace-api.wildberries.ru — работа по схеме FBS (склад продавца), управление остатками и сборочными заданиями.
  3. content-api.wildberries.ru — работа с карточками товаров и медиаконтентом.

Использование правильного эндпоинта — залог корректной работы интеграции. Выясним причину, по которой Wildberries требует формат RFC3339. Этот стандарт однозначно определяет время с учетом часового пояса. Рекомендуем использовать окончание Z (UTC) вместо смещения +03:00, если это позволяет бизнес-логика, так как это минимизирует ошибки кодирования.

Пример получения заказов по API

Сведем все полученные знания в единый алгоритм получения списка заказов. Мы выполним настройку заголовков, закодируем дату и обработаем ответ от сервера.


Функция ПолучитьЗаказыСВайлдберриз(ДатаНачала) Экспорт
    
    Токен = "ВАШ_ТОКЕН_ЗДЕСЬ";
    Сервер = "statistics-api.wildberries.ru";
    
    // Форматируем дату в RFC3339
    СтрокаДаты = Формат(ДатаНачала, "ДФ=yyyy-MM-ddTHH:mm:ss") + "Z";
    ДатаДляУРЛ = КодироватьСтроку(СтрокаДаты, СпособКодированияСтроки.КодировкаURL);
    
    Путь = "/api/v1/supplier/orders?dateFrom=" + ДатаДляУРЛ;
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Authorization", "Bearer " + Токен);
    
    SSL = Новый ЗащищенноеСоединениеOpenSSL;
    Соединение = Новый HTTPСоединение(Сервер, 443, , , , , SSL);
    
    ЗапросHTTP = Новый HTTPЗапрос(Путь, Заголовки);
    
    Попытка
        ОтветHTTP = Соединение.Получить(ЗапросHTTP);
        Если ОтветHTTP.КодСостояния = 200 Тогда
            СтрокаJSON = ОтветHTTP.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
            // Далее используем ЧтениеJSON для разбора ответа
            Возврат СтрокаJSON;
        Иначе
            Сообщить("Ошибка запроса: " + ОтветHTTP.КодСостояния + " " + ОтветHTTP.ПолучитьТелоКакСтроку());
            Возврат Неопределено;
        КонецЕсли;
    Исключение
        Сообщить("Ошибка связи: " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;
    
КонецФункции

Работа с остатками товаров (API V3)

Посмотрим на пример обновления остатков по схеме FBS. Здесь используется метод PUT, а данные передаются в теле запроса в формате JSON. Очень важно передавать корректный warehouseId (идентификатор склада), который можно получить в личном кабинете или отдельным запросом к API. Для типовой конфигурации УНФ можно применить готовое расширение для выгрузки остатков на Wildberries по схеме FBS.

Рассмотрим структуру тела запроса для обновления остатков:


// Структура JSON для передачи остатков
// [
//   {"sku": "barcode123", "amount": 10},
//   {"sku": "barcode456", "amount": 5}
// ]

ДанныеОстатков = Новый Массив;

Запись1 = Новый Структура;
Запись1.Вставить("sku", "1234567890123");
Запись1.Вставить("amount", 15);
ДанныеОстатков.Добавить(Запись1);

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

// Формируем запрос
ID_Склада = "123456";
ПутьОстатки = "/api/v3/stocks/" + ID_Склада;
ЗапросОстатки = Новый HTTPЗапрос(ПутьОстатки, Заголовки);
ЗапросОстатки.УстановитьТелоИзСтроки(СтрокаТела, КодировкаТекста.UTF8);

// Отправка через соединение методом PUT
ОтветОстатки = Соединение.ВызватьHTTPМетод("PUT", ЗапросОстатки);

Важные ограничения и рекомендации

Проанализируем лимиты запросов (Rate Limits), которые Wildberries ввел в последние годы. В отличие от ранних версий API, сейчас очень легко получить ошибку 429 (Too Many Requests). Особенно жесткие лимиты действуют на методы статистики — часто не более 1 запроса в минуту.

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

Таким образом, мы выяснили, что ключ к успешному подключению 1С к Wildberries лежит в правильной обработке заголовков Authorization, строгом соблюдении формата даты и обязательном кодировании параметров URL. Применяя эти правила, вы сможете создать надежный механизм интеграции, который не будет "падать" из-за спецсимволов или изменений в требованиях безопасности маркетплейса.

← На главную