PHP进阶-实现网站的QQ授权登录

授权登录是站点开发常见的应用场景,通过社交媒体一键授权可以跳过注册站点账户的繁琐操作。本文将讲解如何用PHP实现QQ授权登录。首先,我们需要申请QQ互联开发者账号获得APPID和密钥;接着,我们下载QQ官方SDK:PHP SDK v2.2 并完成安装部署;待API测试无误后,部署到正式环境并测试;最终实现QQ一键登录的效果。

一、QQ互联申请账号密钥

我们需要先申请 APPID 和 APPSECRET。

前往 QQ互联官网(connect.qq.com),注册用户,申请网站应用,填写网站的一些基本信息,完善资料的那一步非常重要。

域名:一定不能错。
回调地址:一定包含上面填写的完整域名,不能是子域名的关系,但回调地址的内容可以先随便写,后面我们需要根据实际配置修改。
网站备案号:根据实际填写。
提供者:我写的个人姓名。
网站图标:要和实际网站保持一致。

我们填写完成后点击申请,大概三个工作日会有结果,通过之后我们这个网站应用的APPID和APPSECRET就可以拿来使用了。


二、下载含Oauth接口的SDK

下载QQ官方SDK:PHP SDK v2.2 ,里面有我们需要的Oauth2接口。


三、调试SDK内API接口

我们把压缩包解压放置到我们的服务器项目根目录下(WordPress文件夹下),先测试一下里面的example文件夹的Oauth接口。

首先我们需要配置APPID和APPSECRET,服务器访问localhost或者外网浏览器访问域名下的install文件夹里的index.php页面,我访问的是:域名/QQAPI/install/index.php,这里的QQAPI是我在API上面套的一层文件夹。

填写APPID、APPKEY(我一般叫APPSECRET)、文字提示的回调域名,勾选get_user_info,点击配置。

我们的配置信息就通过这个页面写入了,存储我们配置文件的是API\comm\inc.php文件。如果后面要修改配置信息,我们可以删除install下的标识文件重新访问这个页面,也可以直接修改inc.php文件。

我们先测试一下example的接口,浏览器访问 域名/QQAPI/example,界面如下:

我们先点击[用QQ账号登录],会让我们用手机QQ扫码确认,确认成功会跳转到一个很长字符串的页面,出现这个页面就说明我们的登录接口调用成功了。

如果出现可能未开启curl支持的错误,那么我们在确保自己PHP开启了curl功能下,我们需要去修改一处配置:

编辑API\class\URL.class.php文件,找到get_contents()函数,将if (ini_get(“allow_url_fopen”) == “1”)这个判断去掉,注释掉If和Else的分支。

保存后,我们重新尝试刚刚的登录功能,应该是能登录进去了。

然后我们再试试[获取用户信息],可以获取到我们的头像和昵称。

用户信息获取成功。


四、将API部署到正式环境

1、把 example\oauth 文件夹下的 callback.php 重命名为 connect.php,并放到根目录(回调文件)

2、修改 connect.php 文件的 require_once(“../../API/qqConnectAPI.php”);
修改为 require_once(“QQAPI/API/qqConnectAPI.php”);

3、把example\oauth文件夹下的index.php移动到API目录下(调用登录的文件);

4、修改index.php文件的require_once(“../../API/qqConnectAPI.php”);修改为require_once(“qqConnectAPI.php”);

5、除connect.php文件和API文件夹,删除其他文件和文件夹;

6、修改 API\comm\inc.php 的回调地址,把之前填写的QQ互联回调地址和这里的回调地址都改成一致的: 域名/connect.php 。

如果这里域名和QQ互联上书写不一致,哪怕是www的子域名关系,也会报错,常见报错有:“redirect uri is illegal(100010)的验证错误”、“The state does not match. You may be a victim of CSRF.”,都是说明是回调地址有问题。


五、测试QQ授权登录功能

我们浏览器访问 域名/QQAPI/API/index.php ,出现授权登录界面。

打开connect.php文件,我们可以看到,刚刚的长字符串是 qq_callback() 和 get_openid() 的返回值。

我们修改connect.php文件,让其输出更多内容。 

<?php
require_once("QQAPI/API/qqConnectAPI.php");
$qc = new QC();
$acs = $qc->qq_callback();
$oid = $qc->get_openid();
$arr = $qc->get_user_info();
echo $acs;
echo "<br />";
echo $oid;
echo "<br />";
$qc = new QC($acs,$oid);
$sex = $arr["gender"]; //性别
$name = $arr["nickname"]; //姓名
echo $sex;
echo "<br />";
echo $name;
echo "<br />";
$arr = $qc->get_user_info();echo '<meta charset="UTF-8">';
echo "<p>";
echo "Gender:".$arr["gender"];
echo "</p>";
echo "<p>";
echo "NickName:".$arr["nickname"];
echo "</p>";
echo "<p>";
echo "<img src=\"".$arr['figureurl']."\">";
echo "<p>";
echo "<p>";
echo "<img src=\"".$arr['figureurl_1']."\">";
echo "<p>";
echo "<p>";
echo "<img src=\"".$arr['figureurl_2']."\">";
echo "<p>";
echo "vip:".$arr["vip"];
echo "</p>";
echo "level:".$arr["level"];
echo "</p>";
echo "is_yellow_year_vip:".$arr["is_yellow_year_vip"];
echo "</p>";// 开始判断是否获取到openid
if(strlen($oid)>=1){echo "执行到这里就是登陆成功了,可以写自己的代码了";
}

输出头像、昵称、性别等用户信息。

至此我们成功完成了Ouath2.0的认证,并取得了关键的用户信息。


六、存储数据和界面展示

我们获得了用户的昵称和头像等信息,把它们存储到数据库,并通过前台显示,此处自由发挥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/325610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商API-获取拼多多商品详情数据精准价格API测试示例

pinduoduo.item_get_app_pro获取拼多多商品详情数据 如何获取apikey&#xff1f; 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff…

20 太空漫游

效果演示 实现了一个太空漫游的动画效果&#xff0c;其中包括火箭、星星和月亮。当鼠标悬停在卡片上时&#xff0c;太阳和星星会变成黄色&#xff0c;火箭会变成飞机&#xff0c;月亮会变成小型的月亮。整个效果非常炫酷&#xff0c;可以让人想起科幻电影中的太空漫游。 Code &…

淘宝商品详情API接口(item_get-获得淘宝商品详情)主图,属性,sku,价格,搜索商品列表

淘宝开放平台提供了API接口&#xff0c;允许开发者获取淘宝商品的相关信息。为了获取商品详情&#xff0c;您可以使用 item_get API接口。以下是如何使用此API接口来获取商品的主图、属性、SKU、价格以及搜索商品列表的简要说明&#xff1a; 公共参数 名称类型必须描述keyStr…

面试之线程状态

1.线程有哪些状态 1.1Java线程的六种状态 Java 线程六种状态 新建 当一个线程对象被创建&#xff0c;但还未调用 start 方法时处于新建状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法&#xff0c;就会由新建进入可运行 此时与底层线程关联&#xff0c;由操作…

【Turtle库】圣诞树

在寒冷的冬季&#xff0c;没有什么比一棵亮丽的圣诞树更能带给我们温暖和快乐。而现在&#xff0c;我们将使用Python编程语言来绘制这样一棵美丽的圣诞树。 首先&#xff0c;我们需要导入Python的turtle模块&#xff0c;它可以帮助我们绘制图形。然后&#xff0c;我们可以定义一…

深入Pandas(二):高级数据处理技巧

文章目录 系列文章目录引言时间序列分析可视化示例 高级数据分析技术分组与聚合操作时间序列分析 高级数据操作数据合并与重塑示例&#xff1a;数据合并merge示例&#xff1a;数据合并concat示例&#xff1a;数据重塑 - 透视表 高级索引技巧 结论 系列文章目录 Python数据分析…

Springcloud 微服务实战笔记 Eureka

服务治理 服务注册 在服务治理框架中&#xff0c;通常都会构建一个注册中心&#xff0c;每个服务单元向注册中心登记自己提供的服务&#xff0c;将主机与端口号、版本号、通信协议等一些附加信息告知注册中心&#xff0c;注册中心按服务名分类组织服务清单。当服务启动后&…

docker kingbase

docker kingbase run 命令 docker run -tid \ -e ENABLE_CIyes \ -e NEED_STARTyes \ -e DB_MODEoracle \ -e DB_USERkingbase \ -e DB_PASSWORD123456 \ --privileged \ -p 4321:54321 \ -v /home/admin/SoftWare/volume/kingbase/userdata/data:/home/kingbase/userdata/da…

Unity组件开发--传送点

本组件仅实现A传送点到B传送的功能&#xff0c;是可以双向传送的&#xff0c;如果只要单向传送&#xff0c;可以另外改脚本实现&#xff1b; 先看效果&#xff1a; unity组件传送点演示 1.传送组件shader是怎么写的&#xff1a;这种效果的实现方案 shader编辑器是这样的&#…

HTML 使用 ruby 给汉字加拼音

使用 ruby 给汉字加拼音 兼容性 使用 ruby 给汉字加拼音 大家有没有遇到过要给汉字头顶上加拼音的需求? 如果有的话, 你是怎么解决的呢? 如果费尽心思, 那么你可能走了很多弯路, 因为 HTML 原生就有这样的标签来帮我们实现类似的需求. <ruby> ruby 本身是「红宝石」…

test mutation-01-变异测试 PITest PIT 是一种先进的变异测试系统,为 Java 和 JVM 提供黄金标准的测试覆盖率。

拓展阅读 test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍 test 系统学习-05-test jacoco 测试覆盖率与 idea 插件 test 系统学习-06-test jacoco SonarQube Docker learn-29-docker 安装 sonarQube with mysql Ubuntu Sonar PITest 实际应用的变异测试 …

Linux操作实例 – 输入输出重定向

Linux操作实例 – 输入输出重定向 Input & Output Redirection Examples in Linux By Jackson 1. 前言 在操作计算机的时候&#xff0c;我们能够很容易通过键盘、鼠标给计算机输入信息&#xff08;例如&#xff1a;写公文、邮件&#xff0c;同时通过显示器得到输出。这就…