Гайд [Node.JS] Работа с API YooMoney.

_raz0r

t.me/sssecretway | ТГК: t.me/razor_code
Автор темы
Модератор
1,889
3,041
Привет ✋. Прошлый гайд был про QIWI Wallet, пришло время разбираться с API YooMoney (Яндекс.Деньги в прошлом).
В данном случае у нас уже не будет готовых библиотек для работы с API, делать мы будем все сами, опираясь на документацию.

Что нам нужно?
1) Node.JS (у меня v14.16.1, но самая свежая 14.17.3)
2) Библиотека
Needle

Наша задача:
1) Зарегистрировать приложение.
2) Получить временный токен от приложения.
3) Получить вечный токен, он и будет нам нужен для обращения к методам.



Регистрация приложения.
Чтобы получить токен, нам нужно создать приложение.
Переходим:
https://yoomoney.ru/myservices/new
1626430638846.png


Заполняем все поля (логотип и галочку с client_secret можно оставить пустыми).
Если у вас нету своего сайта, в Redirect URI можно к примеру вставить ссылку на свой Telegram. Временный токен мы все равно сможем получить.
Далее подтверждаем действие через телефон и наше приложение создалось!

1626431091694.png

Теперь нам нужен "Идентификатор приложения" (это можно сказать 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".

Теперь нужно обратиться к этому методу:
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) // выводим ответ.
})

Выполняем код и получаем вот такой ответ:
1626432105184.png

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

Копируем все, что находится после "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)
})

В случае успеха, мы получаем вот такой ответ:
1626432762277.png


Это и есть наш токен, который теперь можно использовать всегда.



Получение баланса аккаунта.

Тут все просто, токен указывается в "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)
})

Ответ:
1626432942489.png
 
  • Нравится
Реакции: Joni Scripts

molimawka

Известный
Друг
443
647
Если у вас нету своего сайта, в Redirect URI можно к примеру вставить ссылку на свой Telegram.
Хмм, если не ошибаюсь можно же поднять локальный сервак а в redirect указать локалку. Ну я это к тому, что можно сделать получение этого вечного токена автоматизировано без этого "танца с бубном".
 
  • Нравится
Реакции: _raz0r

Lasexille

Новичок
1
0
Получение временного и постоянного токена пользователя.

Чтобы получить постоянный токен для начала нужно получить временный токен, без него мы не сможем получить постоянный.
Для этого в 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) // выводим ответ.
})

Выполняем код и получаем вот такой ответ:
Посмотреть вложение 105534

Вылезает вот такая ерунда после перехода на ссылку из пункта о получении временного токена.

1629643701671.png
 
У

Удалённый пользователь 123482

Гость
Хмм, если не ошибаюсь можно же поднять локальный сервак а в redirect указать локалку. Ну я это к тому, что можно сделать получение этого вечного токена автоматизировано без этого "танца с бубном".
Это же надо будет порты открывать?