Вход Регистрация
Файл: public_html/xsolla/xsolla.php
Строк: 161
<?php
/*
Обработчик XSOLLA
Худых Владислав
vk.com/shadrvlad
Распространение и перепродажа запрещена
*/

// проверка ip
function check_ip()
    {
    
$white_ip = array(
        
'94.103.26.177',
        
'94.103.26.178',
        
'94.103.26.179',
        
'94.103.26.180',
        
'94.103.26.181',
        
'94.103.26.182',
        
'159.255.220.241',
        
'159.255.220.242',
        
'159.255.220.243',
        
'159.255.220.244',
        
'159.255.220.245',
        
'159.255.220.246',
        
'159.255.220.247',
        
'159.255.220.248',
        
'159.255.220.249',
        
'159.255.220.250',
        
'159.255.220.251',
        
'159.255.220.252',
        
'159.255.220.253',
        
'159.255.220.254',
        
'185.30.20.17',
        
'185.30.20.18',
        
'185.30.20.19',
        
'185.30.20.20',
        
'185.30.20.21',
        
'185.30.20.22',
        
'185.30.21.17',
        
'185.30.21.18',
        
'185.30.21.19',
        
'185.30.21.20',
        
'185.30.21.21',
        
'185.30.21.22'
        
);
    if (!
in_array($_SERVER['REMOTE_ADDR'], $white_ip)) return false;
    return 
true;
}

// ответ для xsolla
function response($id 400$code ''$message '')
    {
    
header ("HTTP/1.1 $id");
    
$json = array("error" => array("code" => $code"message" => $message));
    echo 
json_encode($json);
    exit;
    }

// проверка существования игрока
function check_user($id)
    {
    global 
$db;
    
$id abs(intval($id));

    if (
$id == 0) return false;

    
$sql $db->prepare('SELECT COUNT(*) FROM `users` WHERE `id` = ? LIMIT 1');
    
$sql->execute([$id]);
    if (
$sql->fetchColumn() > 0) return true;

    return 
false;
    }

// проверка подписи
function check_sign($req$xsolla$sign)
    {
    
$sign_my 'Signature '.sha1($req.$xsolla);

    if (
$sign_my != $sign) return false;
    return 
true;
    }

// успешный платеж
function payment($t_id$p_date$p_curr$p_amount$id_user$v_name$v_count)
    {
    global 
$db;
    
$sql $db->prepare("INSERT INTO `xsolla_payment` (`transaction_id`,
                                                       `payment_date`,
                                                       `payment_currency`,
                                                       `payment_amount`,
                                                       `id_user`,
                                                       `currency_name`,
                                                       `currency_count`) VALUES (?, ?, ?, ?, ?, ?, ?)"
);
    
$sql->execute([$t_id$p_date$p_curr$p_amount$id_user$v_name$v_count]);
        if (
$v_name == 'Gold') {
        
$sql $db->prepare('SELECT COUNT(*) FROM `users` WHERE `id` = ? LIMIT 1');
        
$sql->execute([$id_user]);
            if (
$sql->fetchColumn() > 0) {
                
$sql $db->prepare('UPDATE `users` SET `g` = `g` + ? WHERE `id` = ? LIMIT 1');
                
$sql->execute(array($v_count$id_user));
                return 
true;
            } else {
                return 
false;
            }
        } else {
            return 
false;
        }
    }


// отмена платежа
function refund($p_curr$p_amount$id_user$v_name$v_count)
    {
    global 
$db;
    
$sql $db->prepare("INSERT INTO `xsolla_payment` (`transaction_id`,
                                                       `payment_date`,
                                                       `payment_currency`,
                                                       `payment_amount`,
                                                       `id_user`,
                                                       `currency_name`,
                                                       `currency_count`) VALUES (?, ?, ?, ?, ?, ?, ?)"
);
    
$sql->execute([0'REFUSAL_TO_PAY'$p_curr$p_amount$id_user$v_name$v_count]);
    return 
true;
    }


if (!
check_ip()) response(500'INVALID_IP');

// Подключение к базе данных
define('DB_HOST''localhost'); // сервер
define('DB_NAME''bitvag49_btvar'); // имя базы
define('DB_USER''bitvag49_btvar'); // пользователь
define('DB_PASS''bitvag49_btvar'); // пароль

define('XSOLLA_CODE''NlhpT9us9HXORsMs'); // секретный код проекта

// входящие заголовки
$header getallheaders();

// print_r($header);

// проверка подписи
if (!check_sign($HTTP_RAW_POST_DATAXSOLLA_CODE$header['Authorization'])) response(400'INVALID_SIGNATURE');

// входящие данные
$req json_decode($HTTP_RAW_POST_DATA);

try {
    
$db = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=UTF8"DB_USERDB_PASS);
} catch (
PDOException $e) {
    
response(500'INVALID_BD');
}

// тип запроса
$type $req->notification_type;
// ид пользователя
$id $req->user->id;

if (
$type == 'user_validation') {
    if (
check_user($id)) response(204);
    else 
response(400 'INVALID_USER');
} elseif (
$type == 'payment') {
//     Название валюты
    
$valuta_name $req->purchase->virtual_currency->name;
//     Количество валюты
    
$valuta_count $req->purchase->virtual_currency->quantity;
//     Ид платежа в xsolla
    
$transaction_id $req->transaction->id;
//     Дата платежа в xsolla
    
$payment_date $req->transaction->payment_date;
//     Валюта платежа
    
$payment_currency $req->payment_details->payment->currency;
//     Сумма платежа в валюте
    
$payment_amount $req->payment_details->payment->amount;

//     Зачисляем валюту пользователю
    
if (payment($transaction_id$payment_date$payment_currency$payment_amount$id$valuta_name$valuta_count)) {
    
response(204);
    } else {
    
response(400'INVALID_PARAMETER');
    }
} elseif (
$type == 'refund') {
//     Название валюты
    
$valuta_name $req->purchase->virtual_currency->name;
//     Количество валюты
    
$valuta_count $req->purchase->virtual_currency->quantity;
//     Валюта платежа
    
$payment_currency $req->purchase->virtual_currency->currency;
//     Сумма платежа в валюте
    
$payment_amount $req->purchase->virtual_currency->amount;

//     Вносим отмененный платеж в статистику
    
if (refund($payment_currency$payment_amount$id$valuta_name$valuta_count)) {
    
response(204);
    } else {
    
response(400'INVALID_PARAMETER');
    }
} else {
    
response(400'INCORRECT_INVOICE');
}
?>
Онлайн: 0
Реклама