Привет ✋. Прошлый гайд был про QIWI Wallet, пришло время разбираться с API YooMoney (Яндекс.Деньги в прошлом).
В данном случае у нас уже не будет готовых библиотек для работы с API, делать мы будем все сами, опираясь на документацию.
Что нам нужно?
1) Node.JS (у меня v14.16.1, но самая свежая 14.17.3)
2) Библиотека Needle
Наша задача:
1) Зарегистрировать приложение.
2) Получить временный токен от приложения.
3) Получить вечный токен, он и будет нам нужен для обращения к методам.
В данном случае у нас уже не будет готовых библиотек для работы с API, делать мы будем все сами, опираясь на документацию.
Что нам нужно?
1) Node.JS (у меня v14.16.1, но самая свежая 14.17.3)
2) Библиотека Needle
Наша задача:
1) Зарегистрировать приложение.
2) Получить временный токен от приложения.
3) Получить вечный токен, он и будет нам нужен для обращения к методам.
Регистрация приложения.
Чтобы получить токен, нам нужно создать приложение.
Переходим: https://yoomoney.ru/myservices/new
Заполняем все поля (логотип и галочку с client_secret можно оставить пустыми).
Если у вас нету своего сайта, в Redirect URI можно к примеру вставить ссылку на свой Telegram. Временный токен мы все равно сможем получить.
Далее подтверждаем действие через телефон и наше приложение создалось!
Теперь нам нужен "Идентификатор приложения" (это можно сказать access_token нашего приложения).
Переходим теперь к коду:
JavaScript:
const needle = require("needle") // Подключаем Needle для запросов.
const clientId = "your_client_id" // Создаем константу с нашим client_id.
Получение временного и постоянного токена пользователя.
Чтобы получить постоянный токен для начала нужно получить временный токен, без него мы не сможем получить постоянный.
Для этого в API существует метод (/oauth/authorize). Параметрами которого являются:
client_id - идентификатор нашего приложения.
response_type - который постоянно равен значению "code"
redirect_uri - страница на которую будет совершен редирект и результат авторизации.
scope - запрашиваемые права доступа. (Все права доступа). Мы будем использовать только "account-info".
Теперь нужно обратиться к этому методу:
Чтобы получить постоянный токен для начала нужно получить временный токен, без него мы не сможем получить постоянный.
Для этого в API существует метод (/oauth/authorize). Параметрами которого являются:
client_id - идентификатор нашего приложения.
response_type - который постоянно равен значению "code"
redirect_uri - страница на которую будет совершен редирект и результат авторизации.
scope - запрашиваемые права доступа. (Все права доступа). Мы будем использовать только "account-info".
Теперь нужно обратиться к этому методу:
JavaScript:
const scopes = [
"account-info"
]
const postDataAuthorize = {
client_id: clientId,
response_type: "code",
redirect_uri: "https://memz.fun",
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.
Смотрим в адресную строку и находим вот это:
Копируем все, что находится после "code". Это и есть наш временный токен.
Теперь получим наконец-то постоянный токен. Для этого существует метод /oauth/token.
Параметры:
code - временный токен.
client_id - идентификатор приложения.
grant_type - постоянно равен значению "authorization_code".
redirect_uri - ссылка на которую будет редирект (можно пустым поле оставить).
JavaScript:
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)
})
В случае успеха, мы получаем вот такой ответ:
Это и есть наш токен, который теперь можно использовать всегда.
Это и есть наш токен, который теперь можно использовать всегда.
Получение баланса аккаунта.
Тут все просто, токен указывается в "headers" в поле 'Authorization'.
Тут все просто, токен указывается в "headers" в поле 'Authorization'.
JavaScript:
const authHeader = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer ' + accessToken
}
}
needle.post(`https://yoomoney.ru/api/account-info`, {}, authHeader, (err, resp) => {
console.log(resp.body)
})
Ответ: