Pull to refresh

О Робокассе наглядно

Payment systems *
Вчера вечером добавил интерфейс взаимодействия с Робокассой в свою CMS.

Кратко о платежной системе


Робокасса — интегратор платежных систем. Она позволяет организовать прием платежей в пользу магазина через множество известных электронных валют (Webmoney, ВКонтакте, ЯндексДеньги, Деньги@Mail.Ru, RBK Money и другие), через терминалы оплаты ЭлексНет, и, самое главное — через SMS.

Доступно два варианта подключения — для юридических лиц и ИП, с выводом денег из системы на расчетный счет и для физических лиц с возможностью вывода в электронные валюты.

Регистрация


Регистрация достаточно проста. Идете на https://www.roboxchange.com/Environment/Partners/Login/Login.aspx?reg=Merchant и аккуратно заполняете все необходимые поля. После завершения регистрации подождите некоторое время (около 5 минут) и входите в систему.

Изначально Ваш аккаунт будет иметь статус «Не активен», это позволяет настроить и протестировать магазин перед включением в реальный режим.

Собственно код — отправка платежа


Робокасса принимает от магазина параметры через GET или POST запрос. Вам понадобится на странице оплаты создать примерно такую форму (это минимальный вариант):
  1. <form method="post" action="http://test.robokassa.ru/Index.aspx">
  2. <!-- для реального режима измените action формы на "https://merchant.roboxchange.com/Index.aspx" -->
  3.  
  4. <input type="hidden" name="MrchLogin" value="-- Ваш логин в системе --" />
  5. <input type="hidden" name="OutSum" value="-- Сумма платежа, разделитель дробной части - точка --" />
  6. <input type="hidden" name="InvId" value="-- Уникальный номер транзакции в Вашем магазине -- " />
  7. <input type="hidden" name="Desc" value="-- Описание, например: покупка коньков -- " />
  8. <input type="hidden" name="SignatureValue" value="{SIGNATURE}" />
  9.  
  10. <input type="submit" value="Оплатить" />
  11.  
  12. </form>
* This source code was highlighted with Source Code Highlighter.


В форме есть поле, которое я обозначил {SIGNATURE}. Это специальным образом сформированная подпись Вашего магазина, вернемся к ней позже.

Для того, чтобы обработать ответ Робокассы на попытку платежа, необходимо в личном кабинете системы по адресу https://www.roboxchange.com/Environment/Partners/Login/Merchant/Administration.aspx внести данные о трех страницах, которые будут обрабатывать этот ответ.

  • Result URL — адрес скрипта, который примет от Робокассы уведомление о платеже
  • Success URL — сюда будет перенаправлен пользователь, если платеж пройдет успешно
  • Fail URL — сюда будет перенаправлен пользователь, если платеж окончится неудачно

и выбрать для каждого адреса метод передачи параметров — GET или POST. Я лично выбрал POST.

Кроме этого необходимо заполнить два пароля, #1 и #2. Они будут нужны нам для формирования подписей. Первый — для отправки данных Робокассе, второй — для проверки данных, приходящих от нее.

Теперь вернемся к полю {SIGNATURE} в нашей форме. Оно вычисляется следующим образом:
$login = "Ваш логин в Робокассе";
$amount = floatval(сумма_к_оплате); // floatval нужен, чтобы привести значения типа "99.00" к "99"
$id = уникальный_номер_транзакции_в_магазине;
$pwd1 = "Ваш_пароль_#1";
$signature = md5($login . ":" . $amount . ":" . $id . ":" . $pwd1);


* This source code was highlighted with Source Code Highlighter.


Каждый раз при составлении формы запроса платежа необходимо вычислять эту подпись и передавать ее в форме.

Собственно код — обработка платежа


По адресу Result URL Вам необходимо разместить обработчик ответа Робокассы.
Приведу сразу код:
$id = intval($_POST['InvId']); // получаем номер транзакции
$pwd2 = "Ваш_пароль_#2";
$sum = здесь_код_который_по_номеру_транзакции_получит_ее_сумму;

/*
Не забудьте сначала вставить проверку на существование такого номера транзакции вообще.
Если его нет в базе - выведите "ERR"
*/

if ( $sum != floatval($_POST['OutSum']) ) {
 // Не совпала сумма
 echo "ERR: invalid amount";
 exit();
}

if ( strtolower($_POST['SignatureValue']) != strtolower(md5($_POST['OutSum'] . ":" . $id . ":" . $pwd2)) ) {
 // не совпадает подпись
 echo "ERR: invalid signature";
 exit();
}

// и если все нормально:
// принимаем платеж, помечаем у себя в базе его, как выполненный
// и выводим положительный ответ Робокассе
echo "OK" . $id;
exit();


* This source code was highlighted with Source Code Highlighter.


Активация


Протестируйте Ваш магазин. Попробуйте сделать тестовый платеж и Вы попадате на специальную форму проверки интерфейса. Там Вы сможете проверить отклик Вашего Result URL, увидеть то, что передается от Вас к Робокассе, проверить функционирование Success URL и Fail URL.

Когда успешно закончите тестирование — подавайте заявку на активацию аккаунта. После положительного ответа не забудьте сменить action в форме платежа.

Удачи!

P.S. Подробное описание интерфейса Робокассы можно изучить здесь: http://www.robokassa.ru/Doc/Ru/Interface.aspx
Tags:
Hubs:
Total votes 49: ↑38 and ↓11 +27
Views 83K
Comments Comments 48