当我们创建的 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">&#xe676;</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授权第三方登录相关推荐

  1. 腾讯微博 新浪微博_Q2A:如何启用新浪微博和腾讯QQ帐户登录?

    腾讯微博 新浪微博 In Question2Answer, how to enable Sina Weibo and Tencent QQ account log in? 在Question2Answ ...

  2. java qq授权登录开发者_Java QQ授权第三方登陆

    QQ互联官网 注册开发者,创建应用,创建好的应用我们有我们需要的三个参数,APPID.APPKey.回调地址 APPID.APPKey.回调地址.png 这里验证不需要通过,随便填做测试就可以,等上线 ...

  3. 腾讯qq企业邮箱登录入口界面如何设置

    企业邮箱一般只有收费版支持设置登录入口界面,免费版是不支持的,而怎么将企业邮箱的登录入口界面设置为公司元素的呢,以TOM企业邮箱为例,登录管理员页面,在首页点击logo就可以进入到设置页面.跟随小编一 ...

  4. QQ的第三方登陆,操作步骤

    1,到 https://connect.qq.com QQ互联管理中心的"应用管理"申请QQ的app_id和app_key,提前提交你需要回调的地址. 2,配置申请下来的的appi ...

  5. 【第三方互联】8、创建新浪微博(sina)互联应用

    当我们注册新浪微博开发者通过审核之后,我们才能创建应用 当我们开发者认证审核通过之后,我们的身份认证状态将变为:"已认证",这时,我们便可以创建微连接应用了 一.创建应用 这里我们 ...

  6. php中qq授权登录,ThinkPHP利用QQ互联实现网站第三方登录(QQ登录)

    接入QQ互联平台后,我们就可以让用户通过QQ帐号登录来登陆我们的网站,这样减少了注册的繁琐,可以更快 .更便捷的为了我带来更多的用户,下面我们一一起来看下如何通过QQ互联来实现第三方登录. ####申 ...

  7. 【第三方互联】4、分享至腾讯QQ、新浪微博(sina)

    在项目开发中,我们需要将项目中相关信息分享至第三方平台,本次学习分享至 QQ.新浪微博 一.开发准备 在学习之前,我们选介绍一下我们分享至第三方平台时所需要的信息 url:项目访问地址 title:标 ...

  8. 【第三方互联】1、注册成为腾讯QQ开发者

    接入 QQ 互联平台,让你的产品应用支持 QQ 帐号登录.分享到 QQ 等功能. 1.方便用户快捷登录,降低用户的登录流失率: 2.方便应用获取用户信息,减少产品设计成本: 3.可共享登录应用的用户关 ...

  9. 【第三方互联】13、码云(Gitee)授权第三方登录

    今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录.腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单 一.准备工作 1.登录 码云官网 官网地址:https://gitee. ...

最新文章

  1. OpenCV 【一】—— OpenCV中数组指针、图像分块计算、指针取像素值与MatToEigen方法,内存对齐
  2. Matlab编程与数据类型 -- 开关语句switch/end
  3. 中国的“Databricks”们:打造AI基础架构,我们是认真的
  4. JS获取字符串实际长度!
  5. The Way to TiDB 3.0 and Beyond (下篇)
  6. Kubernetes用户指南(二)--部署组合型的应用、连接应用到网络中
  7. url带多个参数_动态URL和静态URL做seo优化不必二选一
  8. 两轴插补速度怎么给定_快速入门 | 篇十七:运动控制器多轴插补运动指令的使用...
  9. 【MySQL】数据库事务处理---MySQL
  10. python二进制移位_python移位运算的实现
  11. 手把手教你Windows环境下配置Git环境
  12. FLASH BUILDER 清除图片缓存
  13. Web数据挖掘小论文
  14. Photoshop快速抠图:使用蒙版工具
  15. 改进YOLOv7系列:23.YOLOv7添加CBAM注意力机制
  16. 学计算机电脑屏幕多大,买电脑显示器的技巧 电脑显示屏多大尺寸好
  17. 如何设计一个电商平台积分兑换系统!
  18. Shell(Bash)输入一个IP 判断是否可用并进行ping 测试
  19. Android马甲包封装上架
  20. ChatGPT 登上了时代杂志封面,意味着什么?

热门文章

  1. ICV:2025 年中国汽车磁传感器芯片市场规模将达到4.8亿美元
  2. jquery ie11 html函数,jQuery append()函数在IE11中失败
  3. Error:Execution failed for task ':app:compileDebugNdk' 解决方法
  4. AI有智商吗?DeepMind为此专门开发了一套IQ测试题...
  5. [MOOC]物联网技术笔记-3.物联网感知技术(传感器)
  6. [Excel]COUNTIF()函数使用实例以及扩展用法——根据区域是否包含某个字符进行操作
  7. 美图秀秀美化图片之【边框】界面设计【重大更新】
  8. 江苏卫生中级计算机英语,XXX江苏省人事考试英语学习用书电子中文对照版(卫生类.doc...
  9. MySQL 2021-03-29
  10. 华为鸿蒙太空人壁纸,华为太空人动态壁纸