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登录的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp3.2开发网页实现第三方登录

Thinkphp3.2添加QQ互联和新浪微博一键登录功能

php thinkphp3.2怎么做会员登录

onepill Android端

PHP实现QQ第三方登录代码

安卓Android第三方登录-QQ登录