Как получить и настроить токены для интеграции 1С с Яндекс Маркетом?

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

При настройке интеграции 1С с маркетплейсом Яндекс Маркет многие разработчики сталкиваются с путаницей в авторизационных данных. Ситуация осложняется тем, что для полноценной работы требуется не один, а два разных токена, которые выполняют принципиально разные задачи. Разберем подробно, как не запутаться в этих ключах, где их взять и как решить проблемы с авторизацией, когда система выдает ошибку "invalid token".

Различие между двумя видами токенов

Проанализируем архитектуру взаимодействия систем. Для успешного обмена данными нам необходимо обеспечить двустороннюю связь: запросы от 1С к Маркету и запросы от Маркета к 1С. Для каждой стороны предусмотрен свой механизм безопасности:

  1. Авторизационный токен (OAuth-токен): Этот ключ необходим для того, чтобы ваша конфигурация 1С могла «представиться» серверам Яндекса. Он используется во всех исходящих запросах: обновление цен, выгрузка остатков, получение списка заказов. Он привязан к конкретному аккаунту пользователя (Яндекс ID).
  2. Токен для запросов от Маркета (Push API): Этот токен используется в обратном направлении. Когда Маркет хочет сообщить вашей 1С о новом заказе или запросить актуальные остатки (по модели FBS или DBS), он отправляет запрос на ваш опубликованный HTTP-сервис. Чтобы 1С «поверила», что запрос пришел именно от Маркета, используется этот секретный ключ.

Как получить OAuth-токен для исходящих запросов

Рассмотрим стандартный способ получения токена через расширение Яндекс Маркета (например, для 1С:Управление торговлей 11). Как правило, в настройках расширения есть кнопка «Получить токен», которая перенаправляет вас на страницу авторизации Яндекс ID. Однако, если автоматический способ не срабатывает, разберем ручной алгоритм:

Для начала нам нужно понимать, что OAuth-токен имеет срок действия (обычно 1 год). По истечении этого срока 1С начнет возвращать ошибку. Чтобы получить новый токен вручную, необходимо:

Выясним важный нюанс: если при использовании корректного с виду токена вы получаете ответ "invalid token", проверьте, к тому ли campaignId (идентификатору магазина) вы обращаетесь. В современных версиях API Яндекс активно переходит на использование businessId (идентификатор бизнеса). Один токен может давать доступ ко всем магазинам внутри одного бизнес-аккаунта, но только если права делегированы верно.

Настройка токена Push API для входящих запросов

Теперь посмотрим на ситуацию с другой стороны. Когда Маркет обращается к вашей 1С, он ожидает, что вы проверите его токен. Рассмотрим, где его найти:

  1. Зайдите в личный кабинет продавца Яндекс Маркета.
  2. Перейдите в раздел «Настройки» — «Настройки API».
  3. В поле «Авторизационный токен» вы увидите строку, которую Яндекс будет присылать в заголовке Authorization каждого запроса.
  4. Важно: этот токен вы можете сгенерировать сами или нажать кнопку «Обновить» в кабинете.

В коде 1С обработка этого токена обычно выглядит так. Рассмотрим пример в модуле HTTP-сервиса:


Функция ПроверитьАвторизацию(Запрос)
    
    ТокенИзЗапроса = Запрос.Заголовки.Получить("Authorization");
    ЭталонныйТокен = Константы.ТокенPushAPI.Получить();
    
    Если ТокенИзЗапроса <> ЭталонныйТокен Тогда
        Возврат Ложь;
    КонецЕсли;
    
    Возврат Истина;
    
КонецФункции

Проблемы авторизации на веб-сервере IIS

Часто возникает ситуация, когда коды и токены верны, но запросы от Маркета «отбиваются» сервером с ошибкой 401 или 403. Проанализируем причины, связанные с публикацией базы на Internet Information Services (IIS):

Конфликт заголовка Authorization: По умолчанию IIS пытается обработать заголовок Authorization самостоятельно (например, для выполнения Windows-авторизации или Basic-авторизации). В результате до 1С этот заголовок либо не доходит, либо доходит в измененном виде. Для решения этой проблемы выполните следующие шаги:

Также проверим структуру URL. Яндекс требует строгого соблюдения путей для своих методов. Например, если ваш сервис опубликован по адресу https://myserver.ru/base/hs/market, то Яндекс будет добавлять к нему свои эндпоинты: /cart, /order/accept, /order/status. Если в коде 1С или в настройках кабинета допущена ошибка в конечном слеше или регистре символов, авторизация не будет пройдена, так как запрос уйдет на несуществующий URL.

Методы отладки

Если запросы не доходят, а логи 1С пусты, проанализируем ситуацию с помощью внешних инструментов:

  1. Логи IIS: Включите логирование расширенных HTTP-заголовков в настройках сервера. Это позволит увидеть, какой именно Authorization присылает Яндекс.
  2. Сервисы-логгеры: Для тестирования можно временно указать в кабинете Маркета URL стороннего сервиса (webhook tester). Это позволит убедиться, что Яндекс действительно отправляет корректные данные.
  3. Отладка в 1С: Чтобы отладчик «цепился» к HTTP-запросам, убедитесь, что сеанс запускается от имени того же пользователя, под которым работает пул приложений IIS, или используйте отладку по протоколу HTTP (через запуск сервера отладки dbgs).

Помните, что при использовании 1С:Управление торговлей версии 11, большинство этих механизмов уже заложено в стандартное расширение. Если вы столкнулись с проблемой, первым делом попробуйте обновить расширение до актуальной версии, так как Яндекс часто меняет требования к API и форматам авторизации (например, переход с заголовка Authorization на X-Authorization-Token в некоторых специфических методах).

← На главную