Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Платежная система для сайта (типо доната) - Форум

  • Сторінка 1 з 1
  • 1
Платежная система для сайта (типо доната)
m[R]inoДата: Понеділок, 30.05.2011, 18:21 | Сообщение # 1



m[R]ino
Центурион
Группа: Пользователи
Сообщений: 388

Замечания:

Оффлайн
Рано или поздно любой владелец сайта столкнется с необходимостью использовать на своем или сайте клиента систему приема электронных платежей. Различных систем большое множество, можно использовать каждую в отдельности, но все же лучше воспользоваться уже готовым сервисом.
(http://robokassa.ru/).
Прелесть данной системы в следующем:

Для начала пройдите регистрацию и заполните все необходимые поля. Выполните все требования робокассы и мы приступим к самому интересному, к настройке счета и скриптов. Я показывать вам буду на примере моего проекта - сервиса объявлений.

После успешной регистрации и всех формальностей вы попадете в личный кабинет. Сразу обращаю ваше внимание на то, что пока вы пользуетесь тестовым сервером, но после запроса на активацию сменить настройки уже будет нельзя, поэтому смотрите внимательно на следующее изображение, а ниже я объясню что к чему:
С паролями все ясно. Нас интересуют поля с методами отправки и URLами. Сразу оговорюсь, что не так важно какой метод отправки вы выберите, но все же лучше метод POST. А вот URLы имеют самое важное значение. У меня на сайте за проведение всех денежных операций пользователей отвечает 1 страница, которая меняется в зависимости от передаваемых ей данных. Именно поэтому каждый URL имеет похожее значение, где меняется только переменная act. Именно эта переменная будет передавать нашему серверу значение о том, в какое состояние перешел платеж. Вы можете настроить все по своему, но главное чтобы смысл вам был понятен. В зависимости от значения данной переменной мы будем запускать тот или иной скрипт.

Рассмотрим поближе всю систему. Скачайте демонстрационную систему с сайта Робокассы, она нам очень поможет. Для начала форма отправки заявки на оплату:
Code
01    echo "<p>Стоимость 1 ОП равна 30 рублей. В зависимости от способа оплаты который вы выберете эта стоимость может изменится, т.к. некоторые платежные системы берут дополнительную комиссию.</p>
02    <div id="paymentform">
03    <form id="paymentForm" action="room.php#room_client" method="post">
04    <p class="coins">Количество приобретаемых ОП: ";
05     $setTime = time();
06     $maxCoins = 10;
07     $userNumber = $_SESSION["iduser"];
08     $numberOfOrder = $userNumber+$setTime;
09     echo "<select id="coins_choice" name="coinsToPay"><option value="".$choiceCoin."">".$choiceCoin."</option></select></p>
10             <p>Номер счета: ".$numberOfOrder."</p>
11             <p>Общая стоимость <input id="full_sum" size="4"> рублей</p>
12             <input name="numberOfOrder" value="".$numberOfOrder."" type="hidden">
13             <p><input id="button" value="Продолжить оплату" type="submit"></p>
14             </form>
15             <div id="payment_system"><img src="images/tamplate_1/payment_system.jpg" alt=""></div>
16             </div>
17             ";
Данная форма позволит нам выбрать, сколько очков мы будем покупать - 1 очко стоит 30 рублей. Таким образом выбрав 4 очка мы купим их за 120 рублей. В поле Общая стоимость выводится сразу сумма средствами JS (мы не будем здесь показывать как это делать, урок не о том). После нажатия на кнопку Продолжить оплату, пользователь передаст номер заказа, свой ID, сумму покупки скрипту, который выполняется на этой же странице.

При получении всех данных срабатывает следующий скрипт:
Code
01    if (isset($_REQUEST["coinsToPay"]) && isset($_REQUEST["numberOfOrder"])) {
02    echo "<p><img src="images/tamplate_1/robokassa.gif" alt="" align="right"> Мы используем популярную систему приема платежей, которая гарантирует безопасность ваших переводов. В случае проблем просьба писать в техподдержку.</p>";
03    echo "<div id="paymentform">";
04    echo "<p>Номер счета: ".$_REQUEST["numberOfOrder"]."</p>";
05    $coins = $_REQUEST["coinsToPay"];
06    echo "<p>Вы приобретаете ".$coins." ОП</p>";
07    $sumPay = $coins*30;
08    echo "<p>Сумма к оплате по счету: ".$sumPay." руб.</p>";
09    // регистрационная информация (логин, пароль #1)
10    // registration info (login, password #1)
11    $mrh_login = "*********";
12    $mrh_pass1 = "*********";
13    // номер заказа
14    // number of order
15    $inv_id = $_REQUEST["numberOfOrder"];
16    // описание заказа
17    // order description
18    $inv_desc = "Оплата очков Easy-bay";
19    // сумма заказа
20    // sum of order
21    $out_summ = $sumPay;
22    // тип товара
23    // code of goods
24    $shp_item = "Coins";
25    // предлагаемая валюта платежа
26    // default payment e-currency
27    $in_curr = "PCR";
28    // язык
29    // language
30    $culture = "ru";
31    // формирование подписи
32    // generate signature
33    $crc  = md5("$mrh_login:$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item");
34    // форма оплаты товара
35    // payment form
36    print "".
37     "<form action="https://merchant.roboxchange.com/Index.aspx" method="POST">".
38     "<input name="MrchLogin" value="$mrh_login" type="hidden">".
39     "<input name="OutSum" value="$out_summ" type="hidden">".
40     "<input name="InvId" value="$inv_id" type="hidden">".
41     "<input name="Desc" value="$inv_desc" type="hidden">".
42     "<input name="SignatureValue" value="$crc" type="hidden">".
43     "<input name="Shp_item" value="$shp_item" type="hidden">".
44     "<input name="IncCurrLabel" value="$in_curr" type="hidden">".
45     "<input name="Culture" value="$culture" type="hidden">".
46     "<input value="Оплатить" type="submit">".
47     "</form>";
48    echo "</div>";
49    mysql_query("INSERT INTO orders (id_order, userid, sum_pay, coins, status) VALUES ('$inv_id', '$userid', '$out_summ', '$coins', 0)");
50    }
В поля $mrh_login, $mrh_pass1 для начала оставьте те, что даны для тестового сервера, а после отладки всей системы смените на свои. Обратите внимание на переменную $crc, она необходима для того, чтобы передать серверам Робокассы зашифрованную подпись, без которой не пройдет платеж. Так же посоветую использовать свою базу для хранения всех заказов, как это сделано у меня. Так вам проще будет отследить кто оплатил, статус его платежа, дату и время и в случае какого-нибудь сбоя робокассы (или своих неверных настроек) вы сможете безболезненно все исправить.

Теперь распакуйте все скачанные с робокассы файлы, из всех файлов нам понадобятся: result.php, success.php, fail.php. Эти файлы содержат всю необходимую информацию о проведении оплаты. Давайте подключим их опять же к нашему же файлу:
Code
01    if ($_REQUEST["act"]==1) {
02     if (file_exists("includes/success.php")) {
03         require("includes/success.php");
04         mysql_query("UPDATE orders SET status='1' WHERE id_order='$inv_id'");
05         $result_coins = mysql_query("SELECT coins, userid FROM orders WHERE id_order='$inv_id'");
06         $myrow_coins = mysql_fetch_array($result_coins);
07         $result_old = mysql_query("SELECT coins FROM users WHERE id='$myrow_coins[userid]'");
08         $myrow_old = mysql_fetch_array($result_old);
09         $new_coins  = $myrow_old["coins"]+$myrow_coins["coins"];
10         mysql_query("UPDATE orders SET status='1' WHERE id_order='$inv_id'");
11         mysql_query("UPDATE users SET coins='$new_coins' WHERE id='$myrow_coins[userid]'");
12     }
13    }
14    if ($_REQUEST["act"]==2) {
15     if (file_exists("includes/fail.php")) {
16         require("includes/fail.php");
17         mysql_query("UPDATE orders SET status='2' WHERE id_order='$inv_id'");
18     }
19    }
20    if ($_REQUEST["act"]==3) {
21     if (file_exists("includes/result.php")) {
22         require("includes/result.php");
23         mysql_query("UPDATE orders SET status='3' WHERE id_order='$inv_id'");
24     }
25    }
Обратите внимание, в зависимости от того, какое значение мы передали переменной act у нас грузится соответствующий файл - вот в этом и была вся идея. Если мы получили значение 1, то значит платеж прошел успешно, мы получили деньги и соответственно можем плательщику начислить очки, а сам заказ перевести в состояние исполненных. Если 2, то в базе пишем, что пользователь отказался от платежа. act=3 вы вряд ли когда увидите, хотя он соответственно проходит и сразу же запускает нам условие равное 1, т.е. это промежуточный шаг который в основе своей оповещает только администратора.

Рассмотрим структуру каждого файла в отдельности. fail.php:
Code
1    $inv_id = $_REQUEST["InvId"];
2    echo "Вы отказались от оплаты. Заказ# $inv_id\n";
3    echo "You have refused payment. Order# $inv_id\n";
Тут все просто, если пользователь отказался от платежа то мы просто выводим ему это на экран.

success.php:
Code
01    // регистрационная информация (пароль #1)
02    // registration info (password #1)
03    $mrh_pass1 = "*******";
04    // чтение параметров
05    // read parameters
06    $out_summ = $_REQUEST["OutSum"];
07    $inv_id = $_REQUEST["InvId"];
08    $shp_item = $_REQUEST["Shp_item"];
09    $crc = $_REQUEST["SignatureValue"];
10    $crc = strtoupper($crc);
11    $my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass1:Shp_item=$shp_item"));
12    // проверка корректности подписи
13    // check signature
14    if ($my_crc != $crc)
15    {
16   echo "bad sign\n";
17   exit();
18    }
19    // проверка наличия номера счета в истории операций
20    // check of number of the order info in history of operations
21    $f=@fopen("order.txt","r+") or die("error");
22    while(!feof($f))
23    {
24   $str=fgets($f);
25   
26   $str_exp = explode(";", $str);
27   if ($str_exp[0]=="order_num :$inv_id")
28   {
29     echo "Операция прошла успешно\n";
30     echo "Operation of payment is successfully completed\n";
31   }
32    }
33    fclose($f);
Данный файл отвечает за финальное проведение платежа, сверяет контрольную подпись и успешно проводит платеж, а пользователю сообщает об успешном платеже. А так же данный скрипт дописывает в файл order.txt лог проведенной операции.

result.php:
Code
01    // регистрационная информация (пароль #2)
02    // registration info (password #2)
03    $mrh_pass2 = "*********";
04    //установка текущего времени
05    //current date
06    $tm=getdate(time()+9*3600);
07    $date="$tm[year]-$tm[mon]-$tm[mday] $tm[hours]:$tm[minutes]:$tm[seconds]";
08    // чтение параметров
09    // read parameters
10    $out_summ = $_REQUEST["OutSum"];
11    $inv_id = $_REQUEST["InvId"];
12    $shp_item = $_REQUEST["Shp_item"];
13    $crc = $_REQUEST["SignatureValue"];
14    $crc = strtoupper($crc);
15    $my_crc = strtoupper(md5("$out_summ:$inv_id:$mrh_pass2:Shp_item=$shp_item"));
16    // проверка корректности подписи
17    // check signature
18    if ($my_crc !=$crc)
19    {
20   echo "bad sign\n";
21   exit();
22    }
23    // признак успешно проведенной операции
24    // success
25    echo "OK$inv_id\n";
26    // запись в файл информации о прведенной операции
27    // save order info to file
28    $f=@fopen("order.txt","a+") or die("error");
29    fputs($f,"order_num :$inv_id;Summ :$out_summ;Date :$date\n");
30    fclose($f);
Как уже говорилось выше, это промежуточный файл, который при отсутствии проблем в системе вернет вам переменную act=1.

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

найдено на просторах инета .
 
booyoodsДата: Понеділок, 30.05.2011, 18:32 | Сообщение # 2



booyoods
Старший Маршал
Группа: V.I.P
Сообщений: 1333

Замечания:

Оффлайн
Для сайта вов это зачем?


 
booyoodsДата: Понеділок, 30.05.2011, 18:35 | Сообщение # 3



booyoods
Старший Маршал
Группа: V.I.P
Сообщений: 1333

Замечания:

Оффлайн
m[R]ino, Тему лучше перенести в Раздел php


 
m[R]inoДата: Понеділок, 30.05.2011, 18:50 | Сообщение # 4



m[R]ino
Центурион
Группа: Пользователи
Сообщений: 388

Замечания:

Оффлайн
booyoods, ну в принципе да ,перемести ,прост я подмал система как донат почти и решил тут слить (
 
DarkensandДата: Понеділок, 30.05.2011, 19:00 | Сообщение # 5



Darkensand
Главный Админ
Лучший из лучших
Группа: Администратор
Сообщений: 8083



Оффлайн
Тему перенес в нужный раздел
 
m[R]inoДата: Понеділок, 30.05.2011, 19:03 | Сообщение # 6



m[R]ino
Центурион
Группа: Пользователи
Сообщений: 388

Замечания:

Оффлайн
HeisenBeRG, спасибо))
 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz