Ребят, приветствую. На сайте есть функция вывода средств. Потом обнаружил, что один пользователь каким-то образом пополнял 1 раз, а выводил эти же средства по 2 раза.(именно по 2, ни больше ни меньше). Вот у меня и возник вопрос, как он смог это сделать, если у меня идет сначала списание с баланса, а потом сам вывод(в случае ошибки вывода возвращаю на баланс). У меня есть мысль, но не уверен в её правильности. Если я например вставлю функцию sleep с рандомным числом от 0 до 1, поможет ли это устранить эту проблему? Или это решается как-то по другому?
if ( $_POST['amount'] <= $balance ) {
$payeer = new CPayeer($accountNumber, $apiId, $apiKey);
if ($payeer->isAuth()) {
$bal_ret = $balance;
$balance_res = $balance - $_POST['amount'];
mysqli_query($CONNECT, "UPDATE `users` SET `balance` = $balance_res WHERE `id` = '$us_id'");
$wallet_send = $_POST['payeer'];
$arTransfer = $payeer->transfer(array('curIn' => $m_curr,'sum' => $_POST['amount'],'curOut' => $m_curr,'to' => $wallet_send,'comment' => 'Вывод средств',));
if (empty($arTransfer['errors'])) {
MessageSend(2, 'Средства успешно выведены', '/cashout');
} else {
mysqli_query($CONNECT, "UPDATE `users` SET `balance` = $bal_ret WHERE `id` = '$us_id'");
MessageSend(1, 'Средства не удалось вывести. Пожалуйста, попробуйте позже.', '/cashout');
}
} else {
MessageSend(1, 'Что-то пошло не так.', '/cashout');
}
} else {
MessageSend(1, 'Недостаточно средств', '/cashout');
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей