game/_incl_data/class/dealer.php
2022-06-07 00:30:34 +03:00

294 lines
12 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?
die('Что-то тут не так...');
/*
* Класс обработчика запроса от GameDealer.ru
* by victor niko
* niko@gamedealer.ru
* skype: victornikoua
* 14.09.2012
*
* $old = new Model_PartnerProjects_GamedealerReq;
$result = $old->init();
die((($result)));
*/
class Model_PartnerProjects_GamedealerReq{
private $allowIp = array(
'127.0.0.1'
);
private $gamedealerkey = '12345677';
var $projectid = 1;
function init(){
$ip = $_SERVER['REMOTE_ADDR'];
if(!in_array($ip,$this->allowIp))return $this->xml(array('status'=>-10,'desc'=>'ErrIP'));
//рабочий режим
//$xml = file_get_contents('php://input');
//тестовый режим. Параметры: check_balance / pay / getpacages / check_login
$xml = $this->testxml('check_balance');
$result = $this->parse($xml);
if(!is_object($result))return $this->xml(array('status'=>-50,'desc'=>'ErrorInitParse'));
if(isset($result->method)){
$methodname = 'gamedealer_'.(string)$result->method;
if(!method_exists($this, $methodname))return $this->xml(array('status'=>-20,'desc'=>'ErrMethod'));
try{
$resulttry = $this->$methodname($result);
return $this->xml($resulttry);
}catch(Exception $e){}
}
return $this->xml(array('status'=>-10,'desc'=>'MethodError '.$methodname.isset($e)?$e->getMessage():false));
}
private function _sign($method,$params=array()){
return md5(implode($params).$method.md5($this->gamedealerkey));
}
/*Генератор XML-ответа*/
function xml($arr=false){
header("Content-type: text/xml; charset=utf-8");
if(!$arr)$arr = array('status'=>-1,'desc'=>"ErrorXML");
$xml = '<gdanswer>'."\n";
foreach($arr as $k => $v){
$xml .= '<'.$k.'>'."";
if(is_array($v)){
foreach($v as $itemkey => $itemvalue){
if(is_array($itemvalue)){
$xml .= ' <item ';
foreach($itemvalue as $itemvalue_k => $itemvalue_v)$xml .= ' '.$itemvalue_k.'="'.$itemvalue_v.'" ';
$xml .= '></item>'."\n";
}else{
$xml .= '<'.$itemkey.'>'.$itemvalue.'</'.$itemkey.'>'."\n";
}
}
}else {
$xml .= $v;
}
$xml .= '</'.$k.'>'."\n";
}
$xml .= '</gdanswer>';
return $xml;
}
//проверка счета-акканта
function gamedealer_check_login($params){
$bank = isset($params->nick)?(int)$params->nick:false;
$projectid = isset($params->projectid)?(int)$params->projectid:false;
$sign = isset($params->sign)?(string)$params->sign:false;
$hash = $this->_sign('check_login',array($bank));
if($sign!=$hash)return array('status'=>-10,'desc'=>'SignError');
$check = $this->checkLoginByBank($bank);
if(isset($check['login'])){
return array('status'=>1,'desc'=>'Счет указан верно','addinfo'=>$check['login']);
}
return array('status'=>-100,'desc'=>'Ошибка проверки счета');
}
//запрос на оплату
function gamedealer_pay($params){
$bank = isset($params->nick)?(int)$params->nick:false;
$projectid = isset($params->projectid)?(int)$params->projectid:false;
$sign = isset($params->sign)?(string)$params->sign:false;
$paymentid = isset($params->payid)?(int)$params->payid:false; // уникальный номер платежа
$amount = isset($params->amount)?number_format((float)$params->amount,'2','.',''):false; //сумма в игровой валюте
$pacageid = isset($params->pacageid)?(int)$params->pacageid:''; //идентификатор покупки опции в ГД. если нету - платеж на счет юзера
$partneritemid = isset($params->partneritemid)?(int)$params->partneritemid:''; //идентификатор продукта в вашей системе
$additemid = isset($params->additemid)?(int)$params->additemid:''; //дополнительный идентификатор пакета
$paymethodid = isset($params->paymethodid)?(string)$params->paymethodid:false; //метод оплаты по системе геймдилер // может быть пустым)
$hash = $this->_sign('pay',array($bank,$projectid.$pacageid.$amount,$paymentid));
if($sign!=$hash)return array('status'=>-10,'desc'=>'SignError');
if($amount<0.01)return array('status'=>-20,'desc'=>'сумма слишком маленькая');
$check = $this->checkLoginByBank($bank);
if(!isset($check['login']))return array('status'=>-10,'desc'=>'Ошибка логина. счет неверный'); //логин перса добываем
return $this->oldbk_dopayment($paymentid,$bank,$projectid,$pacageid,$partneritemid,$amount,$check['login'],$additemid);
}
function gamedealer_check_balance($params){
$projectid = isset($params->projectid)?(int)$params->projectid:false;
$sign = isset($params->sign)?(string)$params->sign:false;
$method = 'check_balance';
if($sign != $this->_sign($method,array('projectid'=>$projectid)))return array('status'=>-10,'desc'=>"errSign");
$balance = 500;
return array('status'=>1,'desc'=>"Balance: ".$balance,'balance'=>$balance); //баланс в игре
}
function gamedealer_getpacages($params){
$sign = isset($params->sign)?(string)$params->sign:false;
$projectid = isset($params->projectid)?(int)$params->projectid:false;
$method = 'getpacages';
if($sign != $this->_sign($method,array('projectid'=>$projectid)))return array('status'=>-10,'desc'=>"errSign");
return array(
'status'=>1,
'desc'=>'Список снизу :)',
'pacages'=>array(
array(
'title'=>'Название сильвера',
'price'=>20,
'partneritemid'=>1 //ид в системе игры
),
array(
'title'=>'Название сильвера 2',
'price'=>20,
'partneritemid'=>1 //ид в системе игры
),
)
);
}
function parse($xml){
try{
return simplexml_load_string($xml);
}catch(Exception $e){
return false;
}
}
//тестовый интерфейс
function testxml($method='check_login'){
switch($method){
case 'check_login':
$nick = 243;
return '<?xml version="1.0" encoding="utf-8"?>
<gamedealer>
<method>check_login</method>
<nick>'.$nick.'</nick>
<projectid>1</projectid>
<sign>'.md5($nick.$method.md5($this->gamedealerkey)).'</sign>
</gamedealer>';
break;
case 'pay':
$amount= 0.01;
$nick = 243;
$projectid = 1;
$payid = 112222;
//$bank,$projectid.$pacageid.$amount,$paymentid
#echo "$nick.$projectid.$amount.$payid.$method";
$sign = md5($nick.$projectid.$amount.$payid.$method.md5($this->gamedealerkey));
return '<?xml version="1.0" encoding="utf-8"?>
<gamedealer>
<method>pay</method>
<nick>'.$nick.'</nick>
<projectid>'.$projectid.'</projectid>
<amount>'.$amount.'</amount>
<payid>'.$payid.'</payid>
<sign>'.$sign.'</sign>
</gamedealer>';
break;
case 'getpacages':
//список пакетов
return '<?xml version="1.0" encoding="utf-8"?>
<gamedealer>
<projectid>1</projectid>
<method>'.$method.'</method>
<sign>'.md5('1'.$method.md5($this->gamedealerkey)).'</sign>
</gamedealer>';
break;
case 'check_balance':
//баланс
return '<?xml version="1.0" encoding="utf-8"?>
<gamedealer>
<projectid>1</projectid>
<method>'.$method.'</method>
<sign>'.md5('1'.$method.md5($this->gamedealerkey)).'</sign>
</gamedealer>';
break;
}
}
//прием оплаты
private function oldbk_dopayment($paymentid,$bank,$projectid,$pacageid,$partneritemid,$amount,$login,$additemid){
//$additemid - дополнительный дентификатор пакета. например - ID клана
//если оплата на клан - projectid = 20099 // pacageid = 25 //partneritemid = 1 (в вашей системе)// additemid = 5 //идентификатор клана
//если пакеты
if($pacageid){
//если покупка билетов - то количество = amount/price ну и там округлять, остаток на счет.
return array('status'=>1,'desc'=>'Сильвер аккаунт успешно оплачен','paymentid'=>1); //уникальный номер платежа в системе проекта.
}else{
//просто оплата на баланс по счету
return array('status'=>1,'desc'=>'Счет попонен','paymentid'=>1); //уникальный номер платежа в системе проекта.
//или
return array('status'=>3,'desc'=>'Аккаунт уже оплачен с таким payid','paymentid'=>1);//уникальный номер платежа в системе проекта.
}
return array('status'=>-10,'desc'=>'Ошибка поиска карты/сильвера и т.п. или сумма не та');
}
//проверка счета
function checkLoginByBank($bank){
return array('status'=>1,'desc'=>'Bank exissts','login'=>'Администратор');
}
}
?>