当前位置:首页 > PHP教程 > php高级应用 > 列表

php QQ第三方登陆SDK程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-27 16:20:47 浏览: 评论:0 

自己重写的一个php QQ第三方登陆SDK程序代码,官方的不敢恭维了所以自己再写了一个,主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库,反正自己都写了一个了,就拿出来分享下.

什么也不多说,直接上代码,代码如下:

  1. <?php 
  2.  
  3. /** 
  4.  
  5. * QQ开发平台 SDK 
  6.  
  7. * 作者:偶尔陶醉 
  8.  
  9. * blog: www.phpfensi.com 
  10.  
  11. */  
  12.  
  13. class Qq_sdk{  
  14.  
  15.  
  16.  
  17. //配置APP参数 
  18.  
  19. private $app_id = 你的APP ID;  
  20.  
  21. private $app_secret = ‘你的APP_secret’;  
  22.  
  23. private $redirect = 你的回调地址; 
  24.  
  25.  
  26.  
  27. function __construct()  
  28.  
  29. {  
  30.  
  31.  
  32.  
  33. }  
  34.  
  35.  
  36.  
  37. /** 
  38.  
  39. * [get_access_token 获取access_token] 
  40.  
  41. * @param [string] $code [登陆后返回的$_GET['code']] 
  42.  
  43. * @return [array] [expires_in 为有效时间 , access_token 为授权码 ; 失败返回 error , error_description ] 
  44.  
  45. */  
  46.  
  47. function get_access_token($code)  
  48.  
  49. {  
  50.  
  51. //获取access_token 
  52.  
  53. $token_url = ‘https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&’ 
  54.  
  55. . ‘client_id=’ . $this->app_id . ‘&redirect_uri=’ . urlencode($this->redirect)//回调地址 
  56.  
  57. . ‘&client_secret=’ . $this->app_secret . ‘&code=’ . $code;  
  58.  
  59. $token = array();  
  60.  
  61. //expires_in 为access_token 有效时间增量  
  62.  
  63. parse_str($this->_curl_get_content($token_url), $token);  
  64.  
  65.  
  66.  
  67. return $token;  
  68.  
  69. }  
  70.  
  71.  
  72.  
  73. /** 
  74.  
  75. * [get_open_id 获取用户唯一ID,openid] 
  76.  
  77. * @param [string] $token [授权码] 
  78.  
  79. * @return [array] [成功返回client_id 和 openid ;失败返回error 和 error_msg] 
  80.  
  81. */  
  82.  
  83. function get_open_id($token)  
  84.  
  85. {  
  86.  
  87. $str = $this->_curl_get_content(‘https://graph.qq.com/oauth2.0/me?access_token=’ . $token); 
  88.  
  89. if (strpos($str, “callback”) !== false)  
  90.  
  91. {  
  92.  
  93. $lpos = strpos($str, “(“);  
  94.  
  95. $rpos = strrpos($str, “)”);  
  96.  
  97. $str = substr($str$lpos + 1, $rpos – $lpos -1);  
  98.  
  99. }  
  100.  
  101. $user = json_decode($str, TRUE);  
  102.  
  103.  
  104.  
  105. return $user;  
  106.  
  107. }  
  108.  
  109.  
  110.  
  111. /** 
  112.  
  113. * [get_user_info 获取用户信息] 
  114.  
  115. * @param [string] $token [授权码] 
  116.  
  117. * @param [string] $open_id [用户唯一ID] 
  118.  
  119. * @return [array] [ret:返回码,为0时成功。msg为错误信息,正确返回时为空。...params] 
  120.  
  121. */  
  122.  
  123. function get_user_info($token$open_id)  
  124.  
  125. {  
  126.  
  127.  
  128.  
  129. //组装URL 
  130.  
  131. $user_info_url = ‘https://graph.qq.com/user/get_use 
  132. r_info?’ 
  133.  
  134. . ‘access_token=’ . $token  
  135.  
  136. . ‘&oauth_consumer_key=’ . $this->app_id  
  137.  
  138. . ‘&openid=’ . $open_id  
  139.  
  140. . ‘&format=json’;  
  141.  
  142.  
  143.  
  144. $info = json_decode($this->_curl_get_content($user_info_url), TRUE);  
  145.  
  146.  
  147.  
  148. return $info;  
  149.  
  150. }  
  151.  
  152. private function _curl_get_content($url)  
  153.  
  154. {  
  155.  
  156. $ch = curl_init();  
  157.  
  158. curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
  159.  
  160. curl_setopt($ch, CURLOPT_URL, $url);  
  161.  
  162. //设置超时时间为3s 
  163. //开源代码phpfensi.com 
  164. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3);  
  165.  
  166. $result = curl_exec($ch);  
  167.  
  168. curl_close($ch);  
  169. return $result;  
  170. /* end of Qq_sdk.php */  
  171. ?> 

使用方法:在你网站上放置超链接,地址为:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=你的APP_ID&redirect_uri=你的回调地址.

在回调地址上调用我上面这个qq_sdk即可.

demo代码如下:

  1. if(emptyempty($_GET['code']))
  2. {
  3. exit(‘参数非法’);
  4. }  
  5. include(‘qq_sdk’);  
  6.  
  7. $qq_sdk = new Qq_sdk();  
  8.  
  9. $token = $qq_sdk->get_access_token($_GET['code']);  
  10.  
  11. print_r($token);  
  12. $open_id = $qq_sdk->get_open_id($token['access_token']);  
  13.  
  14. print_r($open_id);   
  15.  
  16. $user_info = $qq_sdk->get_user_info($token['access_token'], $open_id['openid']);  
  17.  
  18. print_r($user_info); 

Tags: QQ第三方登陆 SDK程序代码

分享到: