🐛 Баг: Не удаётся получить токен
Fatonndev opened this issue · 4 comments
Fatonndev commented
AlexXanderGrib commented
У YooMoney некоторые права токена конфликтуют друг с другом и эти конфликты очень плохо задокументированы. Могу дать только 2 совета
- Включайте только те права, которые действительно собираетесь использовать
- Если это токен для кошелька, который принимает деньги, то лучше настройте уведомления о событиях, либо используйте права:
operation-history
- Если это токен для пользователей, т.е плательщиков, чтобы вы могли списывать с них деньги, то нужно только право
payment.to-pattern("id")
илиpayment.to-account("wallet")
, о них ниже
- Если это токен для кошелька, который принимает деньги, то лучше настройте уведомления о событиях, либо используйте права:
- Для дачи токену права на отправку платежей используйте права
payment.to-pattern("id")
, гдеid
можно найти по примеру из документации. Пример использования: Перевод на QIWI Кошелёкpayment.to-account("wallet")
, гдеwallet
это номер кошелька на который требуется переводить. Подробнее
Fatonndev commented
Я пытался не получать все права сразу, пытался вообще без них, то же самое писало. В итоге получил токен вручную и без Oauth2.
AlexXanderGrib commented
Как вы получили токен без oauth2?
Fatonndev commented
В настройках приложения адрес и адрес редиректа ставим рандомный.
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)
})