понедельник, 14 июля 2014 г.

Яндекс Деньги. Форма и обработка запроса

Статья о платежной системе Яндекс Деньги. Рассмотрим только html форму и обработку запроса от сервера. Это можно использовать, например, для пополнения счета или оплату товара на сайте.

HTML форма


HTML форма располагается у вас на сайте и служит переходом с вашего сайта на сайт платежной системы. Передает ей все необходимые данные через POST запрос.
Код формы:

label - ID платежа в вашей системе. Будет использован для поиска нужного платежа в вашей БД
receiver - Ваш кошелек, на него будет происходить оплата (14 цифр)
sum - Сумма оплаты в рублях
quickpay-form - Тип транзакции (shop - универсальная форма; donate - «благотворительная» форма; small - кнопка)
paymentType - Определяет средство платежа (PC – оплата со счета Яндекс Денег; AC – оплата с банковской карты)
formcomment - Название платежа (до 50 символов)
short-dest - Название платежа на странице подтверждения
targets - Назначение платежа (до 150 символов)


Настройка аккаунта


Настроить нужные поля аккаунта можно по адресу: https://sp-money.yandex.ru/myservices/online.xml (официальный сайт Яндекс Денег)
Поле ввода - ссылка на файл обработки операции (далее URL). Описание содержания этого файла смотрите в пункте "Обработка запроса" этой статьи
Кнопка "Изменить секрет" - введите сюда какой-нибудь пароль и сохраните его в БД вашего сайта, он еще пригодится
Галочка "Отправлять уведомления" - нужно отметить, включит отправку запроса на URL, указанный выше.

Обработка запроса


После оплаты платежная система присылает запрос на указанный вами URL. В этом файле, в первую очередь, необходимо проверить подлинность запроса, ведь он мог быть запущен не платежной системой. После чего уже делаем нужны операции: изменение статуса платежа в вашей БД или пополнение счета пользователя на сайте. Начнем по порядку.
Система присылает следующие данные (сразу сократим названия переменных, зачем нам в коде длинные переменные?):
$id      =trim($_POST['label']);    
$order   =trim($_POST['operation_id']);       
$payer   =trim($_POST['sender']);      
$odate   =trim($_POST['datetime']);   
$code    =trim($_POST['codepro']);       
$amount  =trim($_POST['amount']);    
$wamount =trim($_POST['withdraw_amount']);   
$cur     =trim($_POST['currency']);   
$type    =trim($_POST['notification_type']);  
$hash    =trim($_POST['sha1_hash']);   

label - ID платежа, который вы указали в форме
operation_id - Идентификатор операции в истории счета получателя
sender - Для переводов из кошелька — номер счета отправителя. Для переводов с произвольной карты — параметр содержит пустую строку
datetime - Дата и время совершения перевода
codepro - Для переводов из кошелька — перевод защищен кодом протекции. Для переводов с произвольной карты — всегда false.
amount - Сумма, которая зачислена на ваш счет
withdraw_amount - Сумма, которая списана со счета отправителя (совпадает с суммой, указанной в форме)
currency - Код валюты — всегда 643 (Рубль РФ)
notification_type - Для переводов из кошелька — p2p-incoming; Для переводов с произвольной карты — card-incoming
sha1_hash - SHA-1 hash параметров уведомления.

Теперь нужно проверить хеш. Это обязательное действие. Без него безопасность данной операции будет близка к нулю.
Создадим свой вариант хеша:
$hash_gen = hash("sha1", $type.'&'.$order.'&'.$amount.'&'.$cur.'&'.$odate.'&'.$payer.'&'.$code.'&'.$key.'&'.$id);
if($hash_gen!=$hash) // ошибка

Заметили переменную $key, которая ранее нигде не фигурировала? Это секретный ключ, который вы вводили в настройках аккаунта. Система не присылает его, поэтому он должен храниться у вас в БД

С проверками закончили. Теперь можно сделать то, ради чего этот запрос пришел - изменить статус транзакции или пополнить счет пользователя, на ваше усмотрение. И эти действия я описывать не буду - все в ваших руках.

Осталось только вернуть системе правильный ответ. Тут все просто. Если обработка успешно завершена - отвечаем OK, а если нет - CANCEL
Пример правильного ответа:
exit('OK');


Вот и все, запрос завершен и эта статья тоже.


Комментариев нет:

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