Sign in

Зарегистрируйтесь, чтобы стать полноправным участником сообщества Masterpro.ws.

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

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

Регистрируем новое приложение, не забыв отметить чекбокс "Использовать проверку подлинности приложения (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 ) )

 

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

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

  • serge

    написал serge

    Суббота, 16 февраля 2019 23:41

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

  • ediczr2012

    написал ediczr2012

    Суббота, 16 февраля 2019 15:16

    Статья классная но кроме как получить состояние баланса по счету и только.
    Реализую проект на 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

    написал Aleksej

    Четверг, 24 января 2019 01:57

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

  • serge

    написал serge

    Среда, 23 января 2019 15:29

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

  • kaspar

    написал kaspar

    Среда, 23 января 2019 14:14

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

  • serge

    написал serge

    Четверг, 10 января 2019 22:30

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

  • Интересующийся

    написал Интересующийся

    Среда, 09 января 2019 14:14

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

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

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

В блоге