При интеграции 1С с маркетплейсом Яндекс Маркет разработчики часто сталкиваются с ошибками авторизации при отправке HTTP-запросов. Наиболее распространенные из них — это 403 Forbidden (OAuth token is invalid) и 404 Not Found при попытке получить или обновить остатки товаров. В этой статье мы подробно разберем причины возникновения этих ошибок, выясним разницу между идентификаторами кабинета и напишем отказоустойчивый код на языке 1С для работы с актуальной версией API Яндекс Маркета. Если синхронизацию остатков и заказов необходимо выполнить в 1С:УТ 11, КА 2 или ERP 2 без ручной разработки HTTP-запросов, применяется модуль интеграции 1С с Яндекс.Маркетом, Ozon и Wildberries.
Для начала проанализируем ситуацию и выделим две основные архитектурные ошибки, которые допускают разработчики при первоначальной настройке интеграции:
Business ID (идентификатор бизнеса) объединяет все ваши магазины и склады в рамках одного юридического лица. Однако конечные операции (такие как запрос остатков, получение заказов или обновление цен) всегда выполняются в контексте конкретного магазина — для этого используется Campaign ID (идентификатор кампании/магазина). Если в URL запроса подставить Business ID вместо Campaign ID, сервер вернет ошибку 404 Not Found или 403 Forbidden, так как запрашиваемый ресурс по указанному пути просто не существует.Authorization: Bearer [токен]. На сегодняшний день для большинства партнерских методов этот способ является устаревшим или требует строгого соответствия прав учетной записи. Актуальный и наиболее стабильный способ авторизации для серверных интеграций (включая 1С) — использование заголовка Api-Key с постоянным ключом доступа.Рассмотрим подробнее, как исправить эти ошибки по шагам.
Прежде чем переходить к написанию кода в 1С, необходимо собрать корректные параметры подключения в личном кабинете продавца:
Campaign ID). Он уникален для каждой модели работы (FBS, FBY, DBS) и каждого конкретного магазина. Запишите его.Вместо использования стандартного заголовка Authorization, мы будем использовать специальный заголовок Api-Key. Это позволит избежать проблем с валидацией токенов OAuth.
Посмотрим на пример правильного формирования соответствия заголовков в 1С:
Заголовки = Новый Соответствие;
Заголовки.Вставить("Api-Key", СокрЛП(ПараметрыПодключения.КлючAPI));
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
Если вам все же необходимо использовать именно OAuth-авторизацию (например, при интеграции через стороннее приложение-посредник), убедитесь, что заголовок формируется строго по стандарту, без лишних кавычек и с одним пробелом после ключевого слова:
Заголовки.Вставить("Authorization", "Bearer " + СокрЛП(OAuth_Токен));
Разберем по шагам создание процедуры на платформе 1С для отправки GET-запроса к API Яндекс Маркета. Мы будем использовать встроенные механизмы работы с HTTP-соединением и защищенным SSL-соединением. В качестве готового альтернативного решения можно использовать обработку для синхронизации FBS-остатков между Озон и Яндекс.Маркет.
Ниже представлен готовый листинг кода, который вы можете использовать в своих обработках:
&НаСервере
Процедура ПолучитьОстаткиНаМаркете()
// 1. Установка параметров подключения
АдресСервера = "api.partner.market.yandex.ru";
CampaignId = "12345678"; // Сюда подставляем реальный Campaign ID (идентификатор магазина)
КлючAPI = "Ваш_Api_Key_Из_Кабинета_Маркета";
// Формируем ресурс согласно документации API v2 или v3
// Обратите внимание: метод GET /v2/campaigns/{campaignId}/stocks.json возвращает остатки самого Маркета
Ресурс = "/v2/campaigns/" + CampaignId + "/stocks.json";
// 2. Формирование заголовков запроса
Заголовки = Новый Соответствие;
Заголовки.Вставить("Api-Key", КлючAPI);
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
// 3. Инициализация защищенного SSL-соединения
// Для работы с современными протоколами TLS рекомендуется использовать дефолтные настройки ОС
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Попытка
HTTPСоединение = Новый HTTPСоединение(АдресСервера, , , , , 30, ЗащищенноеСоединение);
HTTPЗапрос = Новый HTTPЗапрос(Ресурс, Заголовки);
Исключение
ЗаписьЖурналаРегистрации("ИнтеграцияЯндексМаркет", УровеньЖурналаРегистрации.Ошибка, , ,
"Ошибка создания HTTP-соединения: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 4. Выполнение GET-запроса к серверу
Попытка
Ответ = HTTPСоединение.Получить(HTTPЗапрос);
Исключение
ЗаписьЖурналаРегистрации("ИнтеграцияЯндексМаркет", УровеньЖурналаРегистрации.Ошибка, , ,
"Ошибка отправки запроса: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
// 5. Обработка полученного ответа
Если Ответ.КодСостояния = 200 Тогда
ОтветСтрокой = Ответ.ПолучитьТелоКакСтроку();
// Разбор JSON ответа от сервера
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ОтветСтрокой);
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
// Анализируем структуру полученных данных
Если ДанныеОтвета.Свойство("result") И ДанныеОтвета.result.Свойство("stocks") Тогда
Для Каждого СтрокаОстатка Из ДанныеОтвета.result.stocks Цикл
// Извлекаем SKU товара на Маркете и доступный остаток
ИдентификаторТовара = СтрокаОстатка.marketSku;
ДоступныйОстаток = СтрокаОстатка.count;
Сообщить(СтрШаблон("Товар SKU: %1, Доступный остаток: %2", ИдентификаторТовара, ДоступныйОстаток));
КонецЦикла;
Иначе
Сообщить("Ответ получен, но структура данных пуста или неверна.");
КонецЕсли;
Иначе
// Обрабатываем ошибки сервера
Сообщить("Не удалось получить данные. Код состояния: " + Ответ.КодСостояния);
Сообщить("Тело ответа: " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
КонецПроцедуры
Если после внесения изменений в код 1С вы все еще продолжаете получать ошибку 403, проанализируйте следующие факторы:
Api-Key и параметром Campaign ID успешно отрабатывает в Postman, но выдает ошибку в 1С — проверьте настройки прокси-сервера вашей локальной сети или корректность работы SSL-сертификатов на сервере 1С.ЗащищенноеСоединениеOpenSSL.Применяя современный метод авторизации через заголовок Api-Key и указывая точный идентификатор кампании магазина вместо общего идентификатора бизнеса, вы полностью избавитесь от ошибок авторизации и обеспечите стабильный обмен данными между 1С и маркетплейсом. Для автоматизации сопутствующих задач можно использовать обработку для загрузки заказов из Яндекс.Маркет и создания документов реализации.