Автор Тема: дублирующие выплаты при перезагрузке  (Прочитано 44 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Alina1602Автор темы

  • *
  • Оффлайн
  • Дата регистрации: Нояб. 2018
  • Сообщений: 8
  • Страна: ru
  • Репутация +0/-0
  • Пол: Женский
    • Награды
Всем доброго времени суток! При заказе выплаты, если перезагрузить страницу, выплата проходит столько раз, сколько перезагружаешь страницу. все заносится в базу, в статистике так же отражается. Стоит платежный пароль от вискаса, заглушка на первый вывод.
Ответа на этот вопрос на данном форуме не нашла. Пока только учусь, так что ответы типа "выкинь нафиг этот скрипт" - это не ответы. лучше помогите найти причину и устранить

<br/>
<div class="s-bk-lf">
   <div class="acc-title">Заказ выплаты</div>
</div><br/>
<div class="silver-bk">
<BR />
<?PHP
$_OPTIMIZATION["title"] = "Аккаунт - Заказ выплаты";
$usid = $_SESSION["user_id"];
$usname = $_SESSION["user"];


$db->Query("SELECT * FROM db_users_a WHERE id = '$usid' LIMIT 1");
$log_data = $db->FetchArray();

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();

$db->Query("SELECT * FROM db_config WHERE id = '1' LIMIT 1");
$sonfig_site = $db->FetchArray();

$status_array = array( 0 => "Проверяется", 1 => "Выплачивается", 2 => "Отменена", 3 => "Выплачено");

# Минималка серебром!
$minPay = 500;

?>
<b>Выплаты осуществляются в автоматическом режиме и только на платежную систему <a href="http://payeer.com/?partner=19879" target="_BLANK">PAYEER! Процент при выводе составляет 0%</b> <BR /><BR />
<b>Из платежной системы Payeer Вы можете вывести свои средства в автоматическом режиме на все известные платежные системы и международные банки.</b><BR /><BR />
<b>Ссылки на учебные материалы:</b><BR />
 - <a href="http://payeer.com/?partner=8433335" target="_blank">Создание счета в Payeer</a> <BR />
 - <a href="http://payeeer.ru/outpay" target="_blank">Вывод средств из payeer</a> <BR /><BR />

<center><b>Заказ выплаты:</b></center><BR />
<?PHP
# Заглушка от халявщиков
if($user_data["insert_sum"] <= 49.99 ){

?>
<center><font color="red"><b>Выплату могут заказать те кто пополнил счет минимум на 50 рублей!<br></font></center>

<div class="clr"></div>
</div>
<?PHP

return;
}

   function ViewPurse($purse){
      
      if( substr($purse,0,1) != "P" ) return false;
      if( !preg_match("/^[0-9]{10}$/", substr($purse,1)) ) return false;   
      return $purse;
   }
   
   # Заносим выплату
   if(isset($_POST["purse"])){
      
      $purse = ViewPurse($_POST["purse"]);
      $sum = intval($_POST["sum"]);
      $val = "RUB";
      
      if($purse !== false){
         if(($log_data["paypass"]) == ($_POST["paypass"])){
            if($sum >= $minPay){
            
               if($sum <= $user_data["money_p"]){
                  
                  # Проверяем на существующие заявки
                  $db->Query("SELECT COUNT(*) FROM db_payment WHERE user_id = '$usid' AND (status = '0' OR status = '1')");
                  if($db->FetchRow() == 0){
                        
                        
                     ### Делаем выплату ###   
                     $payeer = new rfs_payeer($config->AccountNumber, $config->apiId, $config->apiKey);
                     if ($payeer->isAuth())
                     {
                        
                        $arBalance = $payeer->getBalance();
                        if($arBalance["auth_error"] == 0)
                        {
                           
                           $sum_pay = round( ($sum / $sonfig_site["ser_per_wmr"]), 2);
                           
                           $balance = $arBalance["balance"]["RUB"]["DOSTUPNO"];
                           if( ($balance) >= ($sum_pay+100)){
                           
                           
                           
                           $arTransfer = $payeer->transfer(array(
                           'curIn' => 'RUB', // счет списания
                           'sum' => $sum_pay, // сумма получения
                           'curOut' => 'RUB', // валюта получения
                           'to' => $purse, // получатель (email)
                           //'to' => '+71112223344',  // получатель (телефон)
                           //'to' => 'P1000000000',  // получатель (номер счета)
                           'comment' => iconv('windows-1251', 'utf-8', "Выплата пользователю {$usname} с проекта WM-Farm")
                           //'anonim' => 'Y', // анонимный перевод
                           //'protect' => 'Y', // протекция сделки
                           //'protectPeriod' => '3', // период протекции (от 1 до 30 дней)
                           //'protectCode' => '12345', // код протекции
                           ));
                           
                              if (!empty($arTransfer["historyId"]))
                              {   
                              
                              
                                 # Снимаем с пользователя
                                 $db->Query("UPDATE db_users_b SET money_p = money_p - '$sum' WHERE id = '$usid'");
                                 
                                 # Вставляем запись в выплаты
                                 $da = time();
                                 $dd = $da + 60*60*24*15;
                                 
                                 $ppid = $arTransfer["historyId"];
                                 
                                 $db->Query("INSERT INTO db_payment (user, user_id, purse, sum, valuta, serebro, payment_id, date_add, status)
                                 VALUES ('$usname','$usid','$purse','$sum_pay','RUB', '$sum','$ppid','".time()."', '3')");
                                 
                                 $db->Query("UPDATE db_users_b SET payment_sum = payment_sum + '$sum_pay' WHERE id = '$usid'");
                                 $db->Query("UPDATE db_stats SET all_payments = all_payments + '$sum_pay' WHERE id = '1'");
                                 
                                 echo "<center><font color = 'green'><b>Выплачено!</b></font></center><BR />";
                                 
                              }
                              else
                              {
                              
                                 echo "<center><font color = 'red'><b>Внутренняя ошибка - сообщите о ней администратору!</b></font></center><BR />";   
                              
                              }
                           
                           
                           }else echo "<center><font color = 'red'><b>Внутренняя ошибка - сообщите о ней администратору!</b></font></center><BR />";
                           
                        }else echo "<center><font color = 'red'><b>Не удалось выплатить! Попробуйте позже</b></font></center><BR />";
                        
                     }else echo "<center><font color = 'red'><b>Не удалось выплатить! Попробуйте позже</b></font></center><BR />";
                     
                        
                  }else echo "<center><font color = 'red'><b>У вас имеются необработанные заявки. Дождитесь их выполнения.</b></font></center><BR />";
                     
                  
               }else echo "<center><font color = 'red'><b>Вы указали больше, чем имеется на вашем счету</b></font></center><BR />";
            
            }else echo "<center><b><font color = 'red'>Минимальная сумма для выплаты составляет {$minPay} серебра!</font></b></center><BR />";

                        }else echo "<center><b><font color = 'red'>Вы не указали платежный пароль или он не подходит</font></b><br><a href='/account/config'>Получите платежный пароль</a></center><BR />";
      
      }else echo "<center><b><font color = 'red'>Кошелек Payeer указан неверно! Смотрите образец!</font></b></center><BR />";
      
   }
?>

<form action="" method="post">
<table width="99%" border="0" align="center">
  <tr>
    <td><font color="#000;">Введите кошелек Payeer [Пример: P1304200189]</font>: </td>
   <td><input type="text" name="purse" size="15"/></td>
  </tr>
  <tr>
    <td><font color="#000;">Отдаете серебро для вывода</font> [Мин. 500 серебра]<font color="#000;">:</font> </td>
   <td><input type="text" name="sum" id="sum" value="<?=round($user_data["money_p"]); ?>" size="15" onkeyup="PaymentSum();" /></td>
  </tr>
  <tr>
    <td><font color="#000;">Введите Ваш платежный пароль</font>: </td>
    <td>
    <input type="text" name="paypass" size="15"/></td>
  </tr>
  <tr>
    <td><font color="#000;">Получаете <span id="res_val"></span></font><font color="#000;">:</font> </td>
   <td>
   <input type="text" name="res" id="res_sum" value="0" size="15" disabled="disabled"/>
   <input type="hidden" name="per" id="RUB" value="<?=$sonfig_site["ser_per_wmr"]; ?>" disabled="disabled"/>
   <input type="hidden" name="per" id="min_sum_RUB" value="0.5" disabled="disabled"/>
   <input type="hidden" name="val_type" id="val_type" value="RUB" />
   </td>
  </tr>
  <tr>
    <td colspan="2" align="center"><input type="submit" name="swap" value="Заказать выплату" style="height: 30px; margin-top:10px;" /></td>
  </tr>
</table>
</form>
<script language="javascript">PaymentSum(); SetVal();</script>



<table cellpadding='3' cellspacing='0' border='0' bordercolor='#336633' align='center' width="99%">
  <tr>
    <td colspan="5" align="center"><h4>Последние 10 выплат</h4></td>
    </tr>
  <tr>
    <td align="center" class="m-tb">Серебро</td>
    <td align="center" class="m-tb">Получаете</td>
   <td align="center" class="m-tb">Кошелек</td>
   <td align="center" class="m-tb">Дата</td>
   <td align="center" class="m-tb">Статус</td>
  </tr>
  <?PHP
 
  $db->Query("SELECT * FROM db_payment WHERE user_id = '$usid' ORDER BY id DESC LIMIT 20");
 
   if($db->NumRows() > 0){
 
        while($ref = $db->FetchArray()){
      
      ?>
      <tr class="htt">
          <td align="center"><?=$ref["serebro"]; ?></td>
          <td align="center"><?=sprintf("%.2f",$ref["sum"] - $ref["comission"]); ?> <?=$ref["valuta"]; ?></td>
          <td align="center"><?=$ref["purse"]; ?></td>
         <td align="center"><?=date("d.m.Y",$ref["date_add"]); ?></td>
          <td align="center"><?=$status_array[$ref["status"]]; ?></td>
        </tr>
      <?PHP
      
      }
 
   }else echo '<tr><td align="center" colspan="5">Нет записей</td></tr>'
 
  ?>

 
</table><div class="clr"></div>      
</div>
 

maks161

  • *
  • *
  • Оффлайн
  • Награды Три года на форуме !!! За финансовую помощь форуму !!! Более 1500 сообщений Репутация более 10 Благодарность от форума Более 50 созданных тем За время в онлайне на форуме
  • Дата регистрации: Янв. 2016
  • Расположение: Ростов-на-Дону
  • Возраст: 35
  • Сообщений: 1606
  • Страна: ru
  • Поблагодарили: 112 раз(а)
  • Репутация +18/-5
  • Пол: Мужской
  • Дата рождения:1984-03-10
    • Награды
дублирующие выплаты при перезагрузке
« Ответ #1 : 14 Марта 2019, 09:14:19 »
Это не касяк. Это так на всех скриптах ФФ. Надо после выплаты уходить с страницы и все. Если принципиально то поищи здесь была аналогичная тема если не удалили. Там есть вроде решение.
 

Alina1602Автор темы

  • *
  • Оффлайн
  • Дата регистрации: Нояб. 2018
  • Сообщений: 8
  • Страна: ru
  • Репутация +0/-0
  • Пол: Женский
    • Награды
дублирующие выплаты при перезагрузке
« Ответ #2 : 14 Марта 2019, 09:27:52 »
спасибо за совет, но не нашла здесь.
Получается надо сделать так, чтобы после получения выплаты сразу на главную перекидывало
 

maks161

  • *
  • *
  • Оффлайн
  • Награды Три года на форуме !!! За финансовую помощь форуму !!! Более 1500 сообщений Репутация более 10 Благодарность от форума Более 50 созданных тем За время в онлайне на форуме
  • Дата регистрации: Янв. 2016
  • Расположение: Ростов-на-Дону
  • Возраст: 35
  • Сообщений: 1606
  • Страна: ru
  • Поблагодарили: 112 раз(а)
  • Репутация +18/-5
  • Пол: Мужской
  • Дата рождения:1984-03-10
    • Награды
дублирующие выплаты при перезагрузке
« Ответ #3 : 14 Марта 2019, 10:57:21 »
спасибо за совет, но не нашла здесь.
Получается надо сделать так, чтобы после получения выплаты сразу на главную перекидывало
Зачем не надо просто после того как нажимаешь выплатить сам переходишь на другую страницу. Так как после выплаты там больше делать нечего люди уходят просто с неё не кто её не будет перезагружать сидеть смысл от этого. У меня две фермы больше года работали и никаких жалоб не было или проблем.
 

Alina1602Автор темы

  • *
  • Оффлайн
  • Дата регистрации: Нояб. 2018
  • Сообщений: 8
  • Страна: ru
  • Репутация +0/-0
  • Пол: Женский
    • Награды
дублирующие выплаты при перезагрузке
« Ответ #4 : 14 Марта 2019, 10:59:34 »
В общем кому может быть понадобится, решила проблему вот такая строчка добавленная в паймент:

header( 'Refresh: 0.5; url=http://вашСайт/account/payment' );

просто редирект на эту же страницу с задержкой 0.5 сек

Добавлено сообщение: 14 Марта 2019, 11:03:19
Зачем не надо просто после того как нажимаешь выплатить сам переходишь на другую страницу. Так как после выплаты там больше делать нечего люди уходят просто с неё не кто её не будет перезагружать сидеть смысл от этого. У меня две фермы больше года работали и никаких жалоб не было или проблем.

Лучше всегда перестраховаться. я вот раньше об этом не знала и не использовала, а теперь ради интереса лазила по сайтам и смотрела эту уязвимость. Думаю, что не стоит мошенникам оставлять такую возможность
 

shans5

  • *
  • *
  • Оффлайн
  • Награды Репутация более 50 Более 3000 сообщений Три года на форуме !!! Более 500 созданных тем Бывает груб к участникам форума. За время в онлайне на форуме
  • Дата регистрации: Сен. 2015
  • Расположение: Регион 58
  • Возраст: 39
  • Сообщений: 3477
  • Страна: ru
  • Поблагодарили: 701 раз(а)
  • Репутация +66/-5
  • Пол: Мужской
  • Всё только начинается !!!
  • Дата рождения:1979-06-30
    • Награды
дублирующие выплаты при перезагрузке
« Ответ #5 : 14 Марта 2019, 11:30:47 »
Не смотрите на проект как админ, смотрите как обычный пользователь...
У вас, как у админа 10000000000  серебра на вывод ))))))))

У обычного юзера накопилось 500 серебра на вывод- он заказывает выплату,
На балансе останется ноль серебра..
При обновлении страницы будет:
Не достаточно серебра на вывод
Подвергнуть критике, может любой.
Создать то,что будет подвергнуто критике,дано не каждому.

 
Пользователи, которые поблагодарили этот пост: maks161

maks161

  • *
  • *
  • Оффлайн
  • Награды Три года на форуме !!! За финансовую помощь форуму !!! Более 1500 сообщений Репутация более 10 Благодарность от форума Более 50 созданных тем За время в онлайне на форуме
  • Дата регистрации: Янв. 2016
  • Расположение: Ростов-на-Дону
  • Возраст: 35
  • Сообщений: 1606
  • Страна: ru
  • Поблагодарили: 112 раз(а)
  • Репутация +18/-5
  • Пол: Мужской
  • Дата рождения:1984-03-10
    • Награды
дублирующие выплаты при перезагрузке
« Ответ #6 : 14 Марта 2019, 13:23:35 »
Я вам два раза написал что  это не уязвимость и не чего вы не сможете с этим сделать. Никогда в жизни не сломает если вам так угодно. Все фермы так работают и ни у кого не было никогда проблем.
 
Теги:
 

Имя пользователя:
Пароль:
Session: