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

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

Alina1602Автор темы

  • *
  • Оффлайн
  • Награды Более 4 лет на форуме !!!
  • Дата регистрации: Нояб. 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;

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

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

?>
<center><font color="red">Выплату могут заказать те кто пополнил счет минимум на 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'>Выплачено!</font></center><BR />";
                                 
                              }
                              else
                              {
                              
                                 echo "<center><font color = 'red'>Внутренняя ошибка - сообщите о ней администратору!</font></center><BR />";   
                              
                              }
                           
                           
                           }else echo "<center><font color = 'red'>Внутренняя ошибка - сообщите о ней администратору!</font></center><BR />";
                           
                        }else echo "<center><font color = 'red'>Не удалось выплатить! Попробуйте позже</font></center><BR />";
                        
                     }else echo "<center><font color = 'red'>Не удалось выплатить! Попробуйте позже</font></center><BR />";
                     
                        
                  }else echo "<center><font color = 'red'>У вас имеются необработанные заявки. Дождитесь их выполнения.</font></center><BR />";
                     
                  
               }else echo "<center><font color = 'red'>Вы указали больше, чем имеется на вашем счету</font></center><BR />";
            
            }else echo "<center><font color = 'red'>Минимальная сумма для выплаты составляет {$minPay} серебра!</font></center><BR />";

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

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

Alina1602Автор темы

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

maks161

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

Alina1602Автор темы

  • *
  • Оффлайн
  • Награды Более 4 лет на форуме !!!
  • Дата регистрации: Нояб. 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

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

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

maks161

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