Суббота, 30 июня 2018 13:34

Яндекс API. Получаем токен Яндекс.Денег и баланс Яндекс-кошелька

Оцените материал
(8 голосов)

Все несложно.

Регистрируем новое приложение, не забыв отметить чекбокс "Использовать проверку подлинности приложения (OAuth2 client_secret)"; сразу при регистрации (либо в любой момент позже, открыв перечень приложений) - вводим необходимые данные: в полях "Адрес сайта" и "Redirect URI" указываем один и тот же url, по которому у вас находится показанный далее скрипт авторизации и получения токена:

 

<?php
$client_id = "******";
$client_secret = "*****";
$redirect_uri = "http://*****.php";

if (empty($_GET['code'])) {
$url = "https://money.yandex.ru/oauth/authorize";
if($curl = curl_init()) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, "client_id=".$client_id ."&response_type=code&redirect_uri=" . $redirect_uri . "&scope=account-info operation-details");
$out = curl_exec($curl);
curl_close($curl); }
} else {
$url = "https://money.yandex.ru/oauth/token";
if($curl = curl_init()) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POSTFIELDS, "code=".$_GET["code"]."&client_id=". $client_id . "&grant_type=authorization_code&redirect_uri=" . $redirect_uri . "&client_secret=" . $client_secret);
$out = curl_exec($curl);
curl_close($curl); }
}

 

Полученные "Идентификатор приложения" и "OAuth2 client_secret" переносим в скрипт, затем открываем его в браузере. Видим приглашение:

 

 

Приложение «Test» запрашивает доступ к вашему кошельку
Если хотите разрешить доступ, сначала войдите под своим логином и паролем. Если сомневаетесь, откажитесь.

 

Авторизуемся, соглашаемся со всем, о чем спрашивают, вводим код, полученный в sms:

 

Запрос доступа к кошельку
Приложение «Test» просит разрешения:
видеть информацию о кошельке: статус, баланс, привязанные карты, видеть детали операций — что вы покупали, кому переводили и от кого получали деньги, на какие суммы.

 

Вуаля, открывается новая страничка, на которой теперь красуется один-единственный наш access_token (как утверждает документация Яндекса, полученный токен действителен в течение аж трех лет); теперь всего только и нужно, что скопировать его и подставить во второй, финальный наш скрипт (первый больше не понадобится, удаляем):

 

<?php
$token = "*****";
$url = "https://money.yandex.ru/api/account-info";
/* $url = "https://money.yandex.ru/api/operation-details"; */
$header = array();
$header[] = "Authorization: Bearer ".$token;
if($curl = curl_init()) {
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
/* curl_setopt($curl, CURLOPT_POSTFIELDS, "operation_id=1234567"); */
$out = curl_exec($curl);
curl_close($curl);

$out = json_decode($out);
print_r ($out); } 

 

После чего открываем теперь уже его в браузере, и видим информацию о нашем яндекс-кошельке, что-нибудь вроде:

 

stdClass Object ( [account] => 41001********* [balance] => 0 [currency] => 643 [account_type] => personal [identified] => [account_status] => named [balance_details] => stdClass Object ( [total] => 0 [available] => 0 ) )

 

Все получилось.

8 комментарии

  • Комментировать matroskin Пятница, 10 сентября 2021 16:28 написал matroskin

    Получи токен с правами: scope=account-info operation-history operation-details incoming-transfers payment-p2p payment-shop
    и будет тебе история операций. На данный момент инструкция актуальна.

  • Комментировать serge Суббота, 16 февраля 2019 23:41 написал serge

    Договорились, но и вы держите нас в курсе, если появятся новости.

  • Комментировать ediczr2012 Суббота, 16 февраля 2019 15:16 написал ediczr2012

    Статья классная но кроме как получить состояние баланса по счету и только.
    Реализую проект на Node.js результат такой же как и на PHP.
    Подключал их модуль 'var yandexMoney = require("yandex-money-sdk");' - результат такой же кроме account-info больше не чего не работает.
    Нет при попытке использовать operation-history результат как и на PHP сервер отвечает кодом:
    "statusCode":403, - Недостаточно прав на выполнение операции, "Bearer error=\"insufficient_scope\" - Запрошена операция, на которую у токена нет прав. (HTTP 403 Forbidden" указывает, что сервер понял запрос, но отказывается его авторизовать. ... )
    Проще говоря полученный access_token нет прав на получение данных, хотя документации написано, что право на получение "operation-history". (Там так все красочно и красиво расписано, что губу можно раскокать)
    Если кто-та питает иллюзии по получении больше чем account-info могу огорчить потеряете время.

    В данный момент веду переписку с Яндекс поддержкой по данному вопросу. (Пока безрезультатно хотя сами признают, что документации на их сайте уже устарела.)

    PS.
    ЕСЛИ КТО СТАЛКИВАЛСЯ С ДАННОЙ ПРОБЛЕМОЙ НАПИШЕТЕ, КАКОЙ РЕЗУЛЬТАТ. ПОЛУЧИЛИ.

  • Комментировать Aleksej Четверг, 24 января 2019 01:57 написал Aleksej

    kaspar, все работает именно в том порядке, как рассказано в статье.

  • Комментировать serge Среда, 23 января 2019 15:29 написал serge

    Забыли разрешить доступ для своего вновь созданного приложения на этапе регистрации, вероятнее всего.

  • Комментировать kaspar Среда, 23 января 2019 14:14 написал kaspar

    Делаю все как написано, но после авторизации получаю сообщение
    Ошибка
    Этому приложению отказано в доступе.
    Свяжитесь с его разработчиком и укажите сведения об ошибке (invalid_request)

  • Комментировать serge Четверг, 10 января 2019 22:30 написал serge

    См. в качестве ответа https://toster.ru/q/577573

  • Комментировать Интересующийся Среда, 09 января 2019 14:14 написал Интересующийся

    Очень полезная статья. Каким образом можно выполнить вывод средств со счета или перенаправить средства на другой счет Яндекс денег?

Оставить комментарий

Добавьте ваш комментарий

Сейчас на сайте 482 гостя и нет пользователей

В блоге