2022-08-25 11:23:36 +00:00
< ? php
2023-01-10 16:29:32 +00:00
/**@deprecated вроде нигде не вызывается, никем не используется */
2022-08-25 11:23:36 +00:00
class GameDealer
{
2023-01-10 16:29:32 +00:00
//Конфигурации
2022-08-25 11:23:36 +00:00
private $c = [
2023-01-10 16:29:32 +00:00
'db_name' => 'pay_operations' , //Таблица в которую заносятся данные
2022-08-25 11:23:36 +00:00
'db_host' => 'localhost' ,
'db_user' => 'newcom1_abk' ,
'db_pass' => '4nWYsIM[c?}P' ,
2023-01-10 16:29:32 +00:00
'db_base' => 'newcom1_abk' , /* Настройки платежей */
'ip_list' => [ '127,0,0,1,188.166.34.68,136.243.38.147,136.243.38.149,136.243.38.150,136.243.38.151,136.243.38.189,88.198.88.98' ], //Указывать через запятую (Разрешенные IP)
2022-08-25 11:23:36 +00:00
'key' => 'qtzl0igb' , //gamedealer key
2023-01-10 16:29:32 +00:00
'id' => '65643' //ID проекта
], $BACK = []; //Результат который возвращаем в конце
2022-08-25 11:23:36 +00:00
2023-01-10 16:29:32 +00:00
//Кодируем из ЮТФ-8 в Кирилицу
2023-01-10 17:26:14 +00:00
/**
* @ param $text
* @ return mixed
* @ deprecated
*/
2022-08-25 11:23:36 +00:00
public function in ( $text )
{
2023-01-10 17:26:14 +00:00
return $text ;
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
//Кодируем из Кирилицу в ЮТФ-8
2023-01-10 17:26:14 +00:00
/**
* @ param $text
* @ return mixed
* @ deprecated
*/
2022-08-25 11:23:36 +00:00
public function out ( $text )
{
2023-01-10 17:26:14 +00:00
return $text ;
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
//Добавляем данные в базу данных
2022-08-25 11:23:36 +00:00
public function add ( $type , $value , $money )
{
mysql_query ( 'INSERT INTO `' . $this -> c [ 'db_name' ] . '` (`time`,`type`,`ip`,`value`,`money`,`project`) VALUES ("' . time () . '","' . mysql_real_escape_string ( $type ) . '","' . $_SERVER [ 'HTTP_X_REAL_IP' ] . '","' . mysql_real_escape_string ( $value ) . '","' . mysql_real_escape_string ( $money ) . '","' . mysql_real_escape_string ( $this -> id ) . '")' );
}
2023-01-10 16:29:32 +00:00
//Подключаемся к базе данных
2022-08-25 11:23:36 +00:00
public function connect_db ()
{
2023-01-10 16:29:32 +00:00
$db = mysql_connect ( $this -> c [ 'db_host' ], $this -> c [ 'db_user' ], $this -> c [ 'db_pass' ]) or die ( 'Ошибка подключения к MySQL серверу!' );
mysql_select_db ( $this -> c [ 'db_base' ], $db ) or die ( 'Ошибка подключения к базе данных!' );
2023-01-10 17:26:14 +00:00
mysql_query ( 'SET NAMES utf8mb4' );
2022-08-25 11:23:36 +00:00
}
public function output ( $a , $v = null )
{
$r = '' ;
$i = 0 ;
while ( $i < count ( $a )) {
$rn = '' ;
$tb = '' ;
if ( $v != null ) {
$rn = " \r \n " ;
$tb = " " ;
}
$r .= $rn . '<' . $a [ $i ][ 0 ] . '>' ;
if ( ! is_array ( $a [ $i ][ 1 ])) {
$rn = '' ;
$tb = '' ;
$r .= $rn . $tb . ( $this -> out ( $a [ $i ][ 1 ]));
} else {
if ( $i > 0 ) {
$r .= $rn ;
}
$r .= $tb . ( $this -> output ( $a [ $i ][ 1 ], 1 ));
}
$r .= $rn . '</' . $a [ $i ][ 0 ] . '>' ;
$i ++ ;
}
return $r ;
}
2023-01-10 16:29:32 +00:00
//Генерируем XML-файл
2022-08-25 11:23:36 +00:00
public function backInformation ()
{
header ( 'Content-Type: text/html/force-download' );
echo '<?xml version="1.0" encoding="UTF-8"?>' ;
echo $this -> output ( $this -> BACK , 1 );
}
2023-01-10 16:29:32 +00:00
//Проверка существования персонажа
2022-08-25 11:23:36 +00:00
public function test_accaunt ( $nick )
{
$r = false ;
$nick = mysql_fetch_array ( mysql_query ( 'SELECT `id` FROM `bank` WHERE `id` = "' . mysql_real_escape_string ( $nick ) . '" LIMIT 1' ));
if ( isset ( $nick [ 'id' ])) {
$r = true ;
}
return $r ;
}
2023-01-10 16:29:32 +00:00
//Получает счет в банке по логину
2022-08-25 11:23:36 +00:00
public function getBank ( $nick )
{
$nick = mysql_fetch_array ( mysql_query ( 'SELECT `id` FROM `users` WHERE `login` = "' . mysql_real_escape_string ( $nick ) . '" LIMIT 1' ));
$nick = mysql_fetch_array ( mysql_query ( 'SELECT `id` FROM `bank` WHERE `uid` = "' . mysql_real_escape_string ( $nick [ 'id' ]) . '" LIMIT 1' ));
return $nick [ 'id' ];
}
2023-01-10 16:29:32 +00:00
//Поиск логина
2022-08-25 11:23:36 +00:00
public function bank_user ( $nick )
{
$nick = mysql_fetch_array ( mysql_query ( 'SELECT `id`,`uid FROM `bank` WHERE `id` = "' . mysql_real_escape_string ( $nick ) . '" LIMIT 1' ));
$nick = mysql_fetch_array ( mysql_query ( 'SELECT `id`,`login` FROM `users` WHERE `login` = "' . mysql_real_escape_string ( $nick [ 'uid' ]) . '" LIMIT 1' ));
return $nick [ 'login' ];
}
2023-01-10 16:29:32 +00:00
//Начинаем обработку запросов
2022-08-25 11:23:36 +00:00
public function start_session ()
{
$ip = '' ;
$ip = $_SERVER [ 'HTTP_X_REAL_IP' ];
2023-01-10 16:29:32 +00:00
//Подключаемся к БД
2022-08-25 11:23:36 +00:00
$this -> connect_db ();
2023-01-10 16:29:32 +00:00
//Получаем данные запроса
2022-08-25 11:23:36 +00:00
//$xml = file_get_contents('php://input');
2023-01-10 16:29:32 +00:00
//Парсинг XML запроса
2022-08-25 11:23:36 +00:00
if ( function_exists ( 'simplexml_load_string' )) {
$xml = simplexml_load_string ( $xml );
} else {
2023-01-10 16:29:32 +00:00
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Н е удалось произвести обработку запроса' ]]]];
2022-08-25 11:23:36 +00:00
die ( $this -> backInformation ());
}
$this -> id = $xml -> projectid ;
if ( ! in_array ( $ip , $this -> c [ 'ip_list' ])) {
2023-01-10 16:29:32 +00:00
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Нет доступа с данного IP' ]]]];
2022-08-25 11:23:36 +00:00
die ( $this -> backInformation ());
}
2023-01-10 16:29:32 +00:00
//Обработка запросов
2022-08-25 11:23:36 +00:00
if ( $xml -> method == 'check_balance' ) {
//<sign>MD5(method+MD5(gdKey))</sign>
$sign = md5 ( $xml -> method . md5 ( $this -> c [ 'key' ]));
if ( $sign == $xml -> sign ) {
2023-01-10 16:29:32 +00:00
//Баланс дилера
2022-08-25 11:23:36 +00:00
$balance = 1000000 ;
2023-01-10 16:29:32 +00:00
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '1' ], [ 'desc' , 'Баланс дилера: ' . $balance ], [ 'balance' , $balance ]]]];
2022-08-25 11:23:36 +00:00
$this -> add ( '4' , 'check:' . $xml -> nick . ':1' . $r , 0 );
}
} elseif ( $xml -> method == 'check' ) {
/*
2023-01-10 16:29:32 +00:00
nick - логин персонажа < sign > MD5 ( nick + method + MD5 ( gdKey )) </ sign > */
2022-08-25 11:23:36 +00:00
$sign = md5 ( $xml -> nick . $xml -> method . md5 ( $this -> c [ 'key' ]));
if ( $sign == $xml -> sign ) {
$xml -> nick = $this -> in ( $xml -> nick );
if ( $this -> test_accaunt ( $xml -> nick ) == true ) {
2023-01-10 16:29:32 +00:00
//Персонаж найден и зачисляем ему игровую валюту
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '1' ], [ 'desc' , 'Банковский счет найден' ]]]];
2022-08-25 11:23:36 +00:00
$this -> add ( '3' , 'check:' . $xml -> nick . ':1' . $r , 0 );
} else {
2023-01-10 16:29:32 +00:00
//Персонаж не найден
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Платеж не обработан. Банковский счет не найден.' ]]]];
$this -> add ( '-1' , 'Персонаж не найден:pay:' . $xml -> nick . ':0' , 0 );
2022-08-25 11:23:36 +00:00
}
}
} elseif ( $xml -> method == 'pay' ) {
2023-01-10 16:29:32 +00:00
/* Проводим платеж
nick - логин аккаунта , projectid - id проекта , sign , amount - деньги , payid - id платежа */
2022-08-25 11:23:36 +00:00
$sign = md5 ( $xml -> nick . $xml -> projectid . $xml -> amount . $xml -> payid . $xml -> method . md5 ( $this -> c [ 'key' ]));
if ( $sign == $xml -> sign ) {
$xml -> nick = $this -> in ( $xml -> nick );
if ( $this -> test_accaunt ( $xml -> nick )) {
2023-01-10 16:29:32 +00:00
//Персонаж найден и зачисляем ему игровую валюту
2022-08-25 11:23:36 +00:00
$bank = $this -> test_accaunt ( $xml -> nick );
if ( $bank > 0 ) {
mysql_query ( 'UPDATE `bank` SET `money2` = `money2` + ' . mysql_real_escape_string ( $xml -> amount ) . ' WHERE `id` = "' . mysql_real_escape_string ( $xml -> nick ) . '" LIMIT 1' );
2023-01-10 16:29:32 +00:00
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '1' ], [ 'desc' , 'Платеж прошел успешно' ], [ 'id' , $this -> c [ 'id' ]]]]];
2022-08-25 11:23:36 +00:00
$this -> add ( '2' , 'pay:' . $xml -> nick . ':' . $xml -> projectid . ':' . $xml -> sign . ':' . $xml -> amount . ':' . $xml -> payid . ':' . $bank [ 'id' ], $xml -> amount );
$user = mysql_fetch_array ( mysql_query ( 'SELECT `id`,`uid` FROM `bank` WHERE `id` = "' . mysql_real_escape_string ( $xml -> nick ) . '" LIMIT 1' ));
$user = mysql_fetch_array ( mysql_query ( 'SELECT `id`,`login`,`city`,`sex`,`room` FROM `users` WHERE `id` = "' . mysql_real_escape_string ( $user [ 'uid' ]) . '" LIMIT 1' ));
mysql_query ( 'UPDATE `users` SET `catch` = `catch` + ' . mysql_real_escape_string ( floor ( $xml -> amount )) . ' WHERE `id` = "' . mysql_real_escape_string ( $xml -> nick ) . '" LIMIT 1' );
2023-01-10 16:29:32 +00:00
$r = '<span class=date>' . date ( 'd.m.Y H:i' ) . '</span> Алхимик <img src=https://img.new-combats.com/i/align/align50.gif width=12 height=15 /><u><b>Enchanter</b> / Автоматическая оплата</u> сообщает: ' ;
2022-08-25 11:23:36 +00:00
if ( $user [ 'sex' ] == 1 ) {
2023-01-10 16:29:32 +00:00
$r .= 'Уважаемая' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$r .= 'Уважаемый' ;
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
$r .= ' <b>' . $user [ 'login' ] . '</b>, на Ваш банковский счет №' . $bank . ' зачислено ' . $xml -> amount . ' Ekr. Благодарим В а с за покупку!' ;
2022-08-25 11:23:36 +00:00
2023-01-28 02:24:37 +00:00
$chatDto = new ChatMessage ();
$chatDto -> setCity ( $user [ 'city' ]);
$chatDto -> setRoom ( $user [ 'room' ]);
$chatDto -> setTo ( $user [ 'login' ]);
$chatDto -> setText ( $r );
$chatDto -> setType ( 5 );
$chatDto -> setTime ( - 1 );
( new Chat ()) -> sendMsg ( $chatDto );
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'У пользователя отсутствует банк' ], [ 'id' , $this -> c [ 'id' ]]]]];
$this -> add ( '-1' , 'У персонажа отсутствует банк:pay:' . $xml -> nick . ':' . $xml -> projectid . ':' . $xml -> sign . ':' . $xml -> amount . ':' . $xml -> payid . ':' . $bank [ 'id' ], $xml -> amount );
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
//Персонаж не найден
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Платеж не обработан. Персонаж не найден.' ]]]];
$this -> add ( '-1' , 'Персонаж не найден:pay:' . $xml -> nick . ':0' , 0 );
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
//Ошибка сигнатуры
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Ошибка сигнатуры' ]]]];
$this -> add ( '-1' , 'Ошибка сигнатуры:pay:' . $xml -> nick . ':0' , 0 );
2022-08-25 11:23:36 +00:00
}
} elseif ( $xml -> method == 'check_login' ) {
2023-01-10 16:29:32 +00:00
/* Проверка аккаунта
nick - логин аккаунта , projectid - id проекта , sign */
2022-08-25 11:23:36 +00:00
$sign = md5 ( $xml -> nick . $xml -> method . md5 ( $this -> c [ 'key' ]));
if ( $sign == $xml -> sign ) {
$xml -> nick = $this -> in ( $xml -> nick );
if ( $this -> test_accaunt ( $xml -> nick )) {
2023-01-10 16:29:32 +00:00
//Персонаж найден
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '1' ], [ 'desc' , 'Счет найден' ], [ 'addinfo' , $this -> bank_user ( $xml -> nick )]]]];
2022-08-25 11:23:36 +00:00
$this -> add ( '1' , 'check_login:' . $xml -> nick . ':1' . $r , 0 );
} else {
2023-01-10 16:29:32 +00:00
//Персонаж не найден
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Счет не найден' ]]]];
$this -> add ( '-1' , 'Персонаж не найден:check_login:' . $xml -> nick . ':0' , 0 );
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
//Ошибка сигнатуры
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Ошибка сигнатуры' ]]]];
$this -> add ( '-1' , 'Ошибка сигнатуры:pay:' . $xml -> nick . ':0' , 0 );
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
$this -> BACK = [[ 'gdanswer' , [[ 'status' , '-1' ], [ 'desc' , 'Неизвестный тип запроса' ]]]];
$this -> add ( '-1' , 'Неизвестный тип запроса:error_method:gamedealer' , 0 );
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
//Возвращаем результат
2022-08-25 11:23:36 +00:00
$this -> backInformation ();
}
}
$pay = new GameDealer ;
$pay -> start_session ();