Библиотека работы с API Яндекс.Денег.
В ней реализованы вызовы следующих функций API Яндекс.Денег: информация о счете, история операций, детальная информация по операциям, переводы денег другим пользователям. Плюсы и возможности:
- OAuth-авторизация пользователя;
- безопасность работы (поддерживается проверка цепочки сертификатов);
- удобство работы (response'ы сервера представлены в виде объектов) и быстрый старт;
- относительно безопасное и простое решение хранения токенов пользователей с использованием шифрования и без использования БД. Реализацию этого решения вы сможете легко переписать под свои хранилища.
Сама библиотека представляет собой файл цепочки сертификатов ym.crt и файл ym.php, который содержит:
- программный интерфейс IYandexMoney;
- главный класс YandexMoney (реализация интерфейса);
- класс-перечисление с правами доступа (scope);
- вспомогательные классы (response-объекты вывода результатов запросов к API).
В комплект библиотеки приложены 2 файла, которые реализуют шифрование: Rijndael.php и AES.php. Данные файлы взяты из библиотеки phpseclib (http://phpseclib.sourceforge.net/). Они нужны на случай, если вы будете использовать методы сохранения и восстановления токенов.
Внимание: использует PHP версии 5, а также стандартную библиотеку cUrl для http-запросов.
-
authorizeUri
— статический метод для получения URI, по которому нужно переидти для инициации OAuth-авторизации. На вход принимает идентификатор приложения, список прав доступа и URI редиректа после авторизации. Возвращает URI OAuth-авторизации -
authorize
— статический метод для инициации OAuth-авторизации. На вход принимает идентификатор приложения, список прав доступа и URI редиректа после авторизации. Отправляет запрос на сервер Яндекс.Денег и запрашивает временный код. Внимание: делает die в конце. Если у вас включен output control или вы используете кеширование, то используйте метод authorizeUri и отправляйте запрос самостоятельно. -
__construct
— конструктор класса. На вход принимает идентификатор приложения и путь к файлу ym.crt цепочки сертификатов (приложен к библиотеке). -
receiveOAuthToken
— метод заврешния OAuth-аутентификации. Обменивает временный код на постоянный токен пользователя. На вход принимает код и URI для редиректа (должно совпадать с указанным при регистрации приложения) Возвращает токен пользователя. -
storeToken
— метод сохраняет полученный токен в json-файл с шифрованием по ключу. Ключ зашит в код и представляет собой константу. На вход принимает идентификатор пользователя и токен. -
restoreToken
— метод восстановливает сохраненный ранее токен. На вход принмает идентификатор пользователя. Возвращает токен пользователя. -
accountInfo
— метод для получения информации о счете пользователя. На вход принимает токен пользователя. Возвращает экземпляр класса AccountInfoResponse, который содержит поля: номер счета, баланс, валюта счета. -
operationHistory
— метод для получения истории операций пользователя. На вход принимает токен пользователя, номер первой записи (постраничный вывод), количество операций и тип операций (депозит или оплата). Возвращает экземпляр класса operationHistoryResponse, который содержит код ошибки, если таковая произошла, номер записи следующей страницы, если таковая есть (постраничный вывод) и массив операций. Операции представляют собой объект Operation (сумма, время, и комментарии к операции). -
operationDetail
— метод для получения детальной информации по операции из истории или платежей. На вход принимает токен пользователя и идентификатор операции. Возвращает экземпляр класса OperationDetailResponse, который унаследован от объекта Operation и предоставляет расширенную информацию по платежу/зачислению. -
requestPaymentP2P
— метод перевода средств на счет другого пользователя. На вход принимает токен пользователя, номер счета (или привязанного телефона) назначения, сумму и комментарий. Возврашает экземпляр класса RequestPaymentResponse, который содержит ошибку, если таковая произошла, информацию о статусе операции, идентификатор операции, контракт и баланс. -
processPayment
— метод для подтверждения перевода, полученного при вызове requestPaymentP2P. На вход принимает идентификатор запроса. Возвращает экземпляр класса ProcessPaymentResponse, который содержит информацию о статусе платежа, балнесе после проведения операции и идентификатор платежа.
Для начала работы с API следует прочитать описание выше или ознакомиться с самой библиотекой ym.php
. Для тех, кто не будет устанавливать и смотреть подробные примеры, покажем пару вызовов.
Для выполнения операций со счетом через API необходимо получить разрешение пользователя, то есть токен. Его можно получить следующими вызовами (к примеру, с доступом на просмотр информации о счете и истории операций):
$uri = YandexMoney::authorizeUri(Consts::CLIENT_ID, $scope, Consts::REDIRECT_URL);
header('Location: ' . $uri);
// затем на странице редиректа инициировать создание объекта и получение токена
$ym = new YandexMoney(Consts::CLIENT_ID, Consts::CERTIFICATE_CHAIN_PATH);
$token = $ym->receiveOAuthToken($_GET['code'], Consts::REDIRECT_URL);
При создании объекта $ym
ему передается идентификатор приложения и абсолютный путь на сервере к цепочке сертификатов (файл ym.crt). И то, и другое обычно прописывается в константах в каком-нибудь модуле (consts.php в наших примерах).
Ну и покажем, как получить информацию о счете пользователя. Таким же образом создаем объект и затем вызываем метод, передав ему токен пользователя:
$ym = new YandexMoney(Consts::CLIENT_ID, Consts::CERTIFICATE_CHAIN_PATH);
$accountInfoResponse = $ym->accountInfo($token);
echo 'Номер счета: ' . $accountInfoResponse->getAccount() . "\n";
echo 'Баланс: ' . $accountInfoResponse->getBalance() . "\n";
echo 'Код валюты: ' . $accountInfoResponse->getCurrency() . "\n";
Информация о счете получена.
Примерно так же обстоят дела и с другими вызовами.
Для успешного запуска примеров из комплекта следует проделать следующее:
- зарегистрировать приложение, т.е. получить идентификатор клиента (https://sp-money.yandex.ru/myservices/new.xml) и прописать его в константы примеров (consts.php);
- установить окружение (Apache + PHP);
- скопировать файлы примеров и библиотеку в корнейвой каталог сайта.
/doc/Description.txt
- описание библиотеки
/doc/ExamplesInstructions.txt
- подробная инструкция по запуску примеров использования
/src/yamoney/ym.php
- библиотека
/src/yamoney/ym.crt
- цепочка сертификатов Яндекса
/src/yamoney/AES.php
- реализация шифрования алгоритмом AES библиотеки phpseclib
/src/yamoney/Rijndael.php
- реализация шифрования алгоритмом Rijndael библиотеки phpseclib
/src/*
- файлы примеров работы SDK