При настройке интеграции 1С с маркетплейсом Яндекс Маркет многие разработчики сталкиваются с путаницей в авторизационных данных. Ситуация осложняется тем, что для полноценной работы требуется не один, а два разных токена, которые выполняют принципиально разные задачи. Разберем подробно, как не запутаться в этих ключах, где их взять и как решить проблемы с авторизацией, когда система выдает ошибку "invalid token".
Проанализируем архитектуру взаимодействия систем. Для успешного обмена данными нам необходимо обеспечить двустороннюю связь: запросы от 1С к Маркету и запросы от Маркета к 1С. Для каждой стороны предусмотрен свой механизм безопасности:
Рассмотрим стандартный способ получения токена через расширение Яндекс Маркета (например, для 1С:Управление торговлей 11). Как правило, в настройках расширения есть кнопка «Получить токен», которая перенаправляет вас на страницу авторизации Яндекс ID. Однако, если автоматический способ не срабатывает, разберем ручной алгоритм:
Для начала нам нужно понимать, что OAuth-токен имеет срок действия (обычно 1 год). По истечении этого срока 1С начнет возвращать ошибку. Чтобы получить новый токен вручную, необходимо:
ID приложения и Пароль приложения.access_token.Выясним важный нюанс: если при использовании корректного с виду токена вы получаете ответ "invalid token", проверьте, к тому ли campaignId (идентификатору магазина) вы обращаетесь. В современных версиях API Яндекс активно переходит на использование businessId (идентификатор бизнеса). Один токен может давать доступ ко всем магазинам внутри одного бизнес-аккаунта, но только если права делегированы верно.
Теперь посмотрим на ситуацию с другой стороны. Когда Маркет обращается к вашей 1С, он ожидает, что вы проверите его токен. Рассмотрим, где его найти:
Authorization каждого запроса.В коде 1С обработка этого токена обычно выглядит так. Рассмотрим пример в модуле HTTP-сервиса:
Функция ПроверитьАвторизацию(Запрос)
ТокенИзЗапроса = Запрос.Заголовки.Получить("Authorization");
ЭталонныйТокен = Константы.ТокенPushAPI.Получить();
Если ТокенИзЗапроса <> ЭталонныйТокен Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
Часто возникает ситуация, когда коды и токены верны, но запросы от Маркета «отбиваются» сервером с ошибкой 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С пусты, проанализируем ситуацию с помощью внешних инструментов:
Authorization присылает Яндекс.dbgs).Помните, что при использовании 1С:Управление торговлей версии 11, большинство этих механизмов уже заложено в стандартное расширение. Если вы столкнулись с проблемой, первым делом попробуйте обновить расширение до актуальной версии, так как Яндекс часто меняет требования к API и форматам авторизации (например, переход с заголовка Authorization на X-Authorization-Token в некоторых специфических методах).