ThinkPHP第三方登录-QQ登录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP第三方登录-QQ登录相关的知识,希望对你有一定的参考价值。
参考:思梦教育
1、QQ互联(链接地址:https://connect.qq.com/index.html),进行开发者认证(未认证的情况下),有公司和个人两种认证方式,个人开发者选择个人认证就好,准备好身份证电子版。认证界面如图一,认证不做赘述。
(图一)
2、认证通过界面如图二,认证完,我们将创建应用如图三,选择创建网站应用,填写好个人信息如图四。
(图二)
(图三)
(图四)
3、应用创建好后,会有大约2天的认证时间,认证通过的情况下,可在应用管理下查看。成功创建的应用如图五
(图五)
4、代码部分,tp3.2版本,新建QqController.class.php,名称自拟,但是需要符合你的回调地址。
<?php /* * P:QQ登录 * U:shenlin * T:2017-10-18 * Q:297760026 * */ namespace Home\Controller; use Think\Controller; class QqController extends Controller{ //发起请求 public function qqsend(){ //参数 $url = "https://graph.qq.com/oauth2.0/authorize"; $param[‘response_type‘] = "code"; $param[‘client_id‘]="你的appid"; $param[‘redirect_uri‘] ="你的回调地址"; $param[‘scope‘] ="get_user_info"; //-------生成唯一随机串防CSRF攻击 $param[‘state‘] = md5(uniqid(rand(), TRUE)); $_SESSION[‘state‘] = $param[‘state‘]; //拼接url $param = http_build_query($param,"","&"); $url = $url."?".$param; header("Location:".$url); } //回调 public function qqback(){ $code = I(‘get.code‘); $state = I(‘get.state‘); if($code && $state == $_SESSION[‘state‘]){ //获取access_token $res = $this->getAccessToken($code,"你的appid","你的appkey"); dump($res); exit(); parse_str($res,$data); $access_token = $data[‘access_token‘]; $url = "https://graph.qq.com/oauth2.0/me?access_token = $access_token"; $open_res = $this->httpsRequest($url); if(strpos($open_res,"callback") !== false){ $lpos = strpos($open_res,"("); $rpos = strrpos($open_res,")"); $open_res = substr($open_res,$lpos + 1 ,$rpos - $lpos - 1); } $user = json_decode($open_res); $open_id = $user->openid; $url = "https://graph.qq.com/user/get_user_info?access_token=$access_token&oauth_consumer_key=你的appid&open_id = $open_id"; $user_info = $this->httpsRequest($url); //输出qq用户信息 dump($user_info); } $this->display(); } //通过Authorization Code获取Access Token public function getAccessToken($code,$app_id,$app_key){ $url="https://graph.qq.com/oauth2.0/token"; $param[‘grant_type‘]="authorization_code"; $param[‘client_id‘]=$app_id; $param[‘client_secret‘]=$app_key; $param[‘code‘]=$code; $param[‘redirect_uri‘]="你的回调地址"; $param =http_build_query($param,"","&"); $url=$url."?".$param; return $this->httpsRequest($url); } //httpsRequest public function httpsRequest($post_url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$post_url);//要访问的地址 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//执行结果是否被返回,0是返回,1是不返回 curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置超时 $res = curl_exec($ch);//执行并获取数据 return $res; curl_close($ch); } }
以上是关于ThinkPHP第三方登录-QQ登录的主要内容,如果未能解决你的问题,请参考以下文章