Вход Регистрация
Файл: public_html/avenax.php
Строк: 211
<?php
/**
 * Created by PhpStorm.
 * User: Горбунов Александр
 * https://vk.com/sasha_gorbunov
 * Распространение и перепродажа запрещена
 * Date: 10.01.2017
 * Time: 12:50
 */

define('ROOT'$_SERVER['DOCUMENT_ROOT']);
# Подключение к базе данных
define('DB_HOST''localhost');             // Сервер
define('DB_NAME''cd90484_lasthero');      // Имя базы
define('DB_USER''cd90484_lasthero');      // Пользователь
define('DB_PASS''112233');                // Пароль
define('XSOLLA_CODE''JSjp1D86XgKsnGG9');  // Секретный код проекта

# Входящие заголовки
$header apache_request_headers();
$post file_get_contents('php://input');
ini_set('error_reporting'E_ALL);
ini_set('display_errors'1);
ini_set('display_startup_errors'1);

# Входящие данные
$json_in json_decode($post);
# Тип запроса
$type $json_in->notification_type;
# ID пользователя
$id $json_in->user->id;


if (isset(
$header['Authorization'])) {
    if (!
Avenax_Pay_Xsolla::verification($postXSOLLA_CODE$header['Authorization'])) {
        
Avenax_Pay_Xsolla::status_http(400'INVALID_SIGNATURE');
    }
}

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

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

    
#     Вносим отмененный платеж в статистику
    
if (Avenax_Pay_Xsolla::cancel_payment($payment_currency$payment_amount$id$valuta_name$valuta_count)) {
        
Avenax_Pay_Xsolla::status_http(204);
    } else {
        
Avenax_Pay_Xsolla::status_http(400'INVALID_PARAMETER');
    }
}

class 
Avenax_Pay_Xsolla {
    public static function 
status_http($id_status 400$code ''$message '') {
        
header("HTTP/1.1 " $id_status);
        
header('Content-Type: application/json; charset=UTF-8');
        
$json = array("error" => array("code" => $code"message" => $message));
        echo 
json_encode($json);
        exit();
    }

    public static function 
check_user($id) {
        
$db self::connect_db();
        
$user intval($id);

        if (
$user == false) {
            return 
false;
        }

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

    public static function 
cancel_payment($p_curr$p_amount$id_user$v_name$v_count) {
        
$db self::connect_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;
    }

    public static function 
payment($t_id$p_date$p_curr$p_amount$id_user$v_name$v_count) {
        
$db self::connect_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 == 'Gems') {

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

                
$setUser $db->prepare("UPDATE users SET gold = gold + ? WHERE id = ?");
                
$setUser->execute([$v_count$id_user]);
                return 
true;
            } else {
                return 
false;
            }
        } else {
            return 
false;
        }
    }

    public static function 
verification($req$xsolla$sign) {
        
$signature 'Signature ' sha1($req $xsolla);

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

    private static function 
connect_db() {
        try {
            
$db = new PDO("mysql:host=" DB_HOST ";dbname=" DB_NAME ";charset=UTF8"DB_USERDB_PASS);
            return 
$db;
        } catch (
PDOException $e) {
            
self::status_http(500'Ошибка подключения к БД');
            return 
false;
        }
    }
}
Онлайн: 1
Реклама