【第三方互联】3、腾讯QQ授权第三方登录
当我们创建的 QQ 互联应用成功后,我们便可以开始使用该应用来实现 QQ 互联
一、获取 APP ID 和 APP Key
1、在 QQ 互联官网首页找到“我的应用”
2、点击应用,进入详情
这样,我们就获取到了 APP ID 和 APP Key
二、QQ 授权登录进行开发
1、将 APP ID 、APP Key,以及该应用的信息放入项目中的配置文件中,我使用的是SpringBoot,我放在了 application.yml 配置文件中
- 二、添加 Maven 依赖,在 pom.xml 文件中,我们需要加入以下依赖信息
<!-- 网络请求 -->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version>
</dependency>
其他依赖,请自行加入
三、登录按钮
在页面放置 QQ 授权登录的 DOM 元素
<a th:href="@{qq/auth}" class="link" title="腾讯QQ登录"><i class="layui-icon"></i></a>
四、接口类
创建 QQ 授权登录的 Controller,QqController.java
1、从配置文件中获取 QQ 互联信息
/*** QQ互联中提供的 appid 和 appkey*/@Value("${qq.oauth.appid}")public String APPID;@Value("${qq.oauth.appkey}")public String APPKEY;@Value("${qq.oauth.url}")public String URL;
定义三个变量,接收 QQ 互联的信息
2、登录按钮点击后的接口
/*** 请求授权页面*/@GetMapping(value = "/auth")public String qqAuth(HttpSession session) {// 用于第三方应用防止CSRF攻击String uuid = UUID.randomUUID().toString().replaceAll("-", "");session.setAttribute("state", uuid);// Step1:获取Authorization CodeString url = "https://graph.qq.com/oauth2.0/authorize?response_type=code" +"&client_id=" + APPID +"&redirect_uri=" + URLEncoder.encode(URL) +"&state=" + uuid;return PasswordUtils.redirectTo(url);}
QQ 互联的接口文档中建议我们在授权登录时传入一个加密的数据防止被攻击,我们传入了UUID,最后重定向到授权页面
3、我们在授权页面,登录了 QQ 账号,并同意授权后,就回到了我们创建应用是设置的回调地址里面了
/*** 授权回调*/@GetMapping(value = "/callback")public String qqCallback(HttpServletRequest request) throws Exception {HttpSession session = request.getSession();// 得到Authorization CodeString code = request.getParameter("code");// 我们放在地址中的状态码String state = request.getParameter("state");// 验证信息String uuid = (String) session.getAttribute("state");// 验证信息我们发送的状态码if (null != uuid) {// 状态码不正确,直接返回登录页面if (!uuid.equals(state)) {return PasswordUtils.redirectTo("/login");}}// Step2:通过Authorization Code获取Access TokenString url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code" +"&client_id=" + APPID +"&client_secret=" + APPKEY +"&code=" + code +"&redirect_uri=" + URL;String access_token = QqHttpClient.getAccessToken(url);// Step3: 获取回调后的openIDurl = "https://graph.qq.com/oauth2.0/me?access_token=" + access_token;String openId = QqHttpClient.getOpenID(url);// Step4:获取QQ用户信息url = "https://graph.qq.com/user/get_user_info?access_token=" + access_token +"&oauth_consumer_key=" + APPID +"&openid=" + openId;// 得到用户信息JSONObject jsonObject = QqHttpClient.getUserInfo(url);/*** 获取到用户信息之后,就该写你自己的业务逻辑了*/return PasswordUtils.redirectTo("/success");}
以上代码,从我自己的项目中拷贝而来,如果你直接使用,你需要对其业务代码进行修改
五、网络请求方法
第四步代码中所用到的网络接口方法,我放在了 QqHttpClient.java 文件中,主要有三个方法
/*** 获取Access Token*/public static String getAccessToken(String url) throws IOException {CloseableHttpClient client = HttpClients.createDefault();String token = null;HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");if (result.indexOf("access_token") >= 0) {String[] array = result.split("&");for (String str : array) {if (str.indexOf("access_token") >= 0) {token = str.substring(str.indexOf("=") + 1);break;}}}}httpGet.releaseConnection();return token;}/*** 获取openID*/public static String getOpenID(String url) throws IOException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = parseJSONP(result);}httpGet.releaseConnection();if (jsonObject != null) {return jsonObject.getString("openid");} else {return null;}}/*** 获取QQ用户信息*/public static JSONObject getUserInfo(String url) throws IOException {JSONObject jsonObject = null;CloseableHttpClient client = HttpClients.createDefault();HttpGet httpGet = new HttpGet(url);HttpResponse response = client.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {String result = EntityUtils.toString(entity, "UTF-8");jsonObject = JSONObject.parseObject(result);}httpGet.releaseConnection();return jsonObject;}/*** 转换json对象*/private static JSONObject parseJSONP(String jsonp) {int startIndex = jsonp.indexOf("(");int endIndex = jsonp.lastIndexOf(")");String json = jsonp.substring(startIndex + 1, endIndex);return JSONObject.parseObject(json);}
以上,就是完成 QQ 授权登录的过程
六、总结
总结来说如图所示
如您在阅读中发现不足,欢迎留言!!!
下一篇:
【QQ互联】四、分享至QQ、新浪微博
【第三方互联】3、腾讯QQ授权第三方登录相关推荐
- 腾讯微博 新浪微博_Q2A:如何启用新浪微博和腾讯QQ帐户登录?
腾讯微博 新浪微博 In Question2Answer, how to enable Sina Weibo and Tencent QQ account log in? 在Question2Answ ...
- java qq授权登录开发者_Java QQ授权第三方登陆
QQ互联官网 注册开发者,创建应用,创建好的应用我们有我们需要的三个参数,APPID.APPKey.回调地址 APPID.APPKey.回调地址.png 这里验证不需要通过,随便填做测试就可以,等上线 ...
- 腾讯qq企业邮箱登录入口界面如何设置
企业邮箱一般只有收费版支持设置登录入口界面,免费版是不支持的,而怎么将企业邮箱的登录入口界面设置为公司元素的呢,以TOM企业邮箱为例,登录管理员页面,在首页点击logo就可以进入到设置页面.跟随小编一 ...
- QQ的第三方登陆,操作步骤
1,到 https://connect.qq.com QQ互联管理中心的"应用管理"申请QQ的app_id和app_key,提前提交你需要回调的地址. 2,配置申请下来的的appi ...
- 【第三方互联】8、创建新浪微博(sina)互联应用
当我们注册新浪微博开发者通过审核之后,我们才能创建应用 当我们开发者认证审核通过之后,我们的身份认证状态将变为:"已认证",这时,我们便可以创建微连接应用了 一.创建应用 这里我们 ...
- php中qq授权登录,ThinkPHP利用QQ互联实现网站第三方登录(QQ登录)
接入QQ互联平台后,我们就可以让用户通过QQ帐号登录来登陆我们的网站,这样减少了注册的繁琐,可以更快 .更便捷的为了我带来更多的用户,下面我们一一起来看下如何通过QQ互联来实现第三方登录. ####申 ...
- 【第三方互联】4、分享至腾讯QQ、新浪微博(sina)
在项目开发中,我们需要将项目中相关信息分享至第三方平台,本次学习分享至 QQ.新浪微博 一.开发准备 在学习之前,我们选介绍一下我们分享至第三方平台时所需要的信息 url:项目访问地址 title:标 ...
- 【第三方互联】1、注册成为腾讯QQ开发者
接入 QQ 互联平台,让你的产品应用支持 QQ 帐号登录.分享到 QQ 等功能. 1.方便用户快捷登录,降低用户的登录流失率: 2.方便应用获取用户信息,减少产品设计成本: 3.可共享登录应用的用户关 ...
- 【第三方互联】13、码云(Gitee)授权第三方登录
今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录.腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单 一.准备工作 1.登录 码云官网 官网地址:https://gitee. ...
最新文章
- flannel原理初探针对0.1.0版本
- 修改Exchange邮件报警信息
- 认识微软Visual Studio Tools for AI
- js pug 代码_用JS写的windows95操作系统
- matlab 地埋管温度场,地埋管换热器周围土壤冻结温度场的模拟研究
- 获取iOS设备的型号
- php apache 多进程,php多进程 防止出现僵尸进程 如何 使 apache 成为 僵尸进程
- 在Xshell中直接上传或下载文件
- 手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)
- wangEditor富文本编辑器的简单使用
- django使用ldap进行用户登录认证
- jq onclick 定义_jq中的onclick绑定事件
- php网页部分截图,关于php:PHP实现网页截图
- C语言实现几何图形绘制
- Glide 的 transformation
- 【不正经科普】一文读懂“区块链”
- 经典物理建模钢琴-4Front TruePianos v1.9.8 WiN-MAC
- 软件工程的顶会和顶刊
- 朱有鹏:对嵌入式工程师的一些小建议
- CSDN实训 - 通过Java修改游戏存档
热门文章
- Excel中 IFERROR 函数 可以错误值#N/A、#value变成空格
- ICT产业创新发展白皮书 附下载
- 360杀毒扫描全盘不到几秒就结束了,无法扫描杀毒,疑似中毒
- 【计算机网络入门】一、计算机网络和因特网 | 科大公开课
- shared_preferences使用
- activiti自定义属性并请求后端接口问题
- 光影软件测试自学,使用set a light 3D STUDIO来学习如何布光②
- No matching distribution found for PIL
- 亲戚关系判断 并查集基础
- ClickHouse JDBC Bridge 的安装及连接sqlserver