自己重寫的一個php QQ第三方登陸SDK程序代碼,官方的不敢恭維了所以自己再寫了一個,主要是考慮到QQ的PHP SDK寫的真是太爛了,純屬是普及API知識,而不是到手就可以部署的類庫,反正自己都寫了一個了,就拿出來分享下.
什么也不多說,直接上代碼,代碼如下:
- <?php
- /**
- * QQ開發平臺 SDK
- * 作者:偶爾陶醉
- * blog: m.survivalescaperooms.com
- */
- class Qq_sdk{
- //配置APP參數
- private $app_id = 你的APP ID;
- private $app_secret = ‘你的APP_secret’;
- private $redirect = 你的回調地址;
- function __construct()
- {
- }
- /**
- * [get_access_token 獲取access_token]
- * @param [string] $code [登陸后返回的$_GET['code']]
- * @return [array] [expires_in 為有效時間 , access_token 為授權碼 ; 失敗返回 error , error_description ]
- */
- function get_access_token($code)
- {
- //獲取access_token
- $token_url = ‘https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&’
- . ‘client_id=’ . $this->app_id . ‘&redirect_uri=’ . urlencode($this->redirect)//回調地址
- . ‘&client_secret=’ . $this->app_secret . ‘&code=’ . $code;
- $token = array();
- //expires_in 為access_token 有效時間增量
- parse_str($this->_curl_get_content($token_url), $token);
- return $token;
- }
- /**
- * [get_open_id 獲取用戶唯一ID,openid]
- * @param [string] $token [授權碼]
- * @return [array] [成功返回client_id 和 openid ;失敗返回error 和 error_msg]
- */
- function get_open_id($token)
- {
- $str = $this->_curl_get_content(‘https://graph.qq.com/oauth2.0/me?access_token=’ . $token);
- if (strpos($str, “callback”) !== false)
- {
- $lpos = strpos($str, “(“);
- $rpos = strrpos($str, “)”);
- $str = substr($str, $lpos + 1, $rpos – $lpos -1);
- }
- $user = json_decode($str, TRUE);
- return $user;
- }
- /**
- * [get_user_info 獲取用戶信息]
- * @param [string] $token [授權碼]
- * @param [string] $open_id [用戶唯一ID]
- * @return [array] [ret:返回碼,為0時成功。msg為錯誤信息,正確返回時為空。...params]
- */
- function get_user_info($token, $open_id)
- {
- //組裝URL
- $user_info_url = ‘https://graph.qq.com/user/get_use
- r_info?’
- . ‘access_token=’ . $token
- . ‘&oauth_consumer_key=’ . $this->app_id
- . ‘&openid=’ . $open_id
- . ‘&format=json’;
- $info = json_decode($this->_curl_get_content($user_info_url), TRUE);
- return $info;
- }
- private function _curl_get_content($url)
- {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
- curl_setopt($ch, CURLOPT_URL, $url);
- //設置超時時間為3s
- //開源代碼Vevb.com
- curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);
- $result = curl_exec($ch);
- curl_close($ch);
- return $result;
- }
- }
- /* end of Qq_sdk.php */
- ?>
使用方法:在你網站上放置超鏈接,地址為:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=你的APP_ID&redirect_uri=你的回調地址.
在回調地址上調用我上面這個qq_sdk即可.
demo代碼如下:
- if(emptyempty($_GET['code']))
- {
- exit(‘參數非法’);
- }
- include(‘qq_sdk’);
- $qq_sdk = new Qq_sdk();
- $token = $qq_sdk->get_access_token($_GET['code']);
- print_r($token);
- $open_id = $qq_sdk->get_open_id($token['access_token']);
- print_r($open_id);
- $user_info = $qq_sdk->get_user_info($token['access_token'], $open_id['openid']);
- print_r($user_info);
|
新聞熱點
疑難解答