PHP QQ 登录接口应用

QQ 登录申请网址:  http://connect.qq.com/manage/info?id=1


  1. <?php   
  2. class qzone  
  3. {  
  4. var $appid = "***********";//换成您的  
  5. var $appkey = "**********";//换成您的  
  6.   
  7. //除去数组中的空值和签名模式  
  8. function filter($parameter)   
  9. {  
  10. $para = array();  
  11. while (list ($key$val) = each ($parameter))   
  12. {  
  13. if($key == "sign" || $key == "sign_type" || $val == "")  
  14. {  
  15. continue;  
  16. }  
  17. else  
  18. {  
  19. $para[$key] = $parameter[$key];  
  20. }  
  21. }  
  22. return $para;  
  23. }  
  24.   
  25. /** 
  26. * 生成请求代码 
  27. * @param String $callback 回调地址 
  28. */  
  29. function request($callback = '')  
  30. {  
  31. //必要参数,不要随便更改!!  
  32. $params = array();  
  33. $params["oauth_version"] = "1.0";  
  34. $params["oauth_signature_method"] = "HMAC-SHA1";  
  35. $params["oauth_timestamp"] = time();  
  36. $params["oauth_nonce"] = mt_rand();  
  37. $params["oauth_consumer_key"] = $this->appid;  
  38.   
  39. $sign = $this->sign($params"GET"."&".rawurlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token")."&"$this->appkey . '&');  
  40.   
  41. $url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token?".$this->format($params)."&"."oauth_signature=".rawurlencode($sign);  
  42.   
  43. $request = file_get_contents($url);//print_r($url);print_r($request);die;  
  44.   
  45. $result = array();  
  46.   
  47. parse_str($request$result);  
  48.   
  49. if (!isset($result['oauth_token']))  
  50. {  
  51. //错误返回输出  
  52. die();  
  53. }  
  54.   
  55. $_SESSION["qq_token"] = $result["oauth_token"];  
  56. $_SESSION["qq_secret"] = $result["oauth_token_secret"];  
  57.   
  58. //302跳转到授权页面  
  59. $redirect .= "http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize?oauth_consumer_key=".$this->appid."&oauth_token=".$result["oauth_token"]."&oauth_callback=".rawurlencode($callback);//die($redirect);  
  60. header("Location:$redirect");  
  61. }  
  62.   
  63. /** 
  64. * 响应操作 
  65. */  
  66. function respond()  
  67. {  
  68. $params = array();  
  69. $params["oauth_version"] = "1.0";  
  70. $params["oauth_signature_method"] = "HMAC-SHA1";  
  71. $params["oauth_timestamp"] = time();  
  72. $params["oauth_nonce"] = mt_rand();  
  73. $params["oauth_consumer_key"] = $this->appid;  
  74. $params["oauth_token"] = $_SESSION["qq_token"];  
  75. $params["oauth_vericode"] = $_REQUEST["oauth_vericode"];  
  76.   
  77. //echo "sig:$sig/n";  
  78. //echo "str:$str/n";  
  79.   
  80. $sign = $this->sign($params"GET"."&".rawurlencode("http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token")."&"$this->appkey. '&' . $_SESSION["qq_secret"]);  
  81.   
  82. $url = "http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token?".$this->format($params)."&"."oauth_signature=".rawurlencode($sign);  
  83.   
  84. $request = file_get_contents($url);  
  85.   
  86. $result = array();  
  87.   
  88. parse_str($request$result);  
  89.   
  90. if (isset($result["error_code"]))  
  91. {  
  92. return false;  
  93. }  
  94.   
  95. //验证签名  
  96. $key = $this->appkey;  
  97. $str = $_REQUEST["openid"] . trim($_REQUEST["timestamp"]);  
  98.   
  99. if ($_REQUEST["oauth_signature"] != $this->sign(array(), $str$key))  
  100. {  
  101. return false;  
  102. }  
  103.   
  104. $_SESSION["qq_token"] = $result["oauth_token"];  
  105. $_SESSION["qq_secret"] = $result["oauth_token_secret"];   
  106. $_SESSION["qq_openid"] = $result["openid"];  
  107.   
  108.   
  109. return true;  
  110. }  
  111.   
  112.   
  113. //链接字符串  
  114. function format($parameter)  
  115. {  
  116. $parameter = $this->filter($parameter);  
  117.   
  118. ksort($parameter);  
  119. reset($parameter);  
  120.   
  121. $params = '';  
  122. foreach ($parameter AS $key => $val)  
  123. {  
  124. $params .= "$key=$val&";  
  125. }  
  126.   
  127. $params = substr($params, 0, -1);  
  128. return $params;  
  129. }  
  130.   
  131. function sign($parameter$source$key)  
  132. {  
  133. $params = $source . rawurlencode($this->format($parameter));  
  134. //$key = $this->appkey . '&' . $secret;  
  135. $sign = "";  
  136. if (function_exists('hash_hmac'))  
  137. {  
  138. $sign = base64_encode(hash_hmac("sha1"$params$key, true));  
  139. }  
  140. else  
  141. {  
  142. $blocksize = 64;  
  143. $hashfunc = 'sha1';  
  144. if (strlen($key) > $blocksize)  
  145. {  
  146. $key = pack('H*'$hashfunc($key));  
  147. }  
  148. $key = str_pad($key,$blocksize,chr(0x00));  
  149. $ipad = str_repeat(chr(0x36),$blocksize);  
  150. $opad = str_repeat(chr(0x5c),$blocksize);  
  151. $hmac = pack(  
  152. 'H*',$hashfunc(  
  153. ($key^$opad).pack(  
  154. 'H*',$hashfunc(  
  155. ($key^$ipad).$params  
  156. )  
  157. )  
  158. )  
  159. );  
  160. $sign = base64_encode($hmac);  
  161. }  
  162.   
  163. return $sign;  
  164. }  
  165.   
  166. /** 
  167. * 远程获取数据 
  168. * $url 指定URL完整路径地址 
  169. * @param $input_charset 编码格式。默认值:空值 
  170. * @param $time_out 超时时间。默认值:60 
  171. * return 远程输出的数据 
  172. */  
  173. function getHttpRequest($url$access_token$access_token_secret$openid)  
  174. {  
  175. $sigstr = "GET"."&".rawurlencode("$url")."&";  
  176.   
  177. //必要参数, 不要随便更改!!  
  178. $params = $_GET;  
  179. $params["oauth_version"] = "1.0";  
  180. $params["oauth_signature_method"] = "HMAC-SHA1";  
  181. $params["oauth_timestamp"] = time();  
  182. $params["oauth_nonce"] = mt_rand();  
  183. $params["oauth_consumer_key"] = $this->appid;  
  184. $params["oauth_token"] = $access_token;  
  185. $params["openid"] = $openid;  
  186. unset($params["oauth_signature"]);  
  187.   
  188. $sign = $this->sign($params"GET"."&".rawurlencode("$url")."&"$this->appkey . '&' . $_SESSION["qq_secret"]);  
  189.   
  190. $url = $url."?".$this->format($params)."&"."oauth_signature=".rawurlencode($sign);  
  191.   
  192. $result = file_get_contents($url);  
  193.   
  194. return json_decode(str_replace(array("/n""/t"), ''$result), true);  
  195. }  
  196. }  
  197.   
  198. //---------------------------  
  199. ?>  
  200.   
  201. 使用方法  
  202. 请求代码  
  203. <?php   
  204. //---------------------------  
  205. //请求  
  206. $qzone = new qzone;  
  207. $qzone->request('域名/qzone/login');  
  208. //---------------------------  
  209. ?>  
  210. 接受代码  
  211. <?php   
  212. //---------------------------  
  213. //接收  
  214. if ($qzone->respond())  
  215. {  
  216. //如果成功,获取用户信息  
  217. $result = $qq->getHttpRequest("http://openapi.qzone.qq.com/user/get_user_info"$_SESSION["qq_token"], $_SESSION["qq_secret"], $_SESSION["qq_openid"]);  
  218.   
  219. //下面是数据库操作业务  
  220. }  
  221. //---------------------------  
  222. ?>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值