// Перед отправкой юзера в форму отплаты freekassa, нужно создать запись в таблице `deposits`
// Указать там user_id и status = 0 (внизу будет использоваться)
// ====================== Обработчик платежа ===================== //
if (!in_array(getIP(), array('136.243.38.147', '136.243.38.149', '136.243.38.150', '136.243.38.151', '136.243.38.189', '136.243.38.108'))) {
die("hacking attempt! ip:" . getIP());
}
$sign = md5($merchant_id.':'.$_REQUEST['AMOUNT'].':'.$merchant_secret.':'.$_REQUEST['MERCHANT_ORDER_ID']);
if ($sign != $_REQUEST['SIGN']) {
die('Wrong sign');
}
// $bsd - Данные от БД ( выше указывались данные от БД )
$freekassa_order_id = $_POST['intid'];
$order_id = $_POST['MERCHANT_ORDER_ID'];
$amount = $_POST['AMOUNT'];
// получаем строку заказа с БД
$order = mysqli_query($bsd, "SELECT id, user_id, status FROM `deposits` WHERE id='$order_id'");
if ($order->num_rows != 1) {
die('Unexpected order');
}
$order = mysqli_fetch_row($order);
// тут лучше проверить данные типо суммы заказа, но опущу этот момент
// status может быть 1-выполнено, 0-в процессе, 2-ошибка (или вообще что хотите)
if ($order['status'] !== 1) {
// пополняем баланс только в случае когда заказ не завершен, чтобы не пополнить его несколько раз
// такие штуки лучше через транзакцию пропускать, но я хз как это делается на PHP =)
// но в случае если без транзакции, сначала обновляем статус заказа
// лучше потом разобраться почему баланс не пополнился, чем пополнить баланс, а статус оставить "в процессе"
mysqli_query($bsd, "UPDATE `deposits` SET `status` = '1' WHERE id='$order_id'");
mysqli_query($bsd, "UPDATE `users` SET `balance` = `balance` + $amount WHERE id='$order['user_id']'");
}
die('YES');
// ================================================================ //