OAuth-авторизация в Яндекс.Кассе
Если вы хотите, чтобы в вашем приложении пользователь мог работать с платежами через Яндекс.Кассу, вам необходимо получить разрешение на выполнение операций от его имени — OAuth-токен. Для этого нужно реализовать авторизацию по протоколу OAuth 2.0.
Порядок OAuth-авторизации в Яндекс.Кассе:
  1. Перенаправьте пользователя на OAuth-сервер Яндекса и получите код подтверждения.
  2. Обменяйте код подтверждения на OAuth-токен.
  3. Используйте полученный токен для обращения к API Яндекс.Кассы.
Выдать права может только пользователь Яндекс.Кассы с ролью Владелец.
OAuth-авторизация в Яндекс.Кассе
Ниже подробнее описан процесс интеграции с Яндекс.OAuth для работы по API Яндекс.Кассы.
 Подготовка
Перед началом работы необходимо подключиться к партнерской программе Яндекс.Кассы, а затем зарегистрировать свое приложение в сервисе Яндекс.OAuth.
 1. Получите статус партнера Яндекс.Кассы
Отправьте заявку на подключение к партнерской программе. С вами свяжется менеджер Яндекс.Кассы и пришлет дальнейшие инструкции.
Для регистрации понадобится логин на Яндексе.
 2. Зарегистрируйте приложение на Яндекс.OAuth
Зарегистрируйте свое приложение на Яндекс.OAuth. Нужно будет войти под логином на Яндексе, который вы использовали для регистрации в партнерской программе.
При регистрации приложения в разделе Доступы выберите набор прав для работы с Яндекс.Кассой. Вы можете запрашивать такие права:
  • создание платежа;
  • подтверждение платежа;
  • отмена платежа.
Этих прав достаточно, чтобы полноценно принимать платежи через Яндекс.Кассу.
Набор прав для работы с Яндекс.Кассой отображается только тем, кто подключился к партнерской программе.
Чтобы реализовать OAuth-авторизацию, вам понадобятся идентификатор приложения, пароль и Callback URL, которые вы получите после регистрации приложения в Яндекс.OAuth. Эти данные доступны в свойствах приложения (нажмите название приложения, чтобы открыть его свойства).
Свойства созданного приложения
 Шаг 1. Получите код подтверждения
Чтобы получить код подтверждения для OAuth-токена Яндекс.Кассы, перенаправьте пользователя на OAuth-сервер Яндекса.
Формат адреса для перенаправления пользователя
https://oauth.yandex.ru/authorize?response_type=code&client_id=<Идентификатор приложения>&device_id=<Идентификатор устройства>&state=<значение параметра state в запросе>
Описание параметров
ПараметрОписание
response_typeСпособ получения токена. Для Яндекс.Кассы нужно указать значение
code
(код подтверждения).
Обязательный параметр.
client_idИдентификатор вашего приложения.
Обязательный параметр.
device_idУникальный идентификатор устройства, для которого запрашивается токен.
Чтобы обеспечить уникальность, достаточно один раз сгенерировать UUID и использовать его при каждом запросе нового токена с данного устройства. Также в качестве
device_id
вы можете использовать уникальный идентификатор аккаунта пользователя в вашем приложении. Идентификатор должен быть не короче 6 символов и не длиннее 50. Допускается использовать только печатаемые ASCII-символы (с кодами от 32 до 126).
Если
device_id
не передан и пользователь пытается выдать права для вашего приложения с того же устройства, в результате авторизации вы получите уже существующий OAuth-токен.
Рекомендуемый параметр для интеграции с Яндекс.Кассой.
stateСтрока состояния, которую Яндекс.OAuth возвращает без изменения. Можно использовать для идентификации пользователя, для которого запрашивается токен. Максимальная допустимая длина строки — 1024 символа.
Рекомендуемый параметр для интеграции с Яндекс.Кассой.
Это те параметры, которые нужны для интеграции с Яндекс.Кассой. Посмотреть все параметры можно в документации Яндекс.OAuth.
Когда пользователь будет выдавать права, он выберет один из своих магазинов в Яндекс.Кассе и подтвердит действие паролем из смс. При авторизации он может выбрать только один магазин. Если вам нужно получить доступ к нескольким магазинам пользователя, заново запросите права с уникальным
device_id
для каждого магазина.
После того, как пользователь выдаст права вашему приложению, OAuth-сервер Яндекса перенаправит его на Сallback URL, который вы указали при регистрации приложения.
Код действует 10 минут. За это время его нужно обменять на OAuth-токен, иначе код придется запрашивать заново.
Пример URL, на который будет перенаправлен пользователь в случае успеха
http://www.example.com/token?code=<код подтверждения>&state=<значение параметра state в запросе>
Описание параметров
ПараметрОписание
codeКод подтверждения, который можно обменять на OAuth-токен.
Обязательный параметр.
stateСтрока состояния, которую Яндекс.OAuth возвращает без изменения.
Необязательный параметр.
Если пользователь отказался давать разрешение, он вернется на Callback URL с ошибкой
access_denied
.
Подробнее про обработку ошибок
Пример URL, на который будет перенаправлен пользователь в случае неудачи
http://www.example.com/token?error=<код ошибки>&error_description=<описание ошибки>&state=<значение параметра state в запросе>
 Шаг 2. Обменяйте код подтверждения на OAuth-токен
Чтобы обменять код подтверждения на OAuth-токен, отправьте POST-запрос на OAuth-сервер Яндекса и передайте в нем полученный код, свой идентификатор и пароль.
Пример запроса
cURL
curl https://oauth.yandex.ru/token \
  -u <Идентификатор приложения>:<Пароль приложения> \
  -d grant_type=authorization_code \
  -d code=<Код подтверждения>
В ответ OAuth-сервер Яндекса вернет OAuth-токен в поле
access_token
.
Пример тела ответа с OAuth-токеном
JSON
{
  "token_type": "bearer",
  "access_token": "AQAAAACy1C6ZAAAAfa6vDLuItEy8pg-iIpnDxIs",
  "expires_in": 124234123534,
  "refresh_token": "1:GN686QVt0mmakDd9:A4pYuW9LGk0_UnlrMIWklkAuJkUWbq27loFekJVmSYrdfzdePBy7:A-2dHOmBxiXgajnD-kYOwQ"
}
Сохраните токен и используйте его для обращения в API Яндекс.Кассы.
OAuth-токен Яндекс.Кассы дает право выполнять финансовые операции от имени пользователя. Токен должен быть доступен только вашему приложению, поэтому не публикуйте его в открытых источниках и не сохраняйте в cookie браузера.
Если OAuth-токен выдать не удалось, в ответе вернется описание ошибки.
OAuth-токены Яндекс.Кассы — продлеваемые. Это значит, что токен устаревает после нескольких месяцев, но продлевается при каждой авторизации с этим токеном. При регистрации приложения отображается минимальное время жизни токена. Если OAuth-токен устарел, Яндекс.Касса вернет ошибку.
 Шаг 3. Используйте OAuth-токен для работы с API Яндекс.Кассы
Используйте полученный OAuth-токен при каждом запросе к API Яндекс.Кассы. OAuth-токен нужно передавать в заголовке авторизации.
Вы можете отправлять к API Яндекс.Кассы только те запросы, для которых запросили права при регистрации приложения.
Пример запроса к API Яндекс.Кассы с использованием OAuth-токена
cURL
PHP
Python
curl https://payment.yandex.net/api/v3/me \
  -H 'Authorization: Bearer <OAuth-токен>' \
Пример тела ответа
JSON
{
  "account_id": "123",
  "test": false,
  "fiscalization_enabled": true
}
 Что почитать еще
Документация Яндекс.OAuthБыстрый стартВходящие уведомления