QQ互联,QQ第三方登录

1.获取Authorization code

private $app_id = 'xx';  
    private $app_secret = 'xx';  
    private $redirect = 'xx';

    /**
     * 登录地址
     */
    public function login() {
        $app_id   = $this->app_id;
        $back_url = $this->redirect;
        $url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id='.$app_id.'&redirect_uri='.$back_url;
        return json(['data' => $url]);//这里拼接的参数,放到地址栏会弹出登录QQ界面
    }

2.获取到的Authorization code 会在10分钟后失效,在第一步的回调地址.以get方式拿到Authorization code,然后通过Authorization code获取Access token.

/** 
     * [get_access_token 获取access_token] 
     * @param [string] $code [登陆后返回的$_GET['code']] 
     * @return [array] [expires_in 为有效时间 , access_token 为授权码 ; 失败返回 error , error_description ] 
     */  
    function get_access_token($code) {
        $token_url = 'https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&'  
            . 'client_id=' . $this->app_id . '&redirect_uri=' . $this->redirect . '&client_secret=' . $this->app_secret
            . '&code=' . $code;
        $token = array();  
        parse_str(file_get_contents($token_url), $token);  //parse_str将查询的字符串解析到变量
        return $token;  
    }  

3.使用Access token获取用户的Appid(Appid和QQ号一样,和用户是一一对应的)

/** 
     * [get_open_id 获取用户唯一ID,openid] 
     * @param [string] $token [授权码] 
     * @return [array] [成功返回client_id 和 openid ;失败返回error 和 error_msg] 
     */  
    function get_open_id($token) {  
        $str = file_get_contents('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;  
    }  

4.使用Access token 和appid获取用户的个人信息

/** 
     * [get_user_info 获取用户信息] 
     * @param [string] $token [授权码] 
     * @param [string] $open_id [用户唯一ID] 
     * @return [array] [ret:返回码,为0时成功。msg为错误信息,正确返回时为空。...params] 
     */  
    function get_user_info($token, $open_id)  {  
        $user_info_url = 'https://graph.qq.com/user/get_user_info?' . 'access_token=' . $token . '&oauth_consumer_key=' 
            . $this->app_id . '&openid=' . $open_id . '&format=json';  
        $info = json_decode(file_get_contents($user_info_url));  
        return $info;  
    } 

5.最后封装一个函数去分别调用他们就可以了

/**
     * 验证登录信息
     * @return json数据 登陆用户的信息
     */
    public function is_login(){
        if(isset($_GET['code'])) {  
            //qq获取信息  
            $token    = $this->get_access_token($_GET['code']);   
            $open_id  = $this->get_open_id($token['access_token']);  
            $info     = $this->get_user_info($token['access_token'] , $open_id['openid']);
            return json([
                'data' => $info, 
                'msg'  => "获取到QQ用户信息", 
                'code' => 200
                ]);
        }

        // ....................

    }

 

转载于:https://www.cnblogs.com/hanshuai0921/p/6628938.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值