AlexXanderGrib/yoomoney-sdk

🐛 Баг: Не удаётся получить токен

Fatonndev opened this issue · 4 comments

Контекст

Пытаюсь получить токен, не получается. Пытался несколько раз, перепроверял ссылки, ничего. При переходе по выданной ссылке ссылается на то, что отказано в доступе.

изображение

изображение

Версия библиотеки

No response

Язык

JavaScript

Затронутые секции API

Auth

У YooMoney некоторые права токена конфликтуют друг с другом и эти конфликты очень плохо задокументированы. Могу дать только 2 совета

  1. Включайте только те права, которые действительно собираетесь использовать
    • Если это токен для кошелька, который принимает деньги, то лучше настройте уведомления о событиях, либо используйте права: operation-history
    • Если это токен для пользователей, т.е плательщиков, чтобы вы могли списывать с них деньги, то нужно только право payment.to-pattern("id") или payment.to-account("wallet"), о них ниже
  2. Для дачи токену права на отправку платежей используйте права
    • payment.to-pattern("id"), где id можно найти по примеру из документации. Пример использования: Перевод на QIWI Кошелёк
    • payment.to-account("wallet"), где wallet это номер кошелька на который требуется переводить. Подробнее

Я пытался не получать все права сразу, пытался вообще без них, то же самое писало. В итоге получил токен вручную и без Oauth2.

Как вы получили токен без oauth2?

В настройках приложения адрес и адрес редиректа ставим рандомный.

const needle = require("needle") // Подключаем Needle для запросов. Можно axios, вообще без разницы
const clientId = "clientId" // Создаем константу с нашим client_id.

const scopes = [
   // Тут права
   "account-info"
]

const postDataAuthorize = {
   client_id: clientId,
   response_type: "code",
   redirect_uri: "https://example.com",
   scope: scopes
}

needle.post('https://yoomoney.ru/oauth/authorize', postDataAuthorize, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }, (err, resp) => {
   console.log(resp.body) // выводим ответ.
})

Нам нужно перейти по этой (которую выдаст этот код) ссылке из браузера (делать нужно все быстро, потому что ссылка живет 1 минуту).
В случае успеха нас перебросит на ссылку которую мы указали в параметре redirect_uri.

Там в query будет временный токен, через него можно уже получить вечный токен

const needle = require("needle") // Подключаем Needle для запросов. Можно axios, вообще без разницы
const clientId = "clientId" // Создаем константу с нашим client_id.

const postDataToken = {
   code: "your_token", // Сюда временный токен
   client_id: clientId,
   grant_type: "authorization_code",
   redirect_uri: " "
}

needle.post(`https://yoomoney.ru/oauth/token`, postDataToken, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }}, (err, resp) => {
   console.log(resp.body)
})