бонус рефереру от пополнения
Цитата: reklamawmb от 29.12.2018, 13:58Всем привет. Делаю на основе старого доброго суфаста игру.
Вот интересует вопрос, как сделать, чтобы при пополнении рефереру шли рефские за пополнение? Платежная система payeer.
Файл обработчик прикрепил.
Всем привет. Делаю на основе старого доброго суфаста игру.
Вот интересует вопрос, как сделать, чтобы при пополнении рефереру шли рефские за пополнение? Платежная система payeer.
Файл обработчик прикрепил.
Цитата: steam от 30.12.2018, 06:14Пункт 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(); }
Пункт 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Спасибо за ответ!
И какие ещё данные лучше фильтровать и каким образом?
Спасибо за ответ!
И какие ещё данные лучше фильтровать и каким образом?
Цитата: WmRush от 31.12.2018, 16:15Цитата: reklamawmb от 30.12.2018, 23:26Спасибо за ответ!
И какие ещё данные лучше фильтровать и каким образом?
Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.
А лучше использовать подготовленные запросы и проблема с инъекциями отпадает. Но и все равно это не стоит пускать на самотек и все же фильтровать данные.
По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.
Цитата: reklamawmb от 30.12.2018, 23:26Спасибо за ответ!
И какие ещё данные лучше фильтровать и каким образом?
Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.
А лучше использовать подготовленные запросы и проблема с инъекциями отпадает. Но и все равно это не стоит пускать на самотек и все же фильтровать данные.
По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.
Цитата: reklamawmb от 01.01.2019, 01:12Цитата: WmRush от 31.12.2018, 16:15Цитата: reklamawmb от 30.12.2018, 23:26Спасибо за ответ!
И какие ещё данные лучше фильтровать и каким образом?
Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.
А лучше использовать подготовленные запросы и проблема с инъекциями отпадает. Но и все равно это не стоит пускать на самотек и все же фильтровать данные.
По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.
Сравнивать как steam написал?? В 4 пункте.
Цитата: WmRush от 31.12.2018, 16:15Цитата: reklamawmb от 30.12.2018, 23:26Спасибо за ответ!
И какие ещё данные лучше фильтровать и каким образом?
Все данные приходящие из вне, нужно обрабатывать, никогда нельзя оставлять в чистом виде, если ты конечно сам не уверен в том что переменная в любом случае чистая и валидная.
А лучше использовать подготовленные запросы и проблема с инъекциями отпадает. Но и все равно это не стоит пускать на самотек и все же фильтровать данные.
По поводу твоего обработчика: еще сравнивай суммы, валюту и проверяй ID платежа на уже исполненный платеж.
Сравнивать как steam написал?? В 4 пункте.
Цитата: WmRush от 01.01.2019, 13:00Цитата: 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("Счет уже был оплачен");
Цитата: 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("Счет уже был оплачен");
Цитата: reklamawmb от 01.01.2019, 19:34Цитата: steam от 30.12.2018, 06:14Все сделал, вроде как работает. + дописал еще немного. Начал понемногу вникать в php. Оставил много-много комментариев в файле.
Перезалил файл, есть еще замечания какие? твою проверку сделал. Сижу вот и думаю, как остальные $_POST проверить.
Цитата: WmRush от 01.01.2019, 13:00Примерно вот так. Под себя подпилишь)
И после чего и где это вставлять?
Цитата: steam от 30.12.2018, 06:14
Все сделал, вроде как работает. + дописал еще немного. Начал понемногу вникать в php. Оставил много-много комментариев в файле.
Перезалил файл, есть еще замечания какие? твою проверку сделал. Сижу вот и думаю, как остальные $_POST проверить.
Цитата: WmRush от 01.01.2019, 13:00Примерно вот так. Под себя подпилишь)
И после чего и где это вставлять?
Цитата: steam от 01.01.2019, 21:12WmRush, у него там генерируется подпись и сравнивается что пришло и что в базе, фактически там не подкопаться никак из-за того что в начале всего этого POST-ы шифруются(даже если подкинуть левого кода через post то он зашифруется и не выполнится) и сравниваются на совпадение, при том у себя в базе он формирует сам. Там тяжело подкопаться к этому. Только если подписи совпадают уже дальше платёж идёт, извлекаются суммы из POST-ов
WmRush, у него там генерируется подпись и сравнивается что пришло и что в базе, фактически там не подкопаться никак из-за того что в начале всего этого POST-ы шифруются(даже если подкинуть левого кода через post то он зашифруется и не выполнится) и сравниваются на совпадение, при том у себя в базе он формирует сам. Там тяжело подкопаться к этому. Только если подписи совпадают уже дальше платёж идёт, извлекаются суммы из POST-ов
Цитата: reklamawmb от 01.01.2019, 21:29А как можно попытаться подменить значение?
А как можно попытаться подменить значение?
Цитата: reklamawmb от 01.01.2019, 21:38Цитата: steam от 01.01.2019, 21:12WmRush, у него там генерируется подпись и сравнивается что пришло и что в базе, фактически там не подкопаться никак из-за того что в начале всего этого 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
Цитата: steam от 01.01.2019, 21:12WmRush, у него там генерируется подпись и сравнивается что пришло и что в базе, фактически там не подкопаться никак из-за того что в начале всего этого 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