Форум

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

бонус рефереру от пополнения

Страница 1 из 2Далее

Всем привет. Делаю на основе старого доброго суфаста игру.

Вот интересует вопрос, как сделать, чтобы при пополнении рефереру шли рефские за пополнение? Платежная система payeer.

Файл обработчик прикрепил.

 

Пункт 1.

20-ая строка скрипта:

$sum=$_POST['m_amount']; //Сумма, поступившая от клиента

делаешь ниже новую строку и добавляешь:

$bonus=$sum*0.05;
$refbonus=round($bonus, 2);

Тут высчитываешь рефереру бонус в процентах. Сумму пополнения умножаем на нужный процент(5%=0.05 10%=0.1). Измени под себя. Вторая строка - округляем полученный бонус до двух цифр после запятой(из 1.2449 получится 1.24, из 1.2450 получится 1.25)

 

Пункт 2.

Потом у тебя идут уже такие строки (31 и 32 в оригинале):

$sql="update tb_users set money=money+'$sum' where username='$user'";
mysql_query($sql);

Ниже делаешь пару новых строк отступа и вставляешь:

$sql=mysql_query("select referer from tb_users where username='$user'");
$ref=mysql_fetch_assoc($sql);
$referer=$ref["referer"];
mysql_query("update tb_users set money=money+'$refbonus' where username='$referer'");

Обрати внимание на первой строке в запросе выделил referer, тебе нужно посмотреть как у тебя называется в базе поле в котором хранится реферер юзера и подставить его.

 

Пункт 3.

И ещё ниже у тебя видимо статистика пишется какая сумма вообще в проекте, сюда тоже надо подписать процент который подарил рефереру. После вот таких строк(37 и 38 в оригинале):

$sql="UPDATE tb_config SET rezerv=rezerv+'$sum' WHERE id = '1'";
mysql_query($sql);

Добавляешь вот этот код:

mysql_query("UPDATE tb_config SET rezerv=rezerv+'$refbonus' WHERE id = '1'");

 

Пункт 4.

Хоть вроде визуально в скрипт не подкопаться с подменой данных даже зная ключ и адрес скрипта(проверяется общая подпись). Меня как то коробит от того что $_POST-ы у тебя в чистом виде летят в базу. Я бы что нибудь вот такое в первые строки скрипта добавил:

if (!is_numeric($id) && !is_numeric($sum) && $sum<0) { echo $_POST['m_orderid']."|error"; exit(); }

 

Спасибо за ответ!

И какие ещё данные лучше фильтровать и каким образом?

Цитата: reklamawmb от 30.12.2018, 23:26

Спасибо за ответ!

И какие ещё данные лучше фильтровать и каким образом?

Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.

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

По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.

Цитата: WmRush от 31.12.2018, 16:15
Цитата: reklamawmb от 30.12.2018, 23:26

Спасибо за ответ!

И какие ещё данные лучше фильтровать и каким образом?

Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.

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

По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.

Сравнивать как steam написал?? В 4 пункте.

Цитата: reklamawmb от 01.01.2019, 01:12
Цитата: WmRush от 31.12.2018, 16:15
Цитата: reklamawmb от 30.12.2018, 23:26

Спасибо за ответ!

И какие ещё данные лучше фильтровать и каким образом?

Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.

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

По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.

Сравнивать как steam написал?? В 4 пункте.

Примерно вот так. Под себя подпилишь)

if($row['amount'] < $_POST['m_amount'])
exit("Не верная сумма");
if($_POST['m_curr'] != "RUB")
exit("Не верная валюта");
if($row['status'] != 0)
exit("Счет уже был оплачен");

 

Цитата: steam от 30.12.2018, 06:14

Все сделал, вроде как работает. + дописал еще немного. Начал понемногу вникать в php.  Оставил много-много комментариев в файле.

Перезалил файл, есть еще замечания какие? твою проверку сделал.  Сижу вот и думаю, как остальные $_POST проверить.

Цитата: WmRush от 01.01.2019, 13:00

Примерно вот так. Под себя подпилишь)

И после чего и где это вставлять?

WmRush, у него там генерируется подпись и сравнивается что пришло и что в базе, фактически там не подкопаться никак из-за того что в начале всего этого POST-ы шифруются(даже если подкинуть левого кода через post то он зашифруется и не выполнится) и сравниваются на совпадение, при том у себя в базе он формирует сам. Там тяжело подкопаться к этому. Только если подписи совпадают уже дальше платёж идёт, извлекаются суммы из POST-ов

А как можно попытаться подменить значение?

Цитата: steam от 01.01.2019, 21:12

WmRush, у него там генерируется подпись и сравнивается что пришло и что в базе, фактически там не подкопаться никак из-за того что в начале всего этого POST-ы шифруются(даже если подкинуть левого кода через post то он зашифруется и не выполнится) и сравниваются на совпадение, при том у себя в базе он формирует сам. Там тяжело подкопаться к этому. Только если подписи совпадают уже дальше платёж идёт, извлекаются суммы из POST-ов

Я вот нажал пополнить баланс на 1 рубль, навел на кнопку, нажал просмотреть код, в значении

<input type="hidden" name="m_amount" value="1.00">

изменил 1.00 на 100, и нажал оплатить, вылезло окошко Неверная подпись m_sign

и в браузере была строчка m_orderid=11044000&m_amount=100.00&m_curr=RUB

Страница 1 из 2Далее
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля