Интеграция 1С с маркетплейсом Яндекс Маркет — задача, с которой сталкивается практически любой проект в сфере e-commerce. Несмотря на наличие «стандартных» модулей, разработчики часто приходят к выводу, что типовые решения избыточны, сложны в настройке безопасности или не гибки в плане бизнес-логики. Разберем подробно, как построить собственную систему загрузки заказов, используя прямой интерфейс HTTP API Яндекс Маркета.
Прежде чем приступать к написанию кода, проанализируем две принципиально разные схемы получения данных о заказах. Это ключевой архитектурный выбор, от которого зависит стабильность всей системы.
HTTP-сервис в 1С. Это требует публикации базы во вне и настройки файла default.vrd. Основной риск здесь — безопасность, так как некорректная настройка может открыть доступ к базе под полными правами, о чем часто предупреждают на форумах.В рамках данной статьи мы сосредоточимся на 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 необходимо десериализовать. Выясним причину, почему важно внимательно анализировать структуру ответа: Яндекс передает не только стоимость товаров, но и данные о субсидиях (скидках за счет Маркета).
Рассмотрим важные поля в структуре заказа:
id — уникальный номер заказа в системе Маркета;status — текущий статус (например, PLACED или PROCESSING);items — массив товаров в заказе;subsidy — сумма, которую Яндекс доплатит вам за использование промокодов или баллов Плюса покупателем.Проанализируем код парсинга заказов:
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Для Каждого ТекущийЗаказ Из Данные.orders Цикл
// Проверяем, существует ли уже такой заказ в базе по номеру
ДокументСсылка = Документы.ЗаказПокупателя.НайтиПоРеквизиту("НомерЗаказаМаркета", ТекущийЗаказ.id);
Если ДокументСсылка.Пустая() Тогда
НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйЗаказ.Дата = ТекущаяДата();
НовыйЗаказ.НомерЗаказаМаркета = ТекущийЗаказ.id;
// Заполнение табличной части...
НовыйЗаказ.Записать();
КонецЕсли;
КонецЦикла;
Просто загрузить заказ недостаточно. Работа по модели FBS (Fulfillment by Seller) подразумевает обязательное информирование Маркета о готовности заказа к отгрузке. Рассмотрим основные шаги, которые необходимо автоматизировать в 1С:
PROCESSING. Это сигнал Маркету, что вы зарезервировали товар.PUT /campaigns/{campaignId}/orders/{orderId}/delivery/shipments.DataMatrix должны быть переданы в составе заказа перед сменой статуса на «Отгружен».При реализации обмена важно помнить о лимитах запросов. Яндекс ограничивает количество обращений к API в единицу времени. Если ваша 1С начнет слишком часто «дергать» методы (например, при обновлении остатков по тысячам позиций), сервер вернет ошибку 429 (Too Many Requests).
Рекомендация: Реализуйте механизм очереди. Если 1С получает ошибку 429, процесс должен «уснуть» на несколько секунд и повторить попытку. Также используйте кэширование токенов и данных, которые меняются редко.
Что касается безопасности «открытия базы наружу», упомянутой в обсуждении: если вы все же решили использовать Push-модель (HTTP-сервисы), никогда не используйте пользователя с полными правами в файле default.vrd. Создайте отдельную роль с правами доступа только к конкретному HTTP-сервису и необходимым документам. Это минимизирует риски при взломе или перехвате запросов.
Создание собственной системы загрузки заказов через API Яндекс Маркета позволяет полностью контролировать процесс обмена, корректно учитывать финансовые нюансы (субсидии, комиссии) и не зависеть от обновлений сторонних модулей. Главное — придерживаться последовательной обработки статусов и уделять внимание обработке ошибок сетевого взаимодействия.