File size: 6.91Kb
<?php
require_once 'pumpit-config.php';
// Описание класса
class Pumpit
{
var $param;
var $app_id;
var $key_api;
var $key_billing;
// Конструктор
function Pumpit($param)
{
$this->param = $param;
$this->app_id = $this->param['APP_ID'];
$this->key_api = $this->param['KEY_API'];
$this->key_billing = $this->param['KEY_BILLING'];
$this->param['CONTEXT'] = array(
'http' => array(
'method' => 'GET',
'request_fulluri' => true,
'timeout' => 10
)
);
}
// Запрос виджетов
function getWidgets($p_sid='')
{
$result = false;
$res = $this->sendRequest($p_sid, 'GetWidgets', '');
if ( $res )
{
$result = array();
$result['header'] = sprintf("%s", $res->{'header'});
$result['footer'] = sprintf("%s", $res->{'footer'});
}
return $result;
}
// Запрос профиля пользователя
function getMyProfile($p_sid='')
{
$result = false;
$res = $this->sendRequest($p_sid, 'GetMyProfile', '');
if ( $res )
{
$result = array();
$result['login'] = sprintf("%d", $res->{'login'});
$result['nick'] = sprintf("%s", $res->{'nick'});
$result['coin'] = sprintf("%s", $res->{'coin'});
}
return $result;
}
// Запрос на перевод денег со счета абонента в приложение
function doIncAppAccount($p_sid='', $coin='', $params=array(), $burl='')
{
$query = array();
$query['app_id'] = $this->app_id;
$query['action'] = 'DoIncAppAccount';
$query['p_sid'] = $p_sid;
$query['coin'] = $coin;
$query['burl'] = $burl;
// Если есть необязательные параметры такие как desc, app_tid, app_uid
if ( !empty($params) )
{
foreach ( $params as $key => $value )
{
$query[$key] = $value;
}
}
// Формируем подпись запроса
$sig = $this->getSig($query, true);
$url = $this->param['API_HOST'];
// Собираем URL с сортировкой по ключам
ksort($query);
foreach ( $query as $key => $value )
{
// Исключаем параметр sig
if ( strtolower($key) != 'sig' )
{
$url .= urlencode($key) . "=" . urlencode($value) . "&";
}
}
$url .= "sig=" . $sig;
return $url;
}
// Запрос на авторизацию пользователя
function doPumpitLogin($p_sid='', $burl='')
{
$query = array();
$query['app_id'] = $this->app_id;
$query['action'] = 'DoPumpitLogin';
$query['p_sid'] = $p_sid;
$query['burl'] = $burl;
// Формируем подпись запроса
$sig = $this->getSig($query);
$url = $this->param['API_HOST'];
// Собираем URL с сортировкой по ключам
ksort($query);
foreach ( $query as $key => $value )
{
// Исключаем параметр sig
if ( strtolower($key) != 'sig' )
{
$url .= urlencode($key) . "=" . urlencode($value) . "&";
}
}
$url .= "sig=" . $sig;
return $url;
}
// Запрос на доступ к кошельку Pumpit
function doPumpitPayment($p_sid='', $burl='')
{
$query = array();
$query['app_id'] = $this->app_id;
$query['action'] = 'DoPumpitPayment';
$query['p_sid'] = $p_sid;
$query['burl'] = $burl;
// Формируем подпись запроса
$sig = $this->getSig($query);
$url = $this->param['API_HOST'];
// Собираем URL с сортировкой по ключам
ksort($query);
foreach ( $query as $key => $value )
{
// Исключаем параметр sig
if ( strtolower($key) != 'sig' )
{
$url .= urlencode($key) . "=" . urlencode($value) . "&";
}
}
$url .= "sig=" . $sig;
return $url;
}
// Запрос на возврат абонента в Pumpit
function doPumpitBack($p_sid='')
{
$query = array();
$query['app_id'] = $this->app_id;
$query['action'] = 'DoPumpitBack';
$query['p_sid'] = $p_sid;
// Формируем подпись запроса
$sig = $this->getSig($query);
$url = $this->param['API_HOST'];
// Собираем URL с сортировкой по ключам
ksort($query);
foreach ( $query as $key => $value )
{
// Исключаем параметр sig
if ( strtolower($key) != 'sig' )
{
$url .= urlencode($key) . "=" . urlencode($value) . "&";
}
}
$url .= "sig=" . $sig;
return $url;
}
// Функция формирования подписи
function getSig($query, $billing=false)
{
$str = "";
// Собираем строку для подписи с сортировкой по ключам
ksort($query);
foreach ( $query as $key => $value )
{
// Исключаем параметр sig
if ( strtolower($key) != 'sig' )
{
$str .= $key . "=" . $value;
}
}
$appkey = ($billing) ? $this->key_billing : $this->key_api;
return md5($str.$appkey);
}
// Отправить запрос
function sendRequest($p_sid, $action, $param, $billing=false)
{
$query = array();
$query['app_id'] = $this->app_id;
$query['action'] = $action;
$query['p_sid'] = $p_sid;
// Формируем подпись запроса
$sig = $this->getSig($query, $billing);
$url = $this->param['API_HOST'];
// Собираем URL с сортировкой по ключам
ksort($query);
foreach ( $query as $key => $value )
{
// Исключаем параметр sig
if ( strtolower($key) != 'sig' )
{
$url .= urlencode($key) . "=" . urlencode($value) . "&";
}
}
$url .= "sig=" . $sig;
$connection = stream_context_create($this->param['CONTEXT']);
$data = file_get_contents($url, false, $connection);
if ( $data )
{
$json = json_decode($data);
if ( $json )
{
return $json;
}
else
{
$this->logError("Unexpected response for request"."\n".$data);
}
}
else
{
$this->logError("Unable to send request"."\n"."P_SID=".$p_sid." ACTION=".$action." PARAM=".$param." BILLING=".$billing);
}
return false;
}
// Функция проверки валидности запросов от pumpit
function checkRequest($query_string, $billing=false)
{
$result = false;
parse_str($query_string, $query);
if ( $query['sig'] == $this->getSig($query, $billing) )
{
$result = true;
}
return $result;
}
// Логирование ошибок
function logError($txt)
{
if (isset($this->param['LOG']) && $this->param['LOG'] && ($handle = fopen($this->param['LOG'], 'a')))
{
$tmp = "[".date('Y-m-d H:i:s')."]\n";
$tmp .= "Error. ".$txt."\n";
fwrite($handle, $tmp);
fclose($handle);
}
}
}
$pumpit = new Pumpit($pumpit_params);
?>