- Главная»
- Уроки»
- Электронные деньги»
- Robokassa - система электронных платежей
Robokassa - система электронных платежей
Рано или поздно любой веб-мастер столкнется с необходимостью использовать на своем или сайте клиента систему приема электронных платежей. Различных систем большое множество, можно использовать каждую в отдельности, но все же лучше воспользоваться уже готовым сервисом. Мой взгляд остановился на системе приема платежей под названием Робокасса (http://robokassa.ru/).
Прелесть данной системы в следующем:
- Принимает платежи практически всеми известными способами (от SMS-сообщений до MasterCard);
- Небольшая комиссия, которую можно возложить либо на клиентов, либо платить самому - 5%;
- Удобная система отчетов о проведенных, отмененных и замороженых платежах;
- Система работает как с юридическими лицами, так и физическими;
- Адекватная техподдержка.
Для начала пройдите регистрацию и заполните все необходимые поля. Выполните все требования робокассы и мы приступим к самому интересному, к настройке счета и скриптов. Я показывать вам буду на примере моего проекта - сервиса объявлений.
После успешной регистрации и всех формальностей вы попадете в личный кабинет. Сразу обращаю ваше внимание на то, что пока вы пользуетесь тестовым сервером, но после запроса на активацию сменить настройки уже будет нельзя, поэтому смотрите внимательно на следующее изображение, а ниже я объясню что к чему:
С паролями все ясно. Нас интересуют поля с методами отправки и URLами. Сразу оговорюсь, что не так важно какой метод отправки вы выберите, но все же лучше метод POST. А вот URLы имеют самое важное значение. У меня на сайте за проведение всех денежных операций пользователей отвечает 1 страница, которая меняется в зависимости от передаваемых ей данных. Именно поэтому каждый URL имеет похожее значение, где меняется только переменная act. Именно эта переменная будет передавать нашему серверу значение о том, в какое состояние перешел платеж. Вы можете настроить все по своему, но главное чтобы смысл вам был понятен. В зависимости от значения данной переменной мы будем запускать тот или иной скрипт.
Рассмотрим поближе всю систему. Скачайте демонстрационную систему с сайта Робокассы, она нам очень поможет. Для начала форма отправки заявки на оплату:
echo "Стоимость 1 ОП равна 30 рублей. В зависимости от способа оплаты который вы выберете эта стоимость может изменится, т.к. некоторые платежные системы берут дополнительную комиссию.
";
Данная форма позволит нам выбрать, сколько очков мы будем покупать - 1 очко стоит 30 рублей. Таким образом выбрав 4 очка мы купим их за 120 рублей. В поле Общая стоимость выводится сразу сумма средствами JS (мы не будем здесь показывать как это делать, урок не о том). После нажатия на кнопку Продолжить оплату, пользователь передаст номер заказа, свой ID, сумму покупки скрипту, который выполняется на этой же странице.
При получении всех данных срабатывает следующий скрипт:
if (isset($_REQUEST["coinsToPay"]) && isset($_REQUEST["numberOfOrder"])) { echo ""; echo "
Мы используем популярную систему приема платежей, которая гарантирует безопасность ваших переводов. В случае проблем просьба писать в техподдержку.
"; echo ""; mysql_query("INSERT INTO orders (id_order, userid, sum_pay, coins, status) VALUES ('$inv_id', '$userid', '$out_summ', '$coins', 0)"); }Номер счета: ".$_REQUEST["numberOfOrder"]."
"; $coins = $_REQUEST["coinsToPay"]; echo "Вы приобретаете ".$coins." ОП
"; $sumPay = $coins*30; echo "Сумма к оплате по счету: ".$sumPay." руб.
"; // регистрационная информация (логин, пароль #1) // registration info (login, password #1) $mrh_login = "*********"; $mrh_pass1 = "*********"; // номер заказа // number of order $inv_id = $_REQUEST["numberOfOrder"]; // описание заказа // order description $inv_desc = "Оплата очков Easy-bay"; // сумма заказа // sum of order $out_summ = $sumPay; // тип товара // code of goods $shp_item = "Coins"; // предлагаемая валюта платежа // default payment e-currency $in_curr = "PCR"; // язык // language $culture = "ru"; // формирование подписи // generate signature $crc = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item"); // форма оплаты товара // payment form print "". ""; echo "
В поля $mrh_login, $mrh_pass1 для начала оставьте те, что даны для тестового сервера, а после отладки всей системы смените на свои. Обратите внимание на переменную $crc, она необходима для того, чтобы передать серверам Робокассы зашифрованную подпись, без которой не пройдет платеж. Так же посоветую использовать свою базу для хранения всех заказов, как это сделано у меня. Так вам проще будет отследить кто оплатил, статус его платежа, дату и время и в случае какого-нибудь сбоя робокассы (или своих неверных настроек) вы сможете безболезненно все исправить.
Теперь распакуйте все скачанные с робокассы файлы, из всех файлов нам понадобятся: result.php, success.php, fail.php. Эти файлы содержат всю необходимую информацию о проведении оплаты. Давайте подключим их опять же к нашему же файлу:
if ($_REQUEST["act"]==1) { if (file_exists("includes/success.php")) { require("includes/success.php"); mysql_query("UPDATE orders SET status='1' WHERE id_order='$inv_id'"); $result_coins = mysql_query("SELECT coins, userid FROM orders WHERE id_order='$inv_id'"); $myrow_coins = mysql_fetch_array($result_coins); $result_old = mysql_query("SELECT coins FROM users WHERE id='$myrow_coins[userid]'"); $myrow_old = mysql_fetch_array($result_old); $new_coins = $myrow_old["coins"]+$myrow_coins["coins"]; mysql_query("UPDATE orders SET status='1' WHERE id_order='$inv_id'"); mysql_query("UPDATE users SET coins='$new_coins' WHERE id='$myrow_coins[userid]'"); } } if ($_REQUEST["act"]==2) { if (file_exists("includes/fail.php")) { require("includes/fail.php"); mysql_query("UPDATE orders SET status='2' WHERE id_order='$inv_id'"); } } if ($_REQUEST["act"]==3) { if (file_exists("includes/result.php")) { require("includes/result.php"); mysql_query("UPDATE orders SET status='3' WHERE id_order='$inv_id'"); } }
Обратите внимание, в зависимости от того, какое значение мы передали переменной act у нас грузится соответствующий файл - вот в этом и была вся идея. Если мы получили значение 1, то значит платеж прошел успешно, мы получили деньги и соответственно можем плательщику начислить очки, а сам заказ перевести в состояние исполненных. Если 2, то в базе пишем, что пользователь отказался от платежа. act=3 вы вряд ли когда увидите, хотя он соответственно проходит и сразу же запускает нам условие равное 1, т.е. это промежуточный шаг который в основе своей оповещает только администратора.
Рассмотрим структуру каждого файла в отдельности. fail.php:
$inv_id = $_REQUEST["InvId"]; echo "Вы отказались от оплаты. Заказ# $inv_id\n"; echo "You have refused payment. Order# $inv_id\n";
Тут все просто, если пользователь отказался от платежа то мы просто выводим ему это на экран.
success.php:
// регистрационная информация (пароль #1) // registration info (password #1) $mrh_pass1 = "*******"; // чтение параметров // read parameters $out_summ = $_REQUEST["OutSum"]; $inv_id = $_REQUEST["InvId"]; $shp_item = $_REQUEST["Shp_item"]; $crc = $_REQUEST["SignatureValue"]; $crc = strtoupper($crc); $my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item")); // проверка корректности подписи // check signature if ($my_crc != $crc) { echo "bad sign\n"; exit(); } // проверка наличия номера счета в истории операций // check of number of the order info in history of operations $f=@fopen("order.txt","r+") or die("error"); while(!feof($f)) { $str=fgets($f); $str_exp = explode(";", $str); if ($str_exp[0]=="order_num :$inv_id") { echo "Операция прошла успешно\n"; echo "Operation of payment is successfully completed\n"; } } fclose($f);
Данный файл отвечает за финальное проведение платежа, сверяет контрольную подпись и успешно проводит платеж, а пользователю сообщает об успешном платеже. А также данный скрипт дописывает в файл order.txt лог проведенной операции.
result.php:
// регистрационная информация (пароль #2) // registration info (password #2) $mrh_pass2 = "*********"; //установка текущего времени //current date $tm=getdate(time()+9*3600); $date="$tm[year]-$tm[mon]-$tm[mday] $tm[hours]:$tm[minutes]:$tm[seconds]"; // чтение параметров // read parameters $out_summ = $_REQUEST["OutSum"]; $inv_id = $_REQUEST["InvId"]; $shp_item = $_REQUEST["Shp_item"]; $crc = $_REQUEST["SignatureValue"]; $crc = strtoupper($crc); $my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_item=$shp_item")); // проверка корректности подписи // check signature if ($my_crc !=$crc) { echo "bad sign\n"; exit(); } // признак успешно проведенной операции // success echo "OK$inv_id\n"; // запись в файл информации о прведенной операции // save order info to file $f=@fopen("order.txt","a+") or die("error"); fputs($f,"order_num :$inv_id;Summ :$out_summ;Date :$date\n"); fclose($f);
Как уже говорилось выше, это промежуточный файл, который при отсутствии проблем в системе вернет вам переменную act=1.
Причем обратите внимание, что мы используем введенные нами при регистрации пароли практически во всех исполнительных файлах. В каждом файле свой. Это сделано с целью безопасности системы приема платежа и вашего личного кабинета в системе Робокасса.
Я вам показал лишь пример работы с фиксироваными ценами, таким же образом можно сделать систему приема донатов или настроить интернет-магазин. Хочется пожелать вам удачи с этой системой, внимательно все заполняйте и продумывайте систему, чтобы потом не испытать гнев обманутых пользователей. Подробнее о выплатах вы уже можете прочитать на сайте Робокассы.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Павлов Александр
Урок создан: 24 Февраля 2011
Просмотров: 159177
Правила перепечатки
1 последних уроков рубрики "Электронные деньги"
-
Как зарабатывать на сайте, даже если Вам нечего продавать?
Из этого урока Вы узнаете, как можно начать зарабатывать на обыкновенном сайте с помощью контекстной рекламы. Я, например, за 6 месяцев с 3-х обыкновенных сайтов, заработал 1554$ лишь однажды разместив пару строк кода на страницах этих сайтов.