РЕШЕНО Выплаты не заносятся в БД

Аргон

Участник
В общем проблема такая. Делаю выплату на Payeer, очень долго грузится страница, потом показывает ошибку о том что время ожидания истекло (504 Gateway Time out). При этом выплата проходит, с кошелька деньги списываются. Но они не списываются с пользователя в БД и вообще никакая инфа о выплатах в бд не заносится. Подскажите в чем проблема?

Вот код
PHP:
<?PHP
$_OPTIMIZATION["title"] = "Payeer выплата";
$usid = $_SESSION["user_id"];
$usname = $_SESSION["user"];

$db->Query("SELECT * FROM db_users_a, db_users_b WHERE db_users_a.id = db_users_b.id AND db_users_a.id = '$user_id'");
$prof_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 = 1;

?>
<?PHP
 
    function ViewPurse($purse){
      
    if( substr($purse,0,1) != "P" ) return false;
if( !preg_match("/^[0-9]{7,8}$/", 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($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+1)){
                                  
                                  
                                  
                                    $arTransfer = $payeer->transfer(array(
                                    'curIn' => 'RUB', // счет списания
                                    'sum' => $sum_pay, // сумма получения
                                    'curOut' => 'RUB', // валюта получения
                                    'to' => $purse, // получатель (email)
                                    //'to' => '+71112223344',  // получатель (телефон)
                                    //'to' => 'P1000000',  // получатель (номер счета)
                                    'comment' => iconv('windows-1251', 'utf-8', "Выплата {$sum} руб. с проекта OpenSeason.biz")
                                    //'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><div class='success'>Выплата успешно произведена</div></center><BR />";
                                          
                                        }
                                        else
                                        {
                                      
                                            echo "<center><div class='error'>Тех. работы! Попробуйте позже</div></center><BR />"; 
                                      
                                        }
                                  
                                  
                                    }else echo "<center><div class='error'>Ошибка! Попробуйте заказать выплату через некоторое время</div></center><BR />";
                                  
                                }else echo "<center><div class='error'>Не удалось выплатить! Попробуйте позже</div></center><BR />";
                              
                            }else echo "<center><div class='error'>Не удалось выплатить! Попробуйте позже</div></center><BR />";
                          
                              
                        }else echo "<center><div class='error'>У вас имеются необработанные заявки. Дождитесь их выполнения</div></center><BR />";
                          
                      
                    }else echo "<center><div class='error'>Вы указали больше, чем имеется на вашем счету</div></center><BR />";
              
                }else echo "<center><div class='error'>Минимальная сумма для выплаты составляет {$minPay} Золотая монета.</div></center><BR />";
      
        }else echo "<center><div class='error'>Неверный формат кошелька</div></center><BR />";
      
    }
?>
 
Последнее редактирование модератором:

Аргон

Участник
Разобрался.
Если у кого та же проблема, решение такое.
В classes/_class rfs_payeer.php в Function: getResponse нужно написать ваш домен вместо того что там написано в э
той строке @fopen("http://ваш домен/","r");
 

pligin

Команда форума
Администратор
Разобрался.
Если у кого та же проблема, решение такое.
В classes/_class rfs_payeer.php в Function: getResponse нужно написать ваш домен вместо того что там написано в э
той строке @fopen("http://ваш домен/","r");
ты что-то путаешь
эта функция получает информацию с сервера Payeer
У тебя что-то модифицировано и, скорее всего, для того, чтобы получать информацию с твоей игры, а точнее выводить деньги.
Функция должна выглядеть так
PHP:
/*======================================================================*\
    Function:    getResponse
    Descriiption: Получение ответа от сервера
    \*======================================================================*/
    private function getResponse($arPost)
    {
        if (!function_exists('curl_init'))
        {
            die('curl library not installed');
            return false;
        }

        if ($this->isAuth())
        {
            $arPost = array_merge($arPost, $this->auth);
        }
        $data = array();
        foreach ($arPost as $k => $v)
        {
            $data[] = urlencode($k) . '=' . urlencode($v);
        }
        $data[] = 'language=' . $this->language;
        $data = implode('&', $data);
    
        $handler  = curl_init();
        curl_setopt($handler, CURLOPT_URL, $this->url);
        curl_setopt($handler, CURLOPT_HEADER, 0);
        curl_setopt($handler, CURLOPT_POST, true);
        curl_setopt($handler, CURLOPT_POSTFIELDS, $data);
        curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($handler, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($handler, CURLOPT_USERAGENT, $this->agent);
        curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
        
        $content = curl_exec($handler);
        //print_r($content);
        
        $arRequest = curl_getinfo($handler);
        //print_r($arRequest);
        
        curl_close($handler);
        if (strpos($content, '{') !== false) $content = $this->objectToArray(json_decode($content));
        return $content;
    }
Все параметры в нее передаются непосредственно из кода
 

pligin

Команда форума
Администратор
В общем проблема такая. Делаю выплату на Payeer, очень долго грузится страница, потом показывает ошибку о том что время ожидания истекло (504 Gateway Time out). При этом выплата проходит, с кошелька деньги списываются. Но они не списываются с пользователя в БД и вообще никакая инфа о выплатах в бд не заносится. Подскажите в чем проблема?

Вот код
PHP:
<?PHP
$_OPTIMIZATION["title"] = "Payeer выплата";
$usid = $_SESSION["user_id"];
$usname = $_SESSION["user"];

$db->Query("SELECT * FROM db_users_a, db_users_b WHERE db_users_a.id = db_users_b.id AND db_users_a.id = '$user_id'");
$prof_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 = 1;

?>
<?PHP
 
    function ViewPurse($purse){
     
    if( substr($purse,0,1) != "P" ) return false;
if( !preg_match("/^[0-9]{7,8}$/", 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($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+1)){
                                 
                                 
                                 
                                    $arTransfer = $payeer->transfer(array(
                                    'curIn' => 'RUB', // счет списания
                                    'sum' => $sum_pay, // сумма получения
                                    'curOut' => 'RUB', // валюта получения
                                    'to' => $purse, // получатель (email)
                                    //'to' => '+71112223344',  // получатель (телефон)
                                    //'to' => 'P1000000',  // получатель (номер счета)
                                    'comment' => iconv('windows-1251', 'utf-8', "Выплата {$sum} руб. с проекта OpenSeason.biz")
                                    //'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><div class='success'>Выплата успешно произведена</div></center><BR />";
                                         
                                        }
                                        else
                                        {
                                     
                                            echo "<center><div class='error'>Тех. работы! Попробуйте позже</div></center><BR />";
                                     
                                        }
                                 
                                 
                                    }else echo "<center><div class='error'>Ошибка! Попробуйте заказать выплату через некоторое время</div></center><BR />";
                                 
                                }else echo "<center><div class='error'>Не удалось выплатить! Попробуйте позже</div></center><BR />";
                             
                            }else echo "<center><div class='error'>Не удалось выплатить! Попробуйте позже</div></center><BR />";
                         
                             
                        }else echo "<center><div class='error'>У вас имеются необработанные заявки. Дождитесь их выполнения</div></center><BR />";
                         
                     
                    }else echo "<center><div class='error'>Вы указали больше, чем имеется на вашем счету</div></center><BR />";
             
                }else echo "<center><div class='error'>Минимальная сумма для выплаты составляет {$minPay} Золотая монета.</div></center><BR />";
     
        }else echo "<center><div class='error'>Неверный формат кошелька</div></center><BR />";
     
    }
?>
все операции с балансом пользователя происходят в файле выплат: если сервер вернул "успешно", то списываем средства, если вернул "не успешно" - средства не списываем, заносим ошибку
 

pligin

Команда форума
Администратор
Пример обработки выплаты (не перевод, а выплата - это две разные функции)
PHP:
if ($initOutput){
            $historyId = $payeer->output();
             if ($historyId > 0){
             # Снимаем с пользователя
                            $db->Query("UPDATE db_users_b SET money_p = money_p - '$sum', payment_sum = payment_sum + '$sum_pay', pay_points = pay_points - '$sum_pay' WHERE id = '$user_id'");              
                             # Вставляем запись в выплаты
                             $da = time();
                             $dd = $da + 60*60*24*15;
                             $ppid = $historyId;
                             $db->Query("INSERT INTO db_payment (user, user_id, purse, sum, valuta, serebro, payment_id, date_add, status) VALUES ('$usname','$user_id','$purse','$sum_pay','RUB', '$sum','$ppid','".time()."', '3')");
                             $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 />";
                             $db->Query("SELECT * FROM db_users_b WHERE id = '$user_id' LIMIT 1");
                             $user_data = $db->FetchArray();
  }else{
echo '<center><font color = "red"><b>Ошибка ['.print_r($payeer->getErrors(), true).'] - попробуйте через 10-15 секунд или сообщите о ней администратору!</b></font></center><BR />'; }
                    }
 

Аргон

Участник
ты что-то путаешь
эта функция получает информацию с сервера Payeer
У тебя что-то модифицировано и, скорее всего, для того, чтобы получать информацию с твоей игры, а точнее выводить деньги.
Функция должна выглядеть так
PHP:
/*======================================================================*\
    Function:    getResponse
    Descriiption: Получение ответа от сервера
    \*======================================================================*/
    private function getResponse($arPost)
    {
        if (!function_exists('curl_init'))
        {
            die('curl library not installed');
            return false;
        }

        if ($this->isAuth())
        {
            $arPost = array_merge($arPost, $this->auth);
        }
        $data = array();
        foreach ($arPost as $k => $v)
        {
            $data[] = urlencode($k) . '=' . urlencode($v);
        }
        $data[] = 'language=' . $this->language;
        $data = implode('&', $data);
   
        $handler  = curl_init();
        curl_setopt($handler, CURLOPT_URL, $this->url);
        curl_setopt($handler, CURLOPT_HEADER, 0);
        curl_setopt($handler, CURLOPT_POST, true);
        curl_setopt($handler, CURLOPT_POSTFIELDS, $data);
        curl_setopt($handler, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($handler, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($handler, CURLOPT_USERAGENT, $this->agent);
        curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
       
        $content = curl_exec($handler);
        //print_r($content);
       
        $arRequest = curl_getinfo($handler);
        //print_r($arRequest);
       
        curl_close($handler);
        if (strpos($content, '{') !== false) $content = $this->objectToArray(json_decode($content));
        return $content;
    }
Все параметры в нее передаются непосредственно из кода


С тем кодом тоже все работает но поменял на ваш, спасибо, тоже все работает.
 
Верх