用PHP实现网站的QQ登录功能

170次阅读
没有评论

第一步、创建应用

登录 QQ 互联创建网站应用,QQ 互联地址:https://connect.qq.com

注意:申请前提是网站域名必须通过备案

用 PHP 实现网站的 QQ 登录功能

第二步、下载 SDK

下载官方 SDK 或者使用 composer 调用第三方 SDK

官方 sdk 下载路径:https://wiki.connect.qq.com/sdk 下载

Composer SDK 安装命令:composer require jonexyz/qqconnect

第三步、梳理 QQ 授权登录流程

  1. 实例化 QC 类 执行 qq_login() 方法,会生成一个 QQ 的登陆 URL,访问该 URL,进行授权登陆。
  2. 授权登陆成功,会携带 code 跳转至设置的回调地址,使用 qq_callback() 接收 code 值,(code 值是获取 access_token 的凭证),从而获取 access_token
  3. 凭借 access_token 获取 用户的 open_id
  4. 有了 access_token 与 open_id 执行 setKeysArr() 方法,设置接口的公共请求参数。
  5. 执行 get_user_info() 方法获取用户信息,写入数据表

 

第四步、代码示例

代码示例使用的是 jonexyz/qqconnect SDK,仅需实现 QQ 登录与回调两个方法即可

 

$appid = "102***947" // 应用 appid
$appkey = "FuMaaMwJT***ew0pP" // 应用 appkey
$callback = "https://www.***.cn/login/qcallback" // 应用授权回调地址
$scope = "get_user_info,add_share" // 申请获取的应用权限,多个以英文逗号相隔


use Jonexyz\QQConnect\QC;

    // qq 登录
    public function qq()
    {$qc = new QC($appid,$appkey,$callback,$scope);
       return redirect($qc->qq_login());
    }



    // 回调操作
    public function qqCallback(Request $request)
    {$qc = new QC($appid,$appkey,$callback,$scope);

        if(!$request->get('code')){if(cache('QC_userData')['openid']){$qc->setKeysArr($access_token, $openid);
                $info = $qc->get_user_info();
                $data = ['name'=>$info['nickname'], // 昵称
//                    ''=>$info['gender_type'], // 性别 1 男
//                    ''=>$info['province'], // 省份
//                    ''=>$info['city'], // 城市
//                    ''=>$info['figureurl_2'], // 头像
//                    ''=>$info['year'], // 出生年分
                ];
                
                // TODO 信息获取成功,保存用户数据,实现用户登录

                // 进入登陆成功页
                return redirect(url('user'));
            }else{
                // 授权回调失败,显示 404
                abort(404);
            }
        }else{$access_token = $qc->qq_callback();
        
            if($access_token){$openid = $qc->get_openid();

                $user = User::where('qq_openid',$openid)->first();

                if($user){
                    // TODO 信息获取成功,保存用户数据,实现用户登录
                    
                    // 缓存数据,access_token 有效期 30 天
                    cache('QC_userData',['access_token'=>$access_token,'openid'=>$openid], 29*24*3600);
                    // 进入登陆成功页
                    return redirect(url('user'));
                }else{
                    // 重新访问回调地址
                    return redirect($callback);
                }

            }else{return abort(404);
            }
        }
    }
正文完
有偿技术支持加微信
post-qrcode
 
评论(没有评论)
验证码