/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中去掉 http://open.t.qq.com/api/ 后面剩余的部分 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Tencent_Weibo::RETURN_JSON|OpenSDK_Tencent_Weibo::RETURN_XML $format 调用格式 */ public static function call($command , $params=array() , $method = 'GET' , $multi=false ,$decode=true , $format=self::RETURN_JSON) { if($format == self::RETURN_XML) ; else $format == self::RETURN_JSON; $params['format'] = $format; //去掉空数据 foreach($params as $key => $val) { if(strlen($val) == 0) { unset($params[$key]); } } $params['oauth_token'] = self::getParam(self::ACCESS_TOKEN); $response = self::request( 'http://open.t.qq.com/api/'.ltrim($command,'/') , $method, $params, $multi); if($decode) { if($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //parse xml2array later return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中去掉 http://api.t.sohu.com/ 后面剩余的部分 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Sina_Weibo::RETURN_JSON|OpenSDK_Sina_Weibo::RETURN_XML $format 调用格式 */ public static function call($command, $params = array(), $method = 'GET', $multi = false, $decode = true, $format = 'json') { if ($format == self::RETURN_XML) { } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['oauth_token'] = self::getParam(self::ACCESS_TOKEN); $response = self::request('http://api.t.sohu.com/' . ltrim($command, '/') . '.' . $format, $method, $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //其实没必要。用json即可 return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * http://wiki.open.qq.com/wiki/API%E5%88%97%E8%A1%A8 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中去掉 http://[域名或IP]/ 后面剩余的部分 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Tencent_Weibo::RETURN_JSON|OpenSDK_Tencent_Weibo::RETURN_XML $format 调用格式使用默认的json即可 */ public static function call($command, $params = array(), $method = 'GET', $multi = false, $decode = true, $format = 'json') { if ($format == self::RETURN_XML) { // DO NOTHING } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['appid'] = self::$client_id; $params['openid'] = self::getParam(self::OAUTH_OPENID); $params['openkey'] = self::getParam(self::OAUTH_OPENKEY); !isset($params['pf']) && ($params['pf'] = self::getParam(self::OAUTH_PF)); $params['userip'] = self::getRemoteIp(); $params['format'] = $format; ksort($params); $signarr = array(); foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); continue; } $signarr[] = "{$key}={$val}"; } $signstr = strtoupper($method) . '&' . rawurlencode('/' . ltrim($command, '/')) . '&' . rawurlencode(implode('&', $signarr)); $params['sig'] = base64_encode(OpenSDK_Util::hash_hmac('sha1', $signstr, self::$client_secret . '&', true)); if (self::$report) { $start_time = self::microtime(); } $response = self::request(self::$protocol . '://' . self::$host . '/' . ltrim($command, '/'), $method, $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { $rt = OpenSDK_Util::json_decode($response, true); if (self::$report) { self::statReport($start_time, array('appid' => self::$client_id, 'pf' => $params['pf'], 'rc' => $rt['ret'], 'svr_name' => self::$host, 'interface' => $command, 'protocol' => self::$protocol, 'method' => $method)); } return $rt; } else { //todo parse xml2array later //没必要。用json即可! return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $method 官方说明中的method * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Top_Open::RETURN_JSON|OpenSDK_Top_Open::RETURN_XML $format 调用格式 */ public static function call($method, $params = array(), $multi = false, $decode = true, $format = self::RETURN_JSON) { if ($format == self::RETURN_XML) { } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['session'] = self::getParam(self::ACCESS_TOKEN); $params['format'] = $format; $params['method'] = $method; $params['timestamp'] = date('Y-m-d H:i:s'); $params['app_key'] = self::$client_id; $params['v'] = '2.0'; $params['sign_method'] = 'md5'; $params['sign'] = self::createSign($params); //使用http方式访问,性能更高 $response = self::request('http://gw.api.taobao.com/router/rest', 'POST', $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //没必要。用json即可! return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中去掉 https://graph.qq.com/ 后面剩余的部分 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Sina_Weibo::RETURN_JSON|OpenSDK_Sina_Weibo::RETURN_XML $format 调用格式 */ public static function call($command, $params = array(), $method = 'GET', $multi = false, $decode = true, $format = 'json') { if ($format == self::RETURN_XML) { } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['access_token'] = self::getParam(self::ACCESS_TOKEN); //这里没有遵守 OAuth2.0的规范,规范参数应该是source $params['oauth_consumer_key'] = self::$client_id; $params['openid'] = self::getParam(self::OPENID); $params['format'] = $format; $response = self::request('https://graph.qq.com/' . ltrim($command, '/'), $method, $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //没必要。用json即可! return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * http://wiki.open.t.qq.com/index.php/API%E6%96%87%E6%A1%A3 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中去掉 http://open.t.qq.com/api/ 后面剩余的部分 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Tencent_Weibo::RETURN_JSON|OpenSDK_Tencent_Weibo::RETURN_XML $format 调用格式 */ public static function call($command, $params = array(), $method = 'GET', $multi = false, $decode = true, $format = 'json') { if ($format == self::RETURN_XML) { // DO NOTHING } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['oauth_consumer_key'] = self::$client_id; $params['access_token'] = self::getParam(self::ACCESS_TOKEN); $params['openid'] = self::getParam(self::OAUTH_OPENID); $params['oauth_version'] = self::$version; $params['scope'] = 'all'; $params['appfrom'] = 'OpenSDK2.0beta'; // $params['seqid'] = time(); $params['serverip'] = $_SERVER['SERVER_ADDR']; $params['format'] = $format; $response = self::request('https://open.t.qq.com/api/' . ltrim($command, '/'), $method, $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //没必要。用json即可! return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中的方法名 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Sina_Weibo::RETURN_JSON|OpenSDK_Sina_Weibo::RETURN_XML $format 调用格式 */ public static function call($command, $params = array(), $method = 'POST', $multi = false, $decode = true, $format = 'json') { if ($format == self::RETURN_XML) { } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['access_token'] = self::getParam(self::ACCESS_TOKEN); // $params['source'] = self::$client_id; $params['method'] = $command; $params['format'] = $format; $params['v'] = self::API_VERSION; $params['call_id'] = microtime(true); $params['sig'] = self::sigCreate($params); $response = self::request('http://api.renren.com/restserver.do', $method, $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //没必要。用json即可! return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 使用Session key 通过http 接口调用,这样更快。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中的方法名 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组 * @param OpenSDK_Sina_Weibo::RETURN_JSON|OpenSDK_Sina_Weibo::RETURN_XML $format 调用格式 */ public static function call($command, $params = array(), $method = 'POST', $multi = false, $decode = true, $format = 'json') { if ($format == self::RETURN_XML) { } else { $format == self::RETURN_JSON; } //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } // $params['access_token'] = self::getParam(self::ACCESS_TOKEN); // $params['source'] = self::$client_id; $params['format'] = $format; $params['session_key'] = self::getParam(self::SESSION_KEY); //百度为什么不用数字时间戳? 这里可能你有时区问题! $params['timestamp'] = date('Y-m-d H:i:s'); $params['sign'] = self::sigCreate($params); $response = self::request('http://openapi.baidu.com/rest/2.0/' . ltrim($command, '/'), $method, $params, $multi); if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //没必要。用json即可! return $response; } } else { return $response; } }
/** * 统一调用接口的方法 * 照着官网的参数往里填就行了 * 需要调用哪个就填哪个,如果方法调用得频繁,可以封装更方便的方法。 * * 如果上传文件 $method = 'POST'; * $multi 是一个二维数组 * * array( * '{fieldname}' => array( //第一个文件 * 'type' => 'mine 类型', * 'name' => 'filename', * 'data' => 'filedata 字节流', * ), * ...如果接受多个文件,可以再加 * ) * * @param string $command 官方说明中去掉 http://open.t.qq.com/api/ 后面剩余的部分 * @param array $params 官方说明中接受的参数列表,一个关联数组 * @param string $method 官方说明中的 method GET/POST * @param false|array $multi 是否上传文件 false:普通post array: array ( '{fieldname}'=>'/path/to/file' ) 文件上传 * @param bool $decode 是否对返回的字符串解码成数组,默认true * @param OpenSDK_Tencent_Weibo::RETURN_JSON|OpenSDK_Tencent_Weibo::RETURN_XML $format 调用格式 */ public static function call($command, $params = array(), $method = 'GET', $multi = false, $decode = true, $format = self::RETURN_JSON) { if ($format == self::RETURN_XML) { } else { $format == self::RETURN_JSON; } $params['format'] = $format; $oauth_token = self::getParam(self::ACCESS_TOKEN); //使用OAuth鉴权 if ($oauth_token) { //去掉空数据 foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); } } $params['oauth_token'] = $oauth_token; $response = self::request('http://open.t.qq.com/api/' . ltrim($command, '/'), $method, $params, $multi); } else { $params['appid'] = self::$_appkey; $params['openid'] = self::getParam(self::OAUTH_OPENID); $params['openkey'] = self::getParam(self::OAUTH_OPENKEY); $params['reqtime'] = self::getTimestamp(); $params['wbversion'] = 1; $params['pf'] = 'tapp'; ksort($params); $signarr = array(); foreach ($params as $key => $val) { if (strlen($val) == 0) { unset($params[$key]); continue; } $signarr[] = "{$key}={$val}"; } $signstr = strtoupper($method) . '&' . rawurlencode('/api/' . ltrim($command, '/')) . '&' . rawurlencode(implode('&', $signarr)); $params['sig'] = base64_encode(OpenSDK_Util::hash_hmac('sha1', $signstr, self::$_appsecret . '&', true)); $response = self::getOAuth()->http('http://open.t.qq.com/api/' . ltrim($command, '/'), $params, $method, $multi); } if ($decode) { if ($format == self::RETURN_JSON) { return OpenSDK_Util::json_decode($response, true); } else { //todo parse xml2array later //其实没必要。用json即可 return $response; } } else { return $response; } }