php qq授权_网站接入QQ登录(PHP版)【最新教程 05.14更新】,亲身失败百次的总结...

开发阶段(偏前端的同学可以查看 JS版 教程)

3.1. QQ互联 官网提供了 SDK 以及对应的 示例代码,但是为了帮助同学们更好理解,我进行了部分删减,力求最简单的方法实现目的。

e28eb101c32b

官方SDK

3.2. 因为是写教程,所以代码就尽量简单明了一点。实际上 'PHP' 网站接入 'QQ登录' 非常简单,原则上只需要自己编辑如下图所示的 2个 'PHP' 脚本:

e28eb101c32b

Code

callback.php # 用于【QQ互联】中已经通过审核的回调地址

index.php # 用于需要接入【QQ登录】的网站入口

3.3. 复制 QQ互联 官方 SDK 包中的 'API' 目录到自己的 'Web根目录',生成如下所示的 'Web目录' 结构:

# 'D:/www/website/'

..............other statis................

~~~~~/API <<<<<< 官方 SDK 中的文件夹

......................other statis..............

~~~~~callback.php <<<<<< 回调地址文件

~~~~~index.php <<<<<< 网站入口

3.4. 在 'API' 的子目录 '/comm' 下新建 'inc.php',输入以下内容:

<?php die('forbidden'); ?> // 防止恶意访问文件内容,下面的内容不能使用换行符

{"appid":"改成你自己的AppID","appkey":"改成你自己的AppKey","callback":"改成你已经通过审核的回调地址","scope":"get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,get_tenpay_addr","errorReport":false,"storageType":"file","host":"localhost","user":"root","password":"root","database":"test"}

3.5. 在 'index.php' 文件中输入以下内容:

require_once('./API/qqConnectAPI.php'); // 'qqConnectAPI.php'中已经启用了 session

if (!empty($_SESSION['user_info'])) // 检查是否使用'QQ登录'过网站

{

$qc=new QC;

$qc->qq_login(); // 跳转到'QQ登录'的界面

exit;

}

$user=json_decode($_SESSION['user_info'],true);

var_dump($user);

?>

......................other HTML code..............

3.6. 在 'callback.php' 文件中输入以下内容:

require_once('./API/qqConnectAPI.php');

define('USERLIST','./userList.json'); // 本地缓存登录的、已经授权网站的'QQ用户'

$qc=new QC();

$access_token=$qc->qq_callback();

$open_id=$qc->get_openid();

/**

非常重要的一行代码,

因为后面需要获取QQ用户的信息,

所以需要使用前面确认登录的、已经授权网站的'QC'实例

**/

$qc=new QC($access_token,$open_id);

$storage=[];

if(is_file(USERLIST)) $storage=json_decode(file_get_contents(USERLIST),true);

if(count($storage)){

if (array_key_exists($open_id,$storage)) {

/**

检查当前用户是否自定义的过期时间

**/

if($storage[$open_id]['expires']>$_SERVER['REQUEST_TIME']){

$_SESSION['user_info']=json_encode([

'username'=>$storage[$open_id]['username'],

'_id'=>$storage[$open_id]['_id']

]);

header('location:http://www.example.com/index.php'); // 填写上面'index.php'对应的网站入口地址

exit;

}

}

}

$user_info=$qc->get_user_info(); // 获取'QQ用户'的基本信息

$storage[$open_id]=[

'accessToken'=>$access_token,

'username'=>$user_info["nickname"],

'expires'=>$_SERVER['REQUEST_TIME']+3600*3,

'_id'=>strval($_SERVER['REQUEST_TIME']) // 自建'QQ用户ID',用于网站内部查询缓存

];

$_SESSION['user_info']=json_encode([

'username'=>$user_info['nickname'],

'_id'=>$storage[$open_id]['_id']

]);

file_put_contents(USERLIST,json_encode($storage));

header('location:http://www.example.com/index.php'); // 填写上面'index.php'对应的网站入口地址

exit;

3.7. 最后,再回过头去检查 '3.4小节' 提到的 'inc.php' 中设置的 'appid'、'appkey'、'callback' 是否与 QQ互联 中通过审核的网站应用信息一致。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值