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.mfbz.cn/a/300080.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VTKExamples::Visualization】第一期 Arbitrary3DCursor

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 本文分享Example中Visualization模块中的Arbitrary3DCursor样例&#xff0c;主要解析vtkProbefileter&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会…

大学物理实验重点——霍尔效应

霍尔系数 霍尔元件灵敏度&#xff0c;愈大愈好 负效应&#xff1a; 1. 不等位电势 V0&#xff1a;两个霍尔电极不可能绝对对 称地焊在霍尔元件两侧&#xff08;图 2&#xff09;、霍尔元件电阻率不均匀、工作电极的端面接触不良都 可能造成 C、D 两极不处在同一等位面上。R0 确…

XCTF:凯撒大帝在培根里藏了什么[WriteUP]

密文&#xff1a; ABBABAABBAAAAABABABAABABBAAAAABAABBAAABAABBBABBAABABBABABAAABABBBAABAABABABBBAABBABAA 根据题目提示&#xff0c;应该有两种加密算法 1.培根加密 2.凯撒加密 根据语境&#xff0c;且密文与凯撒加密后的密文不符合&#xff0c;先尝试培根解密 培根解…

大数据时代必备技能!Shell脚本学习网站助你一臂之力!

介绍&#xff1a;Shell脚本是一种用于自动化任务的脚本语言&#xff0c;它使用Shell命令来执行一系列操作。Shell脚本通常以.sh为扩展名&#xff0c;并使用#!/bin/bash作为第一行来指定使用的Shell解释器。 在Shell脚本中&#xff0c;我们可以使用各种命令和控制结构来实现自动…

Hadolint:Lint Dockerfile 的完整指南

想学习如何使用 Hadolint 对 Dockerfile 进行 lint 处理吗&#xff1f;这篇博文将向您展示如何操作。这是关于 Dockerfile linting 的完整指南。 通过对 Dockerfile 进行 lint 检查&#xff0c;您可以及早发现错误和问题&#xff0c;并确保它们遵循最佳实践。 什么是Hadolint…

数据结构期中模拟

一、填空题 1.二叉树就是度为 2 的树。&#xff08;F&#xff09; 二叉树的度<2 2.线性表采用链式存储表示时&#xff0c;所有结点之间的存储单元地址可以连续也可以不连续。(T) 在顺序表中&#xff0c;逻辑上相邻的元素&#xff0c;其物理位置一定相邻。在单链表中&#x…

java案例知识点

一.会话技术 概念 技术 二.跨域 三.过滤器 四.拦截器

电脑丢失dll文件怎么办,dll修复工具可一键修复dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“找不到指定的模块”或“无法找到某某.dll文件”。这种情况通常是由于dll文件丢失或损坏导致的。那么&#xff0c;究竟是什么原因导致了dll文件的丢失呢&#xff1f;又该如何预防dll文件…

Linux 编译安装 Nginx

目录 一、前言二、四种安装方式介绍三、本文安装方式&#xff1a;源码安装3.1、安装依赖库3.2、开始安装 Nginx3.3、Nginx 相关操作3.4、把 Nginx 注册成系统服务 四、结尾 一、前言 Nginx 是一款轻量级的 Web 服务器、[反向代理]服务器&#xff0c;由于它的内存占用少&#xf…

CentOS中开启mysql挂载

挂载的作用其实说白了就是备份。防止数据库文件损害或者数据库被误删导致数据丢失。 创建一个文件名为my.cnf内容如下 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modif…

用通俗易懂的方式讲解:使用 Mistral-7B 和 Langchain 搭建基于PDF文件的聊天机器人

在本文中&#xff0c;使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序&#xff0c;可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few…

Halcon区域的灰度特征值gray_features

Halcon区域的灰度特征值 gray_features 算子用于计算指定区域的灰度特征值。其输入是一组区域&#xff0c;每个区域的特征都存 储在一组value数组中。 典型的基于灰度值的特征如下&#xff1a; &#xff08;1&#xff09;area&#xff1a;灰度区域面积。 &#xff08;2&#x…

c++学习第八讲---类和对象---继承

继承&#xff1a; 使子类&#xff08;派生类&#xff09;拥有与父类&#xff08;基类&#xff09;相同的成员&#xff0c;以节约代码量。 1.继承的基本语法&#xff1a; class 子类名&#xff1a;继承方式 父类名{} &#xff1b; 例&#xff1a; class father { public:in…

Unity 了解Input Manage下默认的输入轴

在Unity菜单Edit->Project Settings->Input Manager->Axes下有一些默认的输入轴&#xff0c;如 这些输入轴代表不同类型的输入&#xff0c;其中&#xff1a; Horizontal&#xff1a;水平移动输入轴。通常与键盘的左右箭头键、A和D键、游戏手柄的左摇杆水平轴等相关联…

数据结构入门到入土——链表(2)

目录 一&#xff0c;与链表相关的题目&#xff08;2&#xff09; 1.输入两个链表&#xff0c;找出它们的第一个公共节点 2.给定一个链表&#xff0c;判断链表中是否有环 3.给定一个链表&#xff0c;返回链表开始入环的第一个节点&#xff0c;若无则返回null 一&#xff0c;…

SonarQube 漏洞扫描

SonarQube 漏洞扫描 一、部署服务 1.1 docker方式部署 #安装docker curl -L download.beyourself.org.cn/shell-project/os/get-docker-latest.sh | sh yum install -y docker-compose #进去输入:set paste可以保证不穿行 [rootlocalhost sonar]# vim docker-compose.yml v…

Python从入门到网络爬虫(异常处理详解)

前言 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响了程序的正常执行。一般情况下&#xff0c;在python无法正常处理程序时就会发生一个异常。异常是python对象&#xff0c;表示一个错误。当python脚本发生异常时我们需要捕获处理它&#xff0c;…

如何把电脑中的项目快速传进Github中?

一、打开GitHub网站:https:github.com 登录自己的个人账号 1.新建一个项目 2.用鼠标直接拖拽电脑中的项目文件夹与文件到新创建的项目中点击保存即可。

家里有必要买NAS吗?

完全没有必要&#xff0c;因为用旧电脑搭建NAS不仅价格实惠&#xff0c;而且非常简单&#xff0c;效果也完全不差买了的&#xff01; 并且......还环保 教程链接&#xff1a; 用旧电脑搭建NAS在您的家庭中&#xff0c;通过将旧 PC 转变为NAS服务器&#xff0c;您可以轻松搭建…

【Docker】创建,查看,进入容器

目录 方式一&#xff1a; 创建 查看 ​编辑 方式二&#xff1a; 创建 查看 进入容器 方式一&#xff1a; 首先查看有什么镜像 创建 docker run -i -t --namefreedom centos:7 /bin - i 表示容器一直运行着&#xff0c;容器如果没有客户端连接就会关闭&#xff0c;加了…
最新文章