老铁,转发+关注+私信 获取完整代码

前言:很多时候我们都需要如下的第三方登录,用QQ帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户。

下面让我们来实现吧,可以参考官网文档,也可以看我下面的操作说明 QQ第三方登录接入指南

开发者通过以下几个步骤,即可接入QQ互联开放平台: 注册开发者→创建应用→通过审核并获取接口权限

第一步:注册成为开发者 http://open.qq.com/regv2/

最后等待审核通过... (我是上午申请的,下午才通过审核,这段时间可以先了解下文档,熟悉熟悉哦~)

第二步:创建应用 https://connect.qq.com/manage.html#/

这里我选的是网站应用

下面是填写时需要注意的!! (温馨小提示:回调地址是之后会使用到的哦~)

等待审核通过之后就可以进行下一步操作了哦~ (温馨小提示:APP ID和APP Key是之后要使用到的哦!)

如下全部审核通过 (快的话 一会儿就通过了哦)

注意:申请appid时,登录的QQ号码将与申请到的appid绑定,后续维护均需要使用该号码。

注意:对appid和appkey信息进行保密,不要随意泄漏。

注意保证连接畅通

接入QQ登录时,网站需要不停的和Qzone进行交互,发送请求和接受响应。

1. 对于PC网站:

请在你的服务器上ping graph.qq.com ,保证连接畅通。

2.移动应用无需此步骤

第三步:可下载官网sdk参考 http://wiki.open.qq.com/wiki/website/SDK%E4%B8%8B%E8%BD%BD

(当然也可跳过这步看我下面的实现)

第四步:配置

①拷贝下载的sdk后解压包中的qqconnectconfig.properties配置文件到自己的项目中,也可以直接拷我下面分享的

app_ID = 100****(请修改此处)app_KEY = ******(请修改此处)redirect_URI = ***********(请修改此处)scope = get_user_info,add_topic,add_one_blog,add_album,upload_pic,list_album,add_share,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idollist,add_idol,del_ido,get_tenpay_addrbaseURL = https://graph.qq.com/getUserInfoURL = https://graph.qq.com/user/get_user_infoaccessTokenURL = https://graph.qq.com/oauth2.0/tokenauthorizeURL = https://graph.qq.com/oauth2.0/authorizegetOpenIDURL = https://graph.qq.com/oauth2.0/meaddTopicURL = https://graph.qq.com/shuoshuo/add_topicaddBlogURL = https://graph.qq.com/blog/add_one_blogaddAlbumURL = https://graph.qq.com/photo/add_albumuploadPicURL = https://graph.qq.com/photo/upload_piclistAlbumURL = https://graph.qq.com/photo/list_albumaddShareURL = https://graph.qq.com/share/add_sharecheckPageFansURL = https://graph.qq.com/user/check_page_fansaddTURL = https://graph.qq.com/t/add_taddPicTURL = https://graph.qq.com/t/add_pic_tdelTURL = https://graph.qq.com/t/del_tgetWeiboUserInfoURL = https://graph.qq.com/user/get_infogetWeiboOtherUserInfoURL = https://graph.qq.com/user/get_other_infogetFansListURL = https://graph.qq.com/relation/get_fanslistgetIdolsListURL = https://graph.qq.com/relation/get_idollistaddIdolURL = https://graph.qq.com/relation/add_idoldelIdolURL = https://graph.qq.com/relation/del_idolgetTenpayAddrURL = https://graph.qq.com/cft_info/get_tenpay_addrgetRepostListURL = https://graph.qq.com/t/get_repost_listversion = 2.0.0.0

②将app_ID,app_KEY,redirect_URI三个参数的值改成自己的,也就是在注册开发者用户和创建应用通过后返回的参数值,其中redirect_URI是授权成功后的回调地址,这个是在创建应用的时候配置的。

第五步:代码实现

①引入所需依赖包(maven项目的引入方式):【温馨小提示:下载的sdk资源中也有Sdk4J.jar

 net.gplatform Sdk4J 2.0

②编写登录时跳转事件

 @RequestMapping(value = "/qqLogin") public void qqLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=utf-8"); try { response.sendRedirect(new Oauth().getAuthorizeURL(request));//将页面重定向到qq第三方的登录页面 } catch (QQConnectException e) { e.printStackTrace(); } }

这个代码可让我们在前台设置跳转路径,点击QQ登录时跳转到如下我们熟悉的页面

③编写回调controller,用户在第三方登录页面登录成功后,我们可以进行登录信息获取,这个时候页面会自动跳转到我们上面配置的redirect_URI的地址

//获取登录者的基础信息@RequestMapping("/afterlogin.do")public void QQAfterlogin(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("AfterLogin======================================================="); response.setContentType("text/html; charset=utf-8"); // 响应编码 PrintWriter out = response.getWriter();  Enumeration parameterNames = request.getParameterNames(); while(parameterNames.hasMoreElements()){ String parameterName = parameterNames.nextElement();//code System.out.println(parameterName+":"+request.getParameter(parameterName));//state } System.out.println("qq_connect_state:"+request.getSession().getAttribute("qq_connect_state"));  try { // 获取AccessToken(AccessToken用于获取OppendID) AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);  System.out.println("accessTokenObj:"+accessTokenObj); // 用于接收AccessToken String accessToken = null, openID = null; long tokenExpireIn = 0L; // AccessToken有效时长  if (accessTokenObj.getAccessToken().equals("")) { // 我们的网站被CSRF攻击了或者用户取消了授权 // 做一些数据统计工作 System.out.print("没有获取到响应参数"); } else { accessToken = accessTokenObj.getAccessToken(); // 获取AccessToken tokenExpireIn = accessTokenObj.getExpireIn();  request.getSession().setAttribute("demo_access_token", accessToken); request.getSession().setAttribute("demo_token_expirein", String.valueOf(tokenExpireIn));  // 利用获取到的accessToken 去获取当前用的openid -------- start OpenID openIDObj = new OpenID(accessToken); // 通过对象获取[OpendId](OpendID用于获取QQ登录用户的信息) openID = openIDObj.getUserOpenID();  out.println("欢迎你,代号为 " + openID + " 的用户!"); request.getSession().setAttribute("demo_openid", openID); out.println("去看看发表说说的demo吧"); // 利用获取到的accessToken 去获取当前用户的openid --------- end  out.println("

start -----------------------------------利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 ---------------------------- start

"); // 通过OpenID获取QQ用户登录信息对象(Oppen_ID代表着QQ用户的唯一标识) UserInfo qzoneUserInfo = new UserInfo(accessToken, openID); // 获取用户信息对象(只获取nickename与Gender) UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo(); out.println("
"); if (userInfoBean.getRet() == 0) { out.println(userInfoBean.getNickname() + "
"); out.println(userInfoBean.getGender() + "
"); out.println("黄钻等级: " + userInfoBean.getLevel() + "
"); out.println("会员 : " + userInfoBean.isVip() + "
"); out.println("黄钻会员: " + userInfoBean.isYellowYearVip() + "
"); out.println("
"); out.println("
"); out.println("
"); } else { out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg()); } out.println("

end -----------------------------------利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 ---------------------------- end

"); out.println("

start ----------------------------------- 验证当前用户是否为认证空间的粉丝------------------------------------------------ start

"); PageFans pageFansObj = new PageFans(accessToken, openID); PageFansBean pageFansBean = pageFansObj.checkPageFans("97700000"); if (pageFansBean.getRet() == 0) { out.println("

验证您" + (pageFansBean.isFans() ? "是" : "不是") + "QQ空间97700000官方认证空间的粉丝

"); } else { out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + pageFansBean.getMsg()); } out.println("

end ----------------------------------- 验证当前用户是否为认证空间的粉丝------------------------------------------------ end

"); out.println("

start -----------------------------------利用获取到的accessToken,openid 去获取用户在微博的昵称等信息 ---------------------------- start

"); com.qq.connect.api.weibo.UserInfo weiboUserInfo = new com.qq.connect.api.weibo.UserInfo(accessToken, openID); com.qq.connect.javabeans.weibo.UserInfoBean weiboUserInfoBean = weiboUserInfo.getUserInfo(); if (weiboUserInfoBean.getRet() == 0) { //获取用户的微博头像----------------------start out.println("
"); out.println("
"); out.println("
"); //获取用户的微博头像 ---------------------end //获取用户的生日信息 --------------------start out.println("

尊敬的用户,你的生日是: " + weiboUserInfoBean.getBirthday().getYear() + "年" + weiboUserInfoBean.getBirthday().getMonth() + "月" + weiboUserInfoBean.getBirthday().getDay() + "日"); //获取用户的生日信息 --------------------end StringBuffer sb = new StringBuffer(); sb.append("

所在地:" + weiboUserInfoBean.getCountryCode() + "-" + weiboUserInfoBean.getProvinceCode() + "-" + weiboUserInfoBean.getCityCode() + weiboUserInfoBean.getLocation()); //获取用户的公司信息---------------------------start ArrayList companies = weiboUserInfoBean.getCompanies(); if (companies.size() > 0) { //有公司信息 for (int i=0, j=companies.size(); i曾服役过的公司:公司ID-" + companies.get(i).getID() + " 名称-" + companies.get(i).getCompanyName() + " 部门名称-" + companies.get(i).getDepartmentName() + " 开始工作年-" + companies.get(i).getBeginYear() + " 结束工作年-" + companies.get(i).getEndYear()); } } else { //没有公司信息 } //获取用户的公司信息---------------------------end out.println(sb.toString()); } else { out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + weiboUserInfoBean.getMsg()); } out.println("

end -----------------------------------利用获取到的accessToken,openid 去获取用户在微博的昵称等信息 ---------------------------- end

"); } } catch (QQConnectException e) { }}

剩下的就是一些API的使用了,可以参考官网文档http://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token

温馨小提示:

我QQ互联上设置的回调域是127.0.0.1:8080,但我本地刚开始使用的localhost:8080访问导致最后2个地址的session值不一致,就没有授权成功跳转到回调地址,因此我们访问的地址必须要有回调域设置的地址是同一个服务器地址访问的哦~~

java实现支付宝第三方登录_Java 实现QQ第三方登录(附赠:完整代码)相关推荐

  1. java qq登录_JAVA实现QQ第三方登录

    首先在QQ互联: https://connect.qq.com/manage.html 申请账号,并且进行资料审核,同时创建应用(设置回调地址) 申请应用完后,会有app_ID.app_KEY等参数 ...

  2. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  3. java判断用户是否在某一个区域登录_Java实现QQ登录和微博第三方登录

    来源:http://www.cnblogs.com/liuxianan转自公众号:Java后端 1. 前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了 QQ 和微博这 2 大常 ...

  4. SpringCloud-Gateway网关统一登录鉴权+QQ第三方登录+Vue前后分离解决方案

    具体流程 * 网关鉴权流程:* 前端输入用户名密码去请求token,经过SecurityWeb配置,* 白名单不进入AuthorizationManager,直接进全局过滤器->没有token放 ...

  5. android qq三方登录授权失败,QQ第三方登陆授权失败110401原因及解决办法分享

    qq第三方登陆授权失败出现代码110401是什么情况?遇到这种情况该如何解决?相信很多用户们在操作的时候都出现过类似的情况吧?下面是小编带来的攻略解析,一起来关注下! qq第三方登陆授权失败11040 ...

  6. php如何实现qq第三方登录,PHP实现qq第三方登录

    除了qq第三方登录外.还有微博,微信等第三方登录 qq第三方登录,遵循oauth2.0协议 这里是说明http://www.cnblogs.com/yx520zhao/p/6616686.html q ...

  7. android qq三方登录授权失败,QQ第三方登录无法授权错误码110401的解决方法

    原标题:QQ第三方登录无法授权错误码110401的解决方法 一些网友在注册APP的时候,会选择QQ作为第三方登录方式,但是,最近,一些网友发现:选择QQ第三方登录的时候,会出现无法授权错误码11040 ...

  8. java实现单点登录_JAVA实现SSO单点登录

    一.概述 1.1.SSO介绍 SSO全称:SingleSignOn,几个相互信任的应用之间,在其中一个应用进行登录以后,其他信任的应用直接免登. 例如:新浪下的博客和微博.在网页上同时打开后都没登录, ...

  9. python实现qq登录_python实现QQ批量登录功能

    本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time impo ...

最新文章

  1. 电脑动态屏保_8款电脑软件,每一款都能让你的电脑更好用
  2. C#网络编程(基本概念和操作) - Part.1
  3. python---Socket编程
  4. 全球首发!惯性导航导论(剑桥大学)第十一部分
  5. 新经济 DTC 转型,一个简单而强大的数据平台至关重要
  6. 博弈论mooc期末考试答案
  7. 使用萤石云的出现设备不在线问题的解决方法
  8. 一分钟学习静态网页制作
  9. 更改计算机时间出现没有权限,win7系统修改时间时显示没有权限的解决方法
  10. 【Excel】取消合并单元格后快速填充
  11. Python实现的异步代理爬虫及代理池
  12. 130个资源网站,总有一个你用得着
  13. 【计算机组成原理】 数据的表示和运算
  14. mmorpg无缝地图
  15. termux内网穿透-ngrok
  16. 建矩阵力学奠基新量子论 不确定原理颠覆经典概念|量子群英传
  17. scratch学习相关资料汇总
  18. Win10显示器驱动程序无法启动
  19. java语言中 逻辑常量_在 Java语言中 ,逻辑常量只有哪两个值 (true,false)_语文答案_学小易找答案...
  20. [学习经验] 考研经验略谈

热门文章

  1. python读取与写入文件
  2. 940mx黑苹果驱动_让黑苹果变得更完美——BCM94532HMB无线蓝牙接力完美驱动!
  3. 华为MDC调试工具使用介绍
  4. 一个人的旅行 图论最短路问题
  5. pytorch学习笔记(三十五):Momentum
  6. nlp-tutorial代码注释1-2,词向量、Word2Vec、Skip-gram简述
  7. AcWing 1058. 股票买卖 V
  8. Java 1.1.2 字符串之拼接
  9. 一元线性回归中loss值的变化分析
  10. 使用Eclipse调试Android程序时无法安装控制台报错INSTALL_FAILED_UPDATE_INCOMPATIBLE