Всем привет!
На одном проекте решили прикрутить форму оплаты Робокассы, в которой юзер самостоятельно вводит номер заказа и сумму оплаты, после нажатия а кнопку «оплатить» пользователь попадает на сайт 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 дня на поиски, но вот заработало!
Всем добра и чтоб росла борода!