Библиотека работы с API Яндекс.Денег.
В ней реализованы вызовы следующих функций API Яндекс.Денег: информация о счете, история операций, детальная информация по операциям, переводы денег другим пользователям. Плюсы и возможности:
- OAuth-авторизация пользователя;
- безопасность работы (поддерживается проверка цепочки сертификатов);
- удобство работы (response'ы сервера представлены в виде объектов) и быстрый старт;
- относительно безопасное и простое решение хранения токенов пользователей с использованием шифрования и без использования БД. Реализацию этого решения вы сможете легко переписать под свои хранилища.
Сама библиотека представляет собой файл цепочки сертификатов ym.crt и файл ym.php, который содержит:
- программный интерфейс IYandexMoney;
- главный класс YandexMoney (реализация интерфейса);
- класс-перечисление с правами доступа (scope);
- вспомогательные классы (response-объекты вывода результатов запросов к API).
В комплект библиотеки приложены 2 файла, которые реализуют шифрование: Rijndael.php и AES.php. Данные файлы взяты из библиотеки phpseclib (https://phpseclib.sourceforge.net/). Они нужны на случай, если вы будете использовать методы сохранения и восстановления токенов.
Внимание: использует PHP версии 5, а также стандартную библиотеку cUrl для http-запросов.
-
authorize
— статический метод для инициации OAuth-авторизации. На вход принимает идентификатор приложения, список прав доступа и URI редиректа после авторизации. Возвращает временный код. -
__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 необходимо получить разрешение пользователя, то есть токен. Его можно получить следующими вызовами (к примеру, с доступом на просмотр информации о счете и истории операций):
YandexMoney::authorize(Consts::CLIENT_ID, 'account-info operation-history', Consts::REDIRECT_URL);
// затем на странице редиректа инициировать создание объекта и получение токена
$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);
print_r('Номер счета: ' . $accountInfoResponse->getAccount() . '<br>');
print_r('Баланс: ' . $accountInfoResponse->getBalance() . '<br>');
print_r('Код валюты: ' . $accountInfoResponse->getCurrency() . '<br>');
Информация о счете получена.
Примерно так же обстоят дела и с другими вызовами.
Для успешного запуска примеров из комплекта следует проделать следующее:
- зарегистрировать приложение, т.е. получить идентификатор клиента (https://sp-money.yandex.ru/myservices/new.xml) и прописать его в константы примеров (consts.php);
- установить какой-нибудь WAMP (Windows-Apache-MySQL-PHP) или LAMP сервер (https://en.wikipedia.org/wiki/Comparison_of_WAMPs);
- скопировать файлы примеров и библиотеку в каталог www.
/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