/

ZBlogPHP实现QQ一键登录


大家用ZBlog的都知道,ZBlog官方好像是没有QQ登录的,然后又想在自己的博客上实现QQ登录怎么办呢?首先小编想到的是在网上找类似的插件,然后小编翻遍了各大论坛也没有找到,最后在某论坛找是找到了,但是悲伤的是收费的!

201604091460172353539825.png

身为IT人怎么可以被人家牵着鼻子走呢?所以,决定自己搭建。。。。


1、进入http://connect.qq.com 注册开发者,然后申请appid,appkey,相关信息,然后到下载登录SDK for PHP 

201604091460172581600896.png

然后在本地的PHP环境下配置相关信息,

S[AS@V(KLW}YILULJDMPIMF.png

输入appid,appkey,及callback地址   然后选择你要授权的列表,因为只做个人登录  所以我什么都没选  当然你也可以选,然后选择配置。

配置完了在API目录下的comm/inc.php中你可以查看到配置信息,也可以在这里直接修改,

%C~H5}US%${M3D84J%AOYOX.png

2、把API文件夹放到你ZBLOG的根目录下,然后给qq登录创建一个登录入口,比如原来的登录地址是/cmd.php?act=login,然后我就在cmd.php中新增了一个action=qqlogin的选项,还有一个action=loginloading 的回调地址,,

%I@S]Y4E`M{[(KM(~0SCX8I.png

然后在cmd.php 文件头部引入SDK 文件,在require './function/c_system_base.php';下面加一句

require_once("../TencentAPI/qqConnectAPI.php");

我的是这样的

然后 当你访问cmd.php?act=qqlogin 的时候  就会实例化QC登录类,然后调用qq_login,这样就拉起了官方授权,授权完成 会回调到cmd.php?act=loginloading 这里面来,然后我们再实例化一个QC类,并调用qq_callback,这样我们就能获取到access_token了,然后调用get_openid方法我们就能拿到腾讯的openid了,其实到这里都很简单,主要作用就是拿到那个openid,接下来就是验证那个openid 对应的用户是否存在在我们的用户数据库

3、我们打开ZBLOG的数据库中的 zbp_member表 (用户表),我们需要加一个字段用于保存QQ的openid

L158Y7$)50US3}7M}YOT9KV.png

openid 是默认32位的  所以我们字段的长度写成32就可以了,现在字段也有了,我们现在手动的把之前获取到的openid输入到一个用户表里面去   进行关联(openid可以在第2步的时候打印出来)。

然后我们现在要做的就是拿QQ登录成功后的openid去验证我们数据库里面用户的openid 如果存在  则登录该用户。

4、首先我们查看下系统验证的流程当输入用户名跟密码后,会把信息提交到cmd?act=verify 进行验证,在action=verify中呢调用了VerifyLogin方法(在lib/c_system_event.php里面)进行验证

1.png

然后我们继续追踪VerifyLogin方法,然后发现它调用了Verify_MD5(在lib/zblogphp.php里面)方法再次进行验证

2.png


继续定位Verify_MD5,它调用了一个GetMemberByName方法(在lib/zblogphp.php里面),到这里我想大家都明白了,GetMemberByName通过名称我们可以知道这个方法是通过用户名获取用户信息的3.png

好,我们继续往下看 ,打开了GetMemberByName函数,我原以为是进行查表操作,但是发现这里面并没有查表,很意外,但是发现有个membersbyname的数组,GetMemberByName是直接从该数组中去获取用户实例的    那我们是不是可以这样想  其实系统之前已经把所有用户信息拿到了,就是等着我们来查?

4.png

其实到这里呢,可以不用往后看了   它通过用户名获取一个成员信息  再通过成员id 获取最终的用户实例,然后就登录成功了!

5.png


4、弄清楚了这些那我们就知道怎么做了,复制GetMemberByID方法,更名为GetMemberByOpenid,,并将里面的参数ID换成我们的$openid,6.png


复制Verify_MD5方法,更名为Verify_QQLogin

7.png

并将里面原GetMemberByName方法换成GetMemberByOpenid,到这里已经算是成了一半了,然后回到c_system_event.php文件,复制VerifyLogin方法更名VerifyQQLogin,注意,我们所有的方法都需要带一个openid参数进来,,

8.png


好了  到这里算是已经完成了   然后我们就是调用这个方法就好了,现在回到cmd.php中  在回调地址cmd.php?act=loginloading中完成我们函数的调用,

并传入参数获取的openid参数

9.png

5、到这里所有的验证步骤已经写完了  然后现在就是我们的网站接入了,现在我们的登录页面上放上QQ登录按钮,然后点击按钮调用js代码
        self.location='cmd.php?act=qqlogin';


6、最后也是最重要的一点就是,需要在c_system_base.php中声明qqlogin和loading两个action,不然会报没有权限的错误

11.png

    好了到这里,Zblog QQ登录接入教程就完成了,欢迎大家指正


发布评论

热门评论区: