Вход Регистрация
Файл: upload/core/functions/payment.php
Строк: 72
<?php
function InsertPay($usId$amount)
{
    
dbquery("START TRANSACTION");

    
// 1. Проверяем пользователя
    
$us FetchAssoc(dbquery("SELECT * FROM users WHERE id = ? FOR UPDATE", [$usId]));
    if (!
$us) {
        
dbquery("ROLLBACK");
        return 
false;
    }
    
    
$order OrderGenKey();

    
// 2. Создаём запись о платеже
    
if (function_exists('ModulePay')) {
        
insertTransaction($amount$usId211$order);
    }
    
    
dbquery("COMMIT");

    
// 3. Передаём управление модулю
    
if (function_exists('ModulePay')) {
        
ModulePay($order$us$amount);
    } else {
        
showAlert('Ошибка''fail''Модуль платежей не найден');
        
ReloadPage();
        exit;
    }

    return 
true;
}


function 
InsertPayOut($us$requisites$summ$order$stade$commission)
{
    
// 1. Начинаем транзакцию
    
dbquery("START TRANSACTION");

    
// 2. Блокируем строку пользователя (исключает параллельные запросы)
    
$usId FetchAssoc(dbquery("SELECT `id`, `k_money` FROM `users` WHERE id=? FOR UPDATE", [$us]));

    if (!
$usId) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 3. Проверяем баланс
    
if ($summ getAvailableBalance($usId['id'], $usId['k_money'])) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 5. Пытаемся создать payout
    
$insert dbquery("INSERT INTO payout SET summ=?, us=?, k_time=?, stade=?, k_order=?, requisites=?, commiss=?, answer=?", [$summ$ustime(), $stade$order$requisites$commission'']);

    if (!
$insert) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 6. Создаём транзакцию и выполняем списание
    
insertTransaction($summ$us202$order);
    
$payoutMoney dbquery("UPDATE users SET k_money = k_money - ? WHERE id = ?", [$summ$us]);
    
    if (!
$payoutMoney) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 8. Фиксируем
    
dbquery("COMMIT");

    
ReloadPage();
    exit();
}

function 
ConfirmPayout($payoutId)
{
    
dbquery("START TRANSACTION");

    
// 1. Получаем payout в статусе 0 (ожидание)
    
$po FetchAssoc(dbquery("SELECT * FROM payout WHERE id = ? AND stade = 0 FOR UPDATE", [$payoutId]));

    if (!
$po) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 2. Получаем пользователя
    
$us FetchAssoc(dbquery("SELECT * FROM users WHERE id = ?", [$po['us']]));
    if (!
$us) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 3. Считаем комиссию и сумму к выплате
    
$commissionData Commission($po['summ'], $po['commiss']);
    
$commiss $commissionData['commission'];
    
$userProfit $commissionData['profit']; // сумма, которую нужно отправить на карту

    
dbquery("COMMIT");

    
// 4. Передаём управление модулю выплат
    
    // Модуль сам делает выплату, обновляет payout, транзакции и комиссию    
    
if (function_exists('ModulePayout')) {
        
ModulePayout($po$us$userProfit$commiss);
    } else {
        
updateTransactions($po['us'], $po['k_order'], 012);
        
showAlert('Ошибка''fail''Модуль платежей не найден');
        
ReloadPage();
        exit;
    }

    return 
true;
}

function 
DenyPayout($payoutId$info_action)
{
    
// 1. Начинаем транзакцию
    
dbquery("START TRANSACTION");

    
// 2. Получаем payout в статусе 0 (ожидание)
    
$po FetchAssoc(dbquery("SELECT * FROM payout WHERE id = ? AND stade = 0 FOR UPDATE", [$payoutId]));

    if (!
$po) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 3. Возвращаем деньги пользователю
    
$payoutMoney dbquery("UPDATE users SET k_money = k_money + ? WHERE id = ?", [$po['summ'], $po['us']]);
    
    if (!
$payoutMoney) {
        
dbquery("ROLLBACK");
        return 
false;
    }
    
    
// 4. Обновляем payout
    
$uppo dbquery("UPDATE payout SET stade = 2, answer=? WHERE id = ? AND stade = 0", [$info_action$po['id']]);

    if (!
$uppo) {
        
dbquery("ROLLBACK");
        return 
false;
    }

    
// 5. Обновляем транзакцию списания (меняем статус на "возврат")
    
updateTransactions($po['us'], $po['k_order'], 412);

    
// 7. Фиксируем изменения
    
dbquery("COMMIT");

    return 
true;
}
?>
Онлайн: 0
Реклама