воскресенье, 13 июля 2014 г.

WebMoney. Форма и обработка запроса

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

HTML форма


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

LMI_PAYEE_PURSE - Ваш кошелек, на него будет происходить оплата (буква - инициал кошелька и 12 цифр)
LMI_PAYMENT_NO - ID платежа в вашей системе. Будет использован для поиска нужного платежа в вашей БД
LMI_PAYMENT_AMOUNT - Сумма оплаты в валюте указанного кошелька (R кошелек - рубли, Z - доллары и т.д.)
LMI_PAYMENT_DESC - Описание платежа. Его увидит пользователь после перехода на оплату
user_field_1 - Дополнительное поле (не обязательное). Можно использовать для передачи дополнительных данных на ваш файл обработки

Так-же существует альтернативное поле LMI_PAYMENT_DESC_BASE64. Используется вместо обычного LMI_PAYMENT_DESC. Содержит в себе описание платежа закодированное в base64. Это решит проблему с кодировкой описания, если она возникает.

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


Настроить аккаунт можно по адресу: https://merchant.webmoney.ru/conf/purses.asp (официальный сайт WebMoney)
Настроить нужно все кошельки, которые вы собираетесь использовать (ссылка "настроить" рядом с каждым кошельком)
Поля, которые необходимо настроить:
Тестовый/Рабочий режимы - выкл - не принимает платежи, тестовый - отправляет запрос, но не отправляет средства, рабочий - все включено (он нам и нужен)
Торговое имя - название вашего сайта, его будут видеть пользователи во время оплаты
Secret Key - секретный ключ. Введите сюда какой-нибудь пароль и сохраните его в БД вашего сайта, он еще пригодится (НЕ отмечайте галочку рядом с этим полем)
Result URL - ссылка на файл обработки операции. Описание содержания этого файла смотрите в пункте "Обработка запроса" этой статьи (галочку рядом с этим полем отмечайте по желанию, она включает предзапрос)
Success URL - Ссылка на страницу успешной оплаты (Вернуться на ваш сайт после оплаты)
Fail URL - Ссылка на страницу ошибки или отказа от оплаты (Вернуться на ваш сайт после неудачной оплаты)
Метод формирования контрольной подписи - Выберите MD5

Остальные поля изменяйте по желанию или необходимости. На работу кодов, указанных в статье они влиять не будут.

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


После оплаты платежная система присылает запрос на указанный вами Result URL. В этом файле, в первую очередь, необходимо проверить подлинность запроса, ведь он мог быть запущен не платежной системой. После чего уже делаем нужны операции: изменение статуса платежа в вашей БД или пополнение счета пользователя на сайте. Начнем по порядку.
Система присылает следующие данные (сразу сократим названия переменных, зачем нам в коде длинные переменные?):
$id      =trim($_POST['LMI_PAYMENT_NO']);      
$pmode   =trim($_POST['LMI_MODE']);      
$payee   =trim($_POST['LMI_PAYEE_PURSE']);      
$payer   =trim($_POST['LMI_PAYER_PURSE']);   
$payerwm =trim($_POST['LMI_PAYER_WM']);       
$amount  =trim($_POST['LMI_PAYMENT_AMOUNT']);   
$pre     =trim($_POST['LMI_PREREQUEST']);   
$usr     =trim($_POST['user_field_1']);
$invs    =trim($_POST['LMI_SYS_INVS_NO']);   
$trans   =trim($_POST['LMI_SYS_TRANS_NO']);   
$tdate   =trim($_POST['LMI_SYS_TRANS_DATE']);   
$md5str  =strtoupper(trim($_POST['LMI_HASH'])); 

LMI_PAYMENT_NO, LMI_PAYEE_PURSE, LMI_PAYMENT_AMOUNT, user_field_1 - эти поля уже описаны выше. Система просто присылает указанные вами данные обратно.
LMI_MODE - 1 - тестовый платеж (средства не отправляются), 0 - реальный платеж
LMI_PAYER_PURSE - Кошелек плательщика. С этого кошелька пользователь оплатил эту транзакцию.
LMI_PAYER_WM - WMID плательщика.
LMI_PREREQUEST - Предзапрос или нет. Если предзапрос - нижние 4 поля не присылаются. Предзапрос предназначен для проверки работоспособности вашего сайта перед реальным запросом. Не производите никаких действий , кроме проверок, во время предзапроса.
LMI_SYS_INVS_NO - ID счета
LMI_SYS_TRANS_NO - ID платежа в платежной системе
LMI_SYS_TRANS_DATE - Дата платежа
LMI_HASH - MD5 хеш. Используется для проверки подлинности запроса.

Теперь нужно проверить хеш. Это обязательное действие. Без него безопасность данной операции будет близка к нулю.
Создадим свой вариант хеша, по возможности используя данные из своей БД (постфикс _bd в переменных; используйте $id для поиска нужной транзакции):
$md5string = strtoupper(md5($purse_bd.$amount_bd.$id.$pmode.$invs.$trans.$tdate.$key.$payer.$payerwm)); 
if($md5string!=$md5str) // ошибка

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

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

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


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


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

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