Как получить список поставок Wildberries в статусе «В доставке» и их состав через API в 1С?

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

Интеграция с маркетплейсами — одна из самых актуальных задач для многих торговых компаний. В этой статье мы подробно разберем, как с помощью средств платформы 1С:Предприятие 8 реализовать обмен данными с API Wildberries (версии v3). Поскольку методы API маркетплейсов меняются несколько раз в год, важно понимать базовые принципы построения запросов для автоматизации учета и исключения ручного труда.

Анализ задачи и выбор стратегии

Прежде чем писать код, давайте определимся с алгоритмом. Чтобы лучше понять механику взаимодействия, можно предварительно изучить демонстрацию основных функций Open API Wildberries из 1С. В обсуждении нашей конкретной задачи часто возникает два пути решения:

  1. Путь перебора всех заказов ("Долгий путь"). Можно запросить список всех сборочных заданий (метод /api/v3/orders), используя фильтры по дате, а затем программно проверять, к какой поставке относится каждое задание. Это ресурсоемкий процесс.
  2. Путь через список поставок ("Правильный путь"). Логичнее сначала получить список самих поставок (метод /api/v3/supplies), отфильтровать их по нужному нам статусу, и только для отобранных объектов запросить их состав.

Мы сосредоточимся на втором варианте, так как он создает меньшую нагрузку на API и работает быстрее.

Настройка соединения и заголовков

Для начала работы с API нам потребуется настроить HTTP-соединение. Wildberries использует авторизацию по ключу API, который передается в заголовке. Давайте подготовим базовую структуру функции для отправки запросов.


Функция СоздатьСоединениеWB()
    Сервер = "suppliers-api.wildberries.ru";
    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
    Возврат Новый HTTPСоединение(Сервер, 443, , , , , ЗащищенноеСоединение);
КонецФункции

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

Шаг 1. Получение списка поставок

Для получения списка поставок используется метод GET /api/v3/supplies. Этот метод поддерживает пагинацию через параметры limit и next. Подобная логика часто применяется, когда реализуется загрузка в 1С остатков, продаж, заказов и поставок из Wildberries для дальнейшей обработки данных в табличном виде.

Важный момент: Параметр next — это числовой идентификатор, который API возвращает в ответе. Для первого запроса он равен 0.


// Пример получения списка всех поставок с учетом пагинации
Токен = "ВАШ_ТОКЕН_API";
Соединение = СоздатьСоединениеWB();
Заголовки = ПолучитьЗаголовки(Токен);

СписокПоставок = Новый Массив;
ПараметрNext = 0; 
Лимит = 1000;     

Пока Истина Цикл
    
    АдресРесурса = "/api/v3/supplies?limit=" + Формат(Лимит, "ЧГ=") + "&next=" + Формат(ПараметрNext, "ЧГ=");
    
    ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки);
    Ответ = Соединение.Получить(ЗапросHTTP);
    
    Если Ответ.КодСостояния <> 200 Тогда
        Прервать;
    КонецЕсли;
    
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    ДанныеОтвета = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    Если ДанныеОтвета.Свойство("supplies") И ТипЗнч(ДанныеОтвета.supplies) = Тип("Массив") Тогда
        Для Каждого Поставка Из ДанныеОтвета.supplies Цикл
            СписокПоставок.Добавить(Поставка);
        КонецЦикла;
    КонецЕсли;
    
    Если ДанныеОтвета.Свойство("next") И ЗначениеЗаполнено(ДанныеОтвета.next) Тогда
        ПараметрNext = ДанныеОтвета.next;
    Иначе
        Прервать;
    КонецЕсли;
    
КонецЦикла;

Шаг 2. Фильтрация поставок "В доставке"

API не всегда позволяет отфильтровать поставки по статусу прямо в запросе. Получив массив СписокПоставок, нам нужно отобрать те, где флаг done (завершена) равен Ложь. В некоторых случаях может потребоваться дополнительный парсинг карточки товара Wildberries, если вам нужно сопоставить поставки с конкретными сертификатами соответствия или декларациями.


НужныеПоставки = Новый Массив;

Для Каждого Поставка Из СписокПоставок Цикл
    ПоставкаЗавершена = Ложь;
    Если Поставка.Свойство("done") Тогда
        ПоставкаЗавершена = Поставка.done;
    КонецЕсли;
    
    Если НЕ ПоставкаЗавершена Тогда
        НужныеПоставки.Добавить(Поставка.id); 
    КонецЕсли;
КонецЦикла;

Шаг 3. Получение состава поставки (сборочных заданий)

Используем метод GET /api/v3/supplies/{supplyId}/orders. Он вернет нам список сборочных заданий, штрихкоды и артикулы товаров.


Для Каждого IDПоставки Из НужныеПоставки Цикл
    
    АдресРесурса = "/api/v3/supplies/" + IDПоставки + "/orders";
    ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки);
    Ответ = Соединение.Получить(ЗапросHTTP);
    
    Если Ответ.КодСостояния = 200 Тогда
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
        ДанныеЗаказов = ПрочитатьJSON(Чтение);
        Чтение.Закрыть();
        
        Если ДанныеЗаказов.Свойство("orders") Тогда
            Для Каждого Заказ Из ДанныеЗаказов.orders Цикл
                Артикул = ?(Заказ.Свойство("article"), Заказ.article, "");
                // Обработка данных...
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

Альтернативные варианты и рекомендации

Основные рекомендации по разработке:

  1. Unix Timestamp. При работе с датами используйте вычитание Дата(1970, 1, 1) для получения секунд.
  2. Обработка ошибок. Всегда проверяйте коды состояния. При построении сложных систем обмена можно опираться на опыт в других высоконагруженных сервисах.
  3. Лимиты (RPS). Не забывайте делать паузы между запросами к составу каждой поставки, чтобы избежать блокировки со стороны маркетплейса.

Используя подход "От поставок к заказам", вы сможете эффективно получать данные об артикулах, минимизируя время выполнения операций в 1С.

← На главную