Собираю базу знаний, чтобы все под рукой
 

Форма оплаты робокасса с вводом произвольной суммы, заказа и т.д

Всем привет!

На одном проекте решили прикрутить форму оплаты Робокассы, в которой юзер самостоятельно вводит номер заказа и сумму оплаты, после нажатия а кнопку «оплатить» пользователь попадает на сайт robokassa и там уже вводит данные карты. Сразу скажу, что можно передавать и телефоны и e-mail и т.д., но нам этого не надо. В Интернете полно вопросов и ответов,но все не то, вернее либо для программистов, либо предлагают за деньги. Но я то не программист и платить не люблю))) Тем более есть еще несколько проектов куда пойдет форма, значит надо разобраться.

Итак начнем:

Процесс регистрации на Робокассе не буду описывать, единственное что в технических настройках магазины выбрал: Метод отсылки данных по Result Url: свой почтовый ящик, метод отсылки данных Success и Fail: Post (хотя просто указал статические страницы, которые показываются пользователю при успешной оплате или ошибке.

Теперь сама реализация:

На сайте робокассы есть решение, которое на вид рабочее, если не вводить произвольных сумм или номеров счетов. При изменении данных параметров сумму MD5 не формируется с учетом введенных данных и мы получаем разные ошибки при переходе на страницу оплаты робокассы.

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

1. Мы помещаем на страницу с оплатой код формы для ввода данных пользователем. Для меня это номер заказа и сумма оплаты:

<form action="https:site/action.php" method="POST">
<div class="col-sm-10"><input type="number" name="name" placeholder="Номер заказа" required></div>
<div class="col-sm-10"><input type="text" name="price" placeholder="Сумма платежа, руб." required></div>
<input type=submit value='Оплатить'>
</form>

В коде выше: https:site/action.php это путь к обработчику на вашем сайте, который мы создадим в следующем шаге. input type=»number» name=»name» и input type=»text» name=»price» это наши параметры, которые вводит пользователь в форму. Оформляем форму как больше нравится, на вкус и цвет.

input type=submit value=’Оплатить’ — это наша кнопка, которая подтверждает отправку формы и запускает обработчик. Если введенные данные в форме присутствуют и соответствуют требованиям, то после пользователь попадает на страницу оплаты робокассы с суммой и номером заказа, которые он указал.

2. Создаем файл обработчика «action.php» по адресу, указанному в шаге выше, следующего содержания:

<?php

if(!empty($_POST["name"]) && !empty($_POST["price"]) ){ // если был пост и переданы данные

$name = trim(htmlspecialchars(strip_tags($_POST["name"]))); // принимаем параметры с формы и присваиваем их значения переменным
$price = trim(htmlspecialchars(strip_tags($_POST["price"]))); // принимаем параметры с формы и присваиваем их значения переменным

$mrh_login = "Идентификатор вашего магазина"; // идентификатор магазина
$mrh_pass1 = "Пароль1"; // пароль #1

$inv_id = $name;//номер счета: присваиваем значение переменной $name для переменной $inv_id, чтобы передать в робокассу и сформировать signature

$inv_desc = "Оплата заказа ".$name; // описание заказа с дописывание номера заказа из формы

$out_summ = $price; // сумма оплаты: присваиваем значение переменной $price для переменной $out_summ, чтобы передать в робокассу и сформировать signature

$shp_item = 1; // тип товара. необязательное поле
$in_curr = ""; // предлагаемая валюта платежа. необязательное поле
$culture = "ru"; // язык. необязательное поле
$crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item:shp_names=$name"); // формирование подписи
// Перенаправляем пользователя на страницу оплаты
Header("Location: https://auth.robokassa.ru/Merchant/Index.aspx?MrchLogin=$mrh_login&OutSum=$out_summ&InvId=$inv_id&IncCurrLabel=$in_curr".
          "&Desc=$inv_desc&SignatureValue=$crc&Shp_item=$shp_item".
          "&Culture=$culture&shp_names=$name");
      
}

?>

На что нужно обратить внимание:

  • Почитайте документацию робокассы хотя бы для общего развития.
  • Необязательные параметры должны иметь в названии вначале Shp_ в любом регистре, например shp_names, кроме того они должны быть расположены в алфавитном порядке после обязательных при формировании подписи.
  • Внимание и еще раз внимание!

Сам потратил 3 дня на поиски, но вот заработало!

Всем добра и чтоб росла борода!

Поделиться ссылкой: