本文实例讲述了thinkPHP5项目中实现QQ第三方登录功能。分享给大家供大家参考,具体如下:
最近用thinkPHP 5框架做了一个项目,在开发过程中需要用到第三方登录,腾讯官方给的案例是几个文件相互包含实现的,放到tp5里面很悲催的发现在控制器中不能通过include或者require完成预期功能,想要用腾讯官方封的类就必须对其进行修改,修改如下:
1. 找到官方SDK里面的核心文件
框架外使用的时候是include 'qqConnectAPI.php'
,打开这个文件可以看到它是包含了另外几个文件的,comm文件夹下的几个文件无非就是定义一些常量,记录一下你的APP KEY这些信息,都无关紧要,只要把class文件夹下的几个类文件放到tp5里面就好了,而且仔细看一下代码会发现其实只要拿到class文件夹的5个类就完全可以实现功能了。
2. 放到tp框架里
tp5推荐将第三方的东西,同时又不是composer安装的统一放到extend目录下,因为可能以后还要做其他扩展,这里将qq登录相关的单独建一个qq_connect文件夹,
可以看到里面只有五个类,另外注意,按照psr4规范,类名要跟文件名一致,所以要把文件名改一下,同时加上命名空间extend\qqlogin,tp5所有的类都要有命名空间。例如:
3. 控制器调用
改造完成,可以在控制器里面使用了,附上代码入下:
public function qqLogin(){
$oauth = new \qq_connect\Oauth();
$oauth->qq_login();
}
public function qqCallback(){
$oauth = new \qq_connect\Oauth();
$accesstoken = $oauth->qq_callback();
//获取open_id
$openid = $oauth->get_openid();
//设置有效时长(7天)
cookie('accesstoken', $accesstoken, 24*60*60*7);
cookie('openid', $openid, 24*60*60*7);
//根据accesstoken和open_id获取用户的基本信息
$qc = new \qq_connect\QC($accesstoken,$openid);
$userinfo = $qc->get_user_info();
return $userinfo;
}