Интеграция с маркетплейсами — одна из самых актуальных задач для многих торговых компаний. В этой статье мы подробно разберем, как с помощью средств платформы 1С:Предприятие 8 реализовать обмен данными с API Wildberries (версии v3). Поскольку методы API маркетплейсов меняются несколько раз в год, важно понимать базовые принципы построения запросов для автоматизации учета и исключения ручного труда.
Прежде чем писать код, давайте определимся с алгоритмом. Чтобы лучше понять механику взаимодействия, можно предварительно изучить демонстрацию основных функций Open API Wildberries из 1С. В обсуждении нашей конкретной задачи часто возникает два пути решения:
/api/v3/orders), используя фильтры по дате, а затем программно проверять, к какой поставке относится каждое задание. Это ресурсоемкий процесс./api/v3/supplies), отфильтровать их по нужному нам статусу, и только для отобранных объектов запросить их состав.Мы сосредоточимся на втором варианте, так как он создает меньшую нагрузку на API и работает быстрее.
Для начала работы с API нам потребуется настроить HTTP-соединение. Wildberries использует авторизацию по ключу API, который передается в заголовке. Давайте подготовим базовую структуру функции для отправки запросов.
Функция СоздатьСоединениеWB()
Сервер = "suppliers-api.wildberries.ru";
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL;
Возврат Новый HTTPСоединение(Сервер, 443, , , , , ЗащищенноеСоединение);
КонецФункции
Функция ПолучитьЗаголовки(Токен)
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", Токен);
Заголовки.Вставить("Content-Type", "application/json");
Возврат Заголовки;
КонецФункции
Для получения списка поставок используется метод 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;
Иначе
Прервать;
КонецЕсли;
КонецЦикла;
API не всегда позволяет отфильтровать поставки по статусу прямо в запросе. Получив массив СписокПоставок, нам нужно отобрать те, где флаг done (завершена) равен Ложь. В некоторых случаях может потребоваться дополнительный парсинг карточки товара Wildberries, если вам нужно сопоставить поставки с конкретными сертификатами соответствия или декларациями.
НужныеПоставки = Новый Массив;
Для Каждого Поставка Из СписокПоставок Цикл
ПоставкаЗавершена = Ложь;
Если Поставка.Свойство("done") Тогда
ПоставкаЗавершена = Поставка.done;
КонецЕсли;
Если НЕ ПоставкаЗавершена Тогда
НужныеПоставки.Добавить(Поставка.id);
КонецЕсли;
КонецЦикла;
Используем метод GET /api/v3/supplies/{supplyId}/orders. Он вернет нам список сборочных заданий, штрихкоды и артикулы товаров.
Для Каждого IDПоставки Из НужныеПоставки Цикл
АдресРесурса = "/api/v3/supplies/" + IDПоставки + "/orders";
ЗапросHTTP = Новый HTTPЗапрос(АдресРесурса, Заголовки);
Ответ = Соединение.Получить(ЗапросHTTP);
Если Ответ.КодСостояния = 200 Тогда
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
ДанныеЗаказов = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Если ДанныеЗаказов.Свойство("orders") Тогда
Для Каждого Заказ Из ДанныеЗаказов.orders Цикл
Артикул = ?(Заказ.Свойство("article"), Заказ.article, "");
// Обработка данных...
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Основные рекомендации по разработке:
Дата(1970, 1, 1) для получения секунд.Используя подход "От поставок к заказам", вы сможете эффективно получать данные об артикулах, минимизируя время выполнения операций в 1С.