| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582 | 
							- <?php
 
- if (! function_exists('curl_init')) {
 
-     throw new Exception('Snda needs the CURL PHP extension.');
 
- }
 
- if (! function_exists('json_decode')) {
 
-     throw new Exception('Snda needs the JSON PHP extension.');
 
- }
 
- class OauthSDK
 
- {
 
-     /** 
 
-      * Contains the last HTTP status code returned.  
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $http_code;
 
-     /** 
 
-      * Contains the last API call. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $url;
 
-     /** 
 
-      * Set timeout default. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $timeout = 30;
 
-     /**  
 
-      * Set connect timeout. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $connecttimeout = 30;
 
-     /** 
 
-      * Verify SSL Cert. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $ssl_verifypeer = FALSE;
 
-     /** 
 
-      * Respons format. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $format = 'json';
 
-     /** 
 
-      * Decode returned json data. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $decode_json = TRUE;
 
-     /** 
 
-      * Contains the last HTTP headers returned. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $http_info;
 
-     /** 
 
-      * Set the useragnet. 
 
-      * 
 
-      * @ignore 
 
-      */
 
-     public $useragent = 'SNDA OAuth 2.0';
 
-     /* Immediately retry the API call if the response was not successful. */
 
-     //public $retry = TRUE; 
 
-     
 
-     /**
 
-      * The Application ID.
 
-      */
 
-     protected $appId;
 
-     
 
-     /**
 
-      * The Application API Secret.
 
-      */
 
-     protected $appSecret;
 
-     
 
-     /**
 
-      * app callback url
 
-      */
 
-     protected $redirectURI;
 
-     
 
-     protected $lastErrorCode;
 
-     protected $lastErrorMsg;
 
-     
 
-     protected $systemParam = array(
 
-         'connectTimeout' => 5 , 
 
-         'timeout' => 3 , 
 
-         'gatewayUrl' => 'http://api.snda.com' , 
 
-         'authorizeURL' => 'http://oauth.snda.com/oauth/authorize' , 
 
-         'accessTokenURL' => 'http://oauth.snda.com/oauth/token' , 
 
-         'systemTokenURL' => 'http://oauth.snda.com/oauth/token' , 
 
-         'gatewayHost' => 'api.snda.com' , 
 
-         'gatewayPort' => 8888
 
-     );
 
-     
 
-     protected $params = array();
 
-     
 
-     private $oauth_debug = FALSE;
 
-     private $apiStartTime = 0;
 
-     private $apiStopTime = 0;
 
-     private $execTime = 0;
 
-     
 
-     /**
 
-      * User Authorization url
 
-      */
 
-     function authorizeURL ()
 
-     {
 
-         return $this->systemParam['authorizeURL'];
 
-     }
 
-     
 
-     /**
 
-      * Get User Authorization url
 
-      */
 
-     function accessTokenURL ()
 
-     {
 
-         return $this->systemParam['accessTokenURL'];
 
-     }
 
-     
 
-     /**
 
-      * Get System Authorization url
 
-      */
 
-     function systemTokenURL ()
 
-     {
 
-         return $this->systemParam['systemTokenURL'];
 
-     }
 
-     
 
-     /**
 
-      *  ApiPool GateWay Url
 
-      */
 
-     function apiPoolURL ()
 
-     {
 
-         return $this->systemParam['gatewayUrl'];
 
-     }
 
-     
 
-     function __construct ($apiKey, $appSecret, $redirectURI)
 
-     {
 
-         
 
-         $this->appId = $apiKey;
 
-         
 
-         $this->appSecret = $appSecret;
 
-         
 
-         $this->redirectURI = $redirectURI;
 
-     
 
-     }
 
-     
 
-     function setOption ($key, $value)
 
-     {
 
-         $this->systemParam[$key] = $value;
 
-     }
 
-     
 
-     /**
 
-      * Set the Application ID.
 
-      *
 
-      * @param String $appId the Application ID
 
-      */
 
-     public function setAppId ($appId)
 
-     {
 
-         $this->appId = $appId;
 
-     }
 
-     
 
-     /**
 
-      * Get the Application ID.
 
-      *
 
-      * @return String the Application ID
 
-      */
 
-     public function getAppId ()
 
-     {
 
-         return $this->appId;
 
-     }
 
-     
 
-     public function setRedirectURI ($redirectURI)
 
-     {
 
-         $this->redirectURI = $redirectURI;
 
-     }
 
-     
 
-     public function getRedirectURI ()
 
-     {
 
-         return $this->redirectURI;
 
-     }
 
-     
 
-     /**
 
-      * Set the API Secret.
 
-      *
 
-      * @param String $appId the API Secret
 
-      */
 
-     public function setApiSecret ($apiSecret)
 
-     {
 
-         $this->apiSecret = $apiSecret;
 
-     }
 
-     
 
-     /**
 
-      * Get the API Secret.
 
-      *
 
-      * @return String the API Secret
 
-      */
 
-     public function getApiSecret ()
 
-     {
 
-         return $this->apiSecret;
 
-     }
 
-     
 
-     //Get accesstoken
 
-     public function getAccessToken ($code)
 
-     {
 
-         $this->_clearError();
 
-         $clientID = $this->appId;
 
-         $redirectURI = $this->redirectURI;
 
-         $clientSecret = $this->appSecret;
 
-         $accessTokenURL = self::accessTokenURL();
 
-         $url = "{$accessTokenURL}?code={$code}&client_id={$clientID}&client_secret={$clientSecret}&redirect_uri={$redirectURI}";
 
-         
 
-         $result = self::http($url);
 
-         $access_token = json_decode($result, TRUE);
 
-         if (empty($access_token) || isset($access_token['error'])) {
 
-             $this->_setOAuthError($access_token);
 
-             return FALSE;
 
-         } else {
 
-             return $access_token;
 
-         }
 
-     }
 
-     
 
-     //Generate User Authorization url
 
-     public function getAuthorizeURL ()
 
-     {
 
-         $clientID = $this->appId;
 
-         $redirectURI = $this->redirectURI;
 
-         $authorizeURL = self::authorizeURL();
 
-         return "{$authorizeURL}?response_type=code&client_id={$clientID}&redirect_uri={$redirectURI}";
 
-     }
 
-     
 
-     //Generate System Authorization  token
 
-     public function getSystemToken ()
 
-     {
 
-         $this->_clearError();
 
-         
 
-         $clientID = $this->appId;
 
-         $redirectURI = $this->redirectURI;
 
-         $clientSecret = $this->appSecret;
 
-         $accessTokenURL = self::accessTokenURL();
 
-         $url = "{$accessTokenURL}?grant_type=client_credentials&client_id={$clientID}&client_secret={$clientSecret}";
 
-         
 
-         $result = self::http($url);
 
-         $access_token = json_decode($result, TRUE);
 
-         if (empty($access_token) || isset($access_token['error'])) {
 
-             $this->_setOAuthError($access_token);
 
-             return FALSE;
 
-         } else {
 
-             return $access_token;
 
-         }
 
-     }
 
-     
 
-     public static function generate_nonce ()
 
-     {
 
-         $mt = microtime();
 
-         $rand = mt_rand();
 
-         
 
-         return md5($mt . $rand); // md5s look nicer than numbers 
 
-     }
 
-     
 
-     /**
 
-      * request apipool
 
-      */
 
-     public function request ($method = 'TCP')
 
-     {
 
-         static $tcpField = array(
 
-             'method' => 1 , 
 
-             'oauth_consumer_key' => 1 , 
 
-             'oauth_token' => 1 , 
 
-             'oauth_nonce' => 1 , 
 
-             'oauth_timestamp' => 1 , 
 
-             'oauth_version' => 1 , 
 
-             'oauth_signature_method' => 1 , 
 
-             'oauth_signature' => 1 , 
 
-             'call_id' => 1 , 
 
-             'version' => 1
 
-         );
 
-         
 
-         $this->_clearError();
 
-         $param = $this->params;
 
-         $this->params = array();
 
-         
 
-         $url = self::apiPoolURL();
 
-         
 
-         $parameters['oauth_token'] = 'null';
 
-         $parameters['oauth_consumer_key'] = $this->appId;
 
-         $parameters['oauth_nonce'] = self::generate_nonce();
 
-         $parameters['oauth_timestamp'] = (string) time();
 
-         $parameters['oauth_version'] = '2.0';
 
-         $parameters['oauth_signature_method'] = 'HMAC-SHA1';
 
-         
 
-         if ($method == 'TCP') {
 
-             $parameters['call_id'] = 0;
 
-         }
 
-         
 
-         // data merging
 
-         foreach ($parameters as $key => $value) {
 
-             if (! isset($param[$key])) {
 
-                 $param[$key] = $parameters[$key];
 
-             }
 
-         }
 
-         if ($method == 'TCP') {
 
-             $tcpParams = array();
 
-             foreach ($param as $key => $value) {
 
-                 if (! isset($tcpField[$key])) {
 
-                     $tcpParams[$key] = $value;
 
-                     unset($param[$key]);
 
-                 }
 
-             }
 
-             $param['params'] = $tcpParams;
 
-         }
 
-         
 
-         if (! isset($param['oauth_signature'])) {
 
-             $param['oauth_signature'] = self::generateSig($param);
 
-         }
 
-         
 
-         $result = '';
 
-         
 
-         if ($this->oauth_debug) {
 
-             $this->apiStart();
 
-         }
 
-         switch ($method) {
 
-             case 'TCP':
 
-                 $result = self::tcp($param);
 
-                 break;
 
-             case 'GET':
 
-                 $url = $url . '?' . http_build_query($param);
 
-                 $result = self::http($url, $method);
 
-                 break;
 
-             
 
-             case 'POST':
 
-                 $postdata = http_build_query($param);
 
-                 $result = self::http($url, $method, $postdata);
 
-                 break;
 
-             
 
-             default:
 
-                 return FALSE;
 
-                 break;
 
-         }
 
-         
 
-         if ($this->oauth_debug) {
 
-             $this->apiStop();
 
-             $this->apiSpent($this->appId, $param['method']);
 
-         }
 
-         
 
-         $result = json_decode($result, TRUE);
 
-         if (empty($result)) {
 
-             $this->_setGWError();
 
-             return FALSE;
 
-         }
 
-         
 
-         $response = array();
 
-         if ($method == 'TCP') {
 
-             $response = $result['response'];
 
-         } else {
 
-             $response = $result;
 
-         }
 
-         //check error
 
-         if (! isset($response['return_code']) || $response['return_code'] != 0) {
 
-             $this->_setGWError($response);
 
-             return FALSE;
 
-         }
 
-         return $response;
 
-     }
 
-     
 
-     private function generateSig ($params, $secret = '')
 
-     {
 
-         if (empty($secret)) {
 
-             $secret = $this->appSecret;
 
-         }
 
-         $str = '';
 
-         ksort($params);
 
-         foreach ($params as $k => $v) {
 
-             if (! is_array($v)) {
 
-                 $str .= "$k=$v";
 
-             } else {
 
-                 ksort($v);
 
-                 $str .= "$k=" . json_encode($v);
 
-             }
 
-         }
 
-         return bin2hex(hash_hmac('sha1', $str, $secret, TRUE));
 
-     }
 
-     
 
-     public function setParam ($key, $value)
 
-     {
 
-         $this->params[$key] = $value;
 
-     }
 
-     
 
-     public function tcp ($param)
 
-     {
 
-         $sock = socket_create(AF_INET, SOCK_STREAM, 0);
 
-         if (FALSE === $sock) {
 
-             return FALSE;
 
-         }
 
-         
 
-         socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, array(
 
-             'sec' => $this->systemParam['timeout'] , 
 
-             'usec' => 0
 
-         ));
 
-         socket_set_option($sock, SOL_SOCKET, SO_SNDTIMEO, array(
 
-             'sec' => $this->systemParam['timeout'] , 
 
-             'usec' => 0
 
-         ));
 
-         
 
-         $result = socket_connect($sock, $this->systemParam['gatewayHost'], $this->systemParam['gatewayPort']);
 
-         if (FALSE === $result) {
 
-             socket_close($sock);
 
-             return FALSE;
 
-         }
 
-         
 
-         $data = json_encode($param);
 
-         $len = dechex(strlen($data));
 
-         $data = sprintf('%06s%s', $len, $data);
 
-         
 
-         $result = socket_write($sock, $data);
 
-         if (FALSE === $sock) {
 
-             socket_close($sock);
 
-             return FALSE;
 
-         }
 
-         
 
-         $data = socket_read($sock, 6);
 
-         if (FALSE === $data) {
 
-             socket_close($sock);
 
-             return FALSE;
 
-         }
 
-         
 
-         $len = hexdec($data);
 
-         $data = socket_read($sock, $len);
 
-         if (FALSE === $data) {
 
-             socket_close($sock);
 
-             return FALSE;
 
-         }
 
-         
 
-         socket_close($sock);
 
-         return $data;
 
-     }
 
-     
 
-     /** 
 
-      * Make an HTTP request 
 
-      * 
 
-      * @return string API results 
 
-      */
 
-     public function http ($url, $method = 'GET', $postfields = FALSE)
 
-     {
 
-         $this->http_info = array();
 
-         $ci = curl_init();
 
-         /* Curl settings */
 
-         curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
 
-         curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->systemParam['connectTimeout']);
 
-         curl_setopt($ci, CURLOPT_TIMEOUT, $this->systemParam['timeout']);
 
-         curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
 
-         curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
 
-         
 
-         curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
 
-         curl_setopt($ci, CURLOPT_HEADERFUNCTION, array(
 
-             $this , 
 
-             'getHeader'
 
-         ));
 
-         curl_setopt($ci, CURLOPT_HEADER, FALSE);
 
-         
 
-         switch ($method) {
 
-             case 'POST':
 
-                 curl_setopt($ci, CURLOPT_POST, TRUE);
 
-                 if (! empty($postfields)) {
 
-                     curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
 
-                     //echo "=====post data======\r\n";
 
-                 //echo $postfields;
 
-                 }
 
-                 break;
 
-             case 'DELETE':
 
-                 curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
 
-                 if (! empty($postfields)) {
 
-                     $url = "{$url}?{$postfields}";
 
-                 }
 
-                 break;
 
-         }
 
-         
 
-         $header_array = array();
 
-         $header_array2 = array();
 
-         foreach ($header_array as $k => $v)
 
-             array_push($header_array2, $k . ': ' . $v);
 
-         
 
-         curl_setopt($ci, CURLOPT_HTTPHEADER, $header_array2);
 
-         curl_setopt($ci, CURLINFO_HEADER_OUT, FALSE);
 
-         
 
-         //echo $url."<hr/>"; 
 
-         
 
-         curl_setopt($ci, CURLOPT_URL, $url);
 
-         
 
-         $response = curl_exec($ci);
 
-         $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
 
-         $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
 
-         $this->url = $url;
 
-         curl_close($ci);
 
-         return $response;
 
-     }
 
-     
 
-     /** 
 
-      * Get the header info to store. 
 
-      * 
 
-      * @return int 
 
-      */
 
-     public function getHeader ($ch, $header)
 
-     {
 
-         $i = strpos($header, ':');
 
-         if (! empty($i)) {
 
-             $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
 
-             $value = trim(substr($header, $i + 2));
 
-             $this->http_header[$key] = $value;
 
-         }
 
-         return strlen($header);
 
-     }
 
-     
 
-     private function _setOAuthError ($err = null)
 
-     {
 
-         if (empty($err)) {
 
-             $this->lastErrorCode = 'unknow';
 
-             $this->lastErrorMsg = 'unkonw';
 
-         } else {
 
-             $this->lastErrorCode = @$err['error'];
 
-             $this->lastErrorMsg = @$err['error_description'];
 
-         }
 
-     }
 
-     
 
-     private function _setGWError ($response = null)
 
-     {
 
-         if (empty($response)) {
 
-             $this->lastErrorCode = 'unknow';
 
-             $this->lastErrorMsg = 'unkonw';
 
-         } else {
 
-             $this->lastErrorCode = @$response['return_code'];
 
-             $this->lastErrorMsg = @$response['return_message'];
 
-         }
 
-     }
 
-     
 
-     private function _clearError ()
 
-     {
 
-         $this->lastErrorCode = 0;
 
-         $this->lastErrorMsg = '';
 
-     }
 
-     
 
-     public function getLastErrCode ()
 
-     {
 
-         return $this->lastErrorCode;
 
-     }
 
-     
 
-     public function getLastErrMsg ()
 
-     {
 
-         return $this->lastErrorMsg;
 
-     }
 
-     
 
-     public function getExecTime ()
 
-     {
 
-         return $this->execTime;
 
-     }
 
-     
 
-     private function apiStart ()
 
-     {
 
-         $this->apiStartTime = microtime(TRUE);
 
-     }
 
-     
 
-     private function apiStop ()
 
-     {
 
-         $this->apiStopTime = microtime(TRUE);
 
-     }
 
-     
 
-     private function apiSpent ($appid, $api)
 
-     {
 
-         $url = 'http://log.ibw.sdo.com/apipool.jpg?';
 
-         $spent = round(($this->apiStopTime - $this->apiStartTime) * 1000, 1);
 
-         $this->execTime = $spent;
 
-         $params = array();
 
-         $params['appid'] = $appid;
 
-         $params['api'] = $api;
 
-         $params['time'] = $spent;
 
-         $url .= http_build_query($params);
 
-         @file_get_contents($url);
 
-     }
 
- }
 
- ?>
 
 
  |