Как реализовать загрузку заказов с Яндекс Маркета в 1С через API?

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

Интеграция 1С с маркетплейсом Яндекс Маркет — задача, с которой сталкивается практически любой проект в сфере e-commerce. Несмотря на наличие «стандартных» модулей, разработчики часто приходят к выводу, что типовые решения избыточны, сложны в настройке безопасности или не гибки в плане бизнес-логики. Разберем подробно, как построить собственную систему загрузки заказов, используя прямой интерфейс HTTP API Яндекс Маркета.

Выбор модели взаимодействия: Push или Pull

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

  1. Push-модель (через HTTP-сервис): В этом случае Яндекс Маркет сам выступает инициатором. Как только покупатель оформляет заказ, сервер Маркета отправляет запрос (webhook) на ваш опубликованный HTTP-сервис в 1С. Это требует публикации базы во вне и настройки файла default.vrd. Основной риск здесь — безопасность, так как некорректная настройка может открыть доступ к базе под полными правами, о чем часто предупреждают на форумах.
  2. Pull-модель (периодический опрос): 1С сама выступает инициатором. С помощью регламентного задания система раз в несколько минут обращается к методу API Маркета и спрашивает: "Есть ли новые заказы?". Это гораздо безопаснее, так как база остается внутри контура сети и не требует открытия портов наружу.

В рамках данной статьи мы сосредоточимся на Pull-модели, так как она наиболее универсальна и безопасна для большинства внедрений.

Авторизация и подготовка к запросу

Для работы с API нам потребуются два ключевых параметра: OAuth-токен и Идентификатор кампании (campaignId). Токен получается в кабинете разработчика Яндекса, а идентификатор кампании можно найти в настройках магазина.

Рассмотрим структуру формирования заголовков для HTTP-запроса. Для авторизации используется заголовок Authorization с типом токена OAuth.


// Пример формирования заголовков
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "OAuth oauth_token=""ВАШ_ТОКЕН"", oauth_client_id=""ВАШ_ID""");
Заголовки.Вставить("Content-Type", "application/json");

Механизм получения списка заказов

Для получения заказов используется метод GET /campaigns/{campaignId}/orders. Проанализируем ситуацию: нам нужно не просто получить все заказы, а только те, которые появились с момента последней синхронизации. Для этого в параметрах запроса следует передавать даты фильтрации.

Разберем пример функции, которая выполняет запрос к Маркету:


Функция ПолучитьСписокЗаказов(CampaignId, ДатаС)
    
    Соединение = Новый HTTPСоединение("api.partner.market.yandex.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    
    ПараметрыЗапроса = "fromDate=" + Формат(ДатаС, "ДФ=dd-MM-yyyy");
    АдресРесурса = "/v2/campaigns/" + CampaignId + "/orders.json?" + ПараметрыЗапроса;
    
    Запрос = Новый HTTPЗапрос(АдресРесурса, Заголовки);
    Ответ = Соединение.Получить(Запрос);
    
    Если Ответ.КодСостояния = 200 Тогда
        Возврат Ответ.ПолучитьТелоКакСтроку();
    Иначе
        ЗаписьЖурналаРегистрации("ЯндексМаркет", УровеньЖурналаРегистрации.Ошибка, , , Ответ.ПолучитьТелоКакСтроку());
        Возврат Неопределено;
    КонецЕсли;
    
КонецФункции

Обработка JSON и создание документов в 1С

Полученный ответ в формате JSON необходимо десериализовать. Выясним причину, почему важно внимательно анализировать структуру ответа: Яндекс передает не только стоимость товаров, но и данные о субсидиях (скидках за счет Маркета).

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

Проанализируем код парсинга заказов:


Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();

Для Каждого ТекущийЗаказ Из Данные.orders Цикл
    // Проверяем, существует ли уже такой заказ в базе по номеру
    ДокументСсылка = Документы.ЗаказПокупателя.НайтиПоРеквизиту("НомерЗаказаМаркета", ТекущийЗаказ.id);
    
    Если ДокументСсылка.Пустая() Тогда
        НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
        НовыйЗаказ.Дата = ТекущаяДата();
        НовыйЗаказ.НомерЗаказаМаркета = ТекущийЗаказ.id;
        // Заполнение табличной части...
        НовыйЗаказ.Записать();
    КонецЕсли;
КонецЦикла;

Жизненный цикл заказа и работа со статусами

Просто загрузить заказ недостаточно. Работа по модели FBS (Fulfillment by Seller) подразумевает обязательное информирование Маркета о готовности заказа к отгрузке. Рассмотрим основные шаги, которые необходимо автоматизировать в 1С:

  1. Подтверждение заказа: Перевод заказа в статус PROCESSING. Это сигнал Маркету, что вы зарезервировали товар.
  2. Передача грузовых мест: Вы должны сообщить Маркету, в скольких коробках поставляется заказ. Без этого невозможно будет распечатать ярлыки маркировки. Используется метод PUT /campaigns/{campaignId}/orders/{orderId}/delivery/shipments.
  3. Печать ярлыков: С помощью API можно получить PDF-файл с маркировкой коробок и автоматически распечатать его на принтере этикеток прямо из 1С.
  4. Передача кодов маркировки «Честный Знак»: Если товар подлежит обязательной маркировке, коды DataMatrix должны быть переданы в составе заказа перед сменой статуса на «Отгружен».

Безопасность и ограничения (Rate Limits)

При реализации обмена важно помнить о лимитах запросов. Яндекс ограничивает количество обращений к API в единицу времени. Если ваша 1С начнет слишком часто «дергать» методы (например, при обновлении остатков по тысячам позиций), сервер вернет ошибку 429 (Too Many Requests).

Рекомендация: Реализуйте механизм очереди. Если 1С получает ошибку 429, процесс должен «уснуть» на несколько секунд и повторить попытку. Также используйте кэширование токенов и данных, которые меняются редко.

Что касается безопасности «открытия базы наружу», упомянутой в обсуждении: если вы все же решили использовать Push-модель (HTTP-сервисы), никогда не используйте пользователя с полными правами в файле default.vrd. Создайте отдельную роль с правами доступа только к конкретному HTTP-сервису и необходимым документам. Это минимизирует риски при взломе или перехвате запросов.

Итоги

Создание собственной системы загрузки заказов через API Яндекс Маркета позволяет полностью контролировать процесс обмена, корректно учитывать финансовые нюансы (субсидии, комиссии) и не зависеть от обновлений сторонних модулей. Главное — придерживаться последовательной обработки статусов и уделять внимание обработке ошибок сетевого взаимодействия.

← На главную