View file sdark.mobi/pumpitapi/pumpit-class.php

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);

?>