https://www.cnblogs.com/niceyoo/p/11256280.html

1、账户注册

腾讯开放平台网址: https://connect.qq.com/index.html

首先需要到开放平台注册QQ互联开发者身份。注册之后创建一个网站应用,注意,需要备案成功的域名才可申请。

2、应用审核

审核通过后如下图所示,审核通过后可以得到 appid 和 appkey,用于开发中使用。

二、实现思路

相信大家都用过QQ登陆第三方网站,但是在开发之前我们需要先了解一下QQ互联的开发流程:

  1. 生成QQ授权链接
  2. 获取授权码,使用授权码获取用户的openid
  3. 使用openid可以查询到用户信息

openid作用:相当于QQ用户的 userid,身份唯一标识。

看完这三步是不是觉得很熟悉?没错,跟微信一个路子,毕竟都是 OAuth协议嘛。如果还不是特别清楚的小伙伴可以去看官方文档:腾讯开放平台文档 —http://wiki.connect.qq.com/

为了方便开发,我们再整理一下代码实现思路:

  1. 编写授权链接接口
  2. 编写授权回调接口,拿到用户openid
    -- 获取到授权码;
    -- 使用授权码获取accessToken;
    -- 使用accessToken获取用户openid。
  3. 使用openid查询数据库user信息表中是否有关联
    -- 如果使用openid能够查询用户信息,说明用户已经绑定成功,自动实现登陆;’
    -- 如果使用openid没有查询到用户信息的话,说明用户没有绑定账信息,跳转到关联账号页面;
    -- 关联成功账号之后,将openid修改为对应的账号信息。

三、代码部分

1、引入sdk

QQ互连提供了用户开发的SDK,下载链接:https://files.cnblogs.com/files/niceyoo/Sdk4J.zip

由于我们的项目大部分都是 maven 管理的,但提供的是个 jar 文件,所以我们可以打入本地 maven 中:

mvn install:install-file -Dfile=jar包的位置(参数一) -DgroupId=groupId(参数二)
-DartifactId=artifactId(参数三) -Dversion=version(参数四) -Dpackaging=jarmvn install:install-file -Dfile="F:\Sdk4J.jar" -DgroupId=com.tengxun
-DartifactId=sdk4j  -Dversion=1.0 -Dpackaging=jar

项目中引入依赖:

<dependency><groupId>com.tengxun</groupId><artifactId>sdk4j</artifactId><version>1.0</version>
</dependency>

项目中引入配置文件

app_ID = APP_ID
app_KEY = 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_addr
baseURL = https://graph.qq.com/
getUserInfoURL = https://graph.qq.com/user/get_user_info
accessTokenURL = https://graph.qq.com/oauth2.0/token
authorizeURL = https://graph.qq.com/oauth2.0/authorize
getOpenIDURL = https://graph.qq.com/oauth2.0/me
addTopicURL = https://graph.qq.com/shuoshuo/add_topic
addBlogURL = https://graph.qq.com/blog/add_one_blog
addAlbumURL = https://graph.qq.com/photo/add_album
uploadPicURL = https://graph.qq.com/photo/upload_pic
listAlbumURL = https://graph.qq.com/photo/list_album
addShareURL = https://graph.qq.com/share/add_share
checkPageFansURL = https://graph.qq.com/user/check_page_fans
addTURL = https://graph.qq.com/t/add_t
addPicTURL = https://graph.qq.com/t/add_pic_t
delTURL = https://graph.qq.com/t/del_t
getWeiboUserInfoURL = https://graph.qq.com/user/get_info
getWeiboOtherUserInfoURL = https://graph.qq.com/user/get_other_info
getFansListURL = https://graph.qq.com/relation/get_fanslist
getIdolsListURL = https://graph.qq.com/relation/get_idollist
addIdolURL = https://graph.qq.com/relation/add_idol
delIdolURL = https://graph.qq.com/relation/del_idol
getTenpayAddrURL = https://graph.qq.com/cft_info/get_tenpay_addr
getRepostListURL = https://graph.qq.com/t/get_repost_list
version = 2.0.0.0

2、生成QQ联合登陆授权链接

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&state=[THE_STATE]

接口以及参数详细说明地址:https://wiki.connect.qq.com/%E4%BD%BF%E7%94%A8authorization_code%E8%8E%B7%E5%8F%96access_token#Step1.EF.BC.9A.E8.8E.B7.E5.8F.96AuthorizationCode

代码实现:

/*** 生成授权链接* * @param request* @return*/
@RequestMapping("/qqAuth")
public String qqAuth(HttpServletRequest request) {try {String authorizeURL = new Oauth().getAuthorizeURL(request);log.info("authorizeURL:{}", authorizeURL);return "redirect:" + authorizeURL;} catch (Exception e) {return ERROR_500_FTL;}
}

3、QQ授权回调

在上边生成授权方法里进行了一次重定向,重定向地址即为本方法。

private static final String MB_QQ_QQLOGIN = "member/qqlogin";/*** 重定向到首页*/
private static final String REDIRECT_INDEX = "redirect:/";@RequestMapping("/qqLoginBack")
public String qqLoginBack(HttpServletRequest request, HttpServletResponse response, HttpSession httpSession) {try {AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);if (accessTokenObj == null) {return ERROR_500_FTL;}String accessToken = accessTokenObj.getAccessToken();if (StringUtils.isEmpty(accessToken)) {return ERROR_500_FTL;}/* 获取用户openid */OpenID openIDObj = new OpenID(accessToken);String openId = openIDObj.getUserOpenID();if (StringUtils.isEmpty(openId)) {return ERROR_500_FTL;}BaseResponse<JSONObject> findByOpenId = qqAuthoriFeign.findByOpenId(openId);if (!isSuccess(findByOpenId)) {return ERROR_500_FTL;}Integer resultCode = findByOpenId.getCode();/* 如果使用openid没有查询到用户信息,则跳转到绑定用户信息页面 */if (resultCode.equals(Constants.HTTP_RES_CODE_NOTUSER_203)) {/* 使用openid获取用户信息 */UserInfo qzoneUserInfo = new UserInfo(accessToken, openId);UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();if (userInfoBean == null) {return ERROR_500_FTL;}String avatarURL100 = userInfoBean.getAvatar().getAvatarURL100();/* 返回用户头像页面展示 */request.setAttribute("avatarURL100", avatarURL100);httpSession.setAttribute(WebConstants.LOGIN_QQ_OPENID, openId);return MB_QQ_QQLOGIN;}/* 自动实现登陆 */JSONObject data = findByOpenId.getData();String token = data.getString("token");CookieUtils.setCookie(request, response, WebConstants.LOGIN_TOKEN_COOKIENAME, token);return REDIRECT_INDEX;} catch (Exception e) {return ERROR_500_FTL;}}

4、测试环节

访问生成授权链接的方法地址:

http://shop.sscai.club/qqAuth

我创建了一个java相关的公众号,用来记录自己的学习之路,感兴趣的小伙伴可以关注一下微信公众号哈:niceyoo

分类: 微信&支付宝

标签: QQ互联登陆(Java)

关注我收藏该文

0

0

« 上一篇: 重温JVM之Java类加载机制
» 下一篇: 动静分离-静态资源缓存控制

QQ互联登陆(Java)相关推荐

  1. discuz设置用户每天回帖数_[建站教程]Discuz3.4设置QQ互联登陆教程

    虽然现在很多人已经不在使用QQ了,但瘦死的骆驼比马大,QQ的用户基数还是很大,而且QQ里有大量的年轻用户,像我的表妹,表弟刚上初中.他们是忠诚的QQ用户. 为了获取这批年轻的用户,我们还是有必要让网站 ...

  2. 网站接入QQ互联(JAVA版)

    简介: QQ互联是腾讯旗下的开放平台,通过QQ互联,网站主和开发者可以申请接入QQ登录.用户可以使用QQ账号登录接入的站点,通过添加分享和赞组件,将站点内容分享到QQ空间和朋友网,通过获取API授权, ...

  3. QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码(转)

    OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...

  4. QQ互联OAuth2.0 .NET SDK 发布以及网站QQ登陆示例代码

    OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容. QQ登录OAuth2 ...

  5. java qq登陆 server_java实现QQ互联登录

    yml配置 server: port: 80 qq: oauth: http: //QQ互联中填写的网站地址 导入pom依赖 org.apache.httpcomponents httpclient ...

  6. QQ登陆第三方Demo(QQ互联)

    项目需要做QQ.微博等登陆第三方的功能,第一次接触,虽然官网上有sdk,接口写的很好,调用即可,但是没有文档,看着头疼就自己写了 步骤不多说: 一.申请AppID和AppKey,申请地址:点击打开链接 ...

  7. 第三方登陆-qq互联

    看到很多网站都有第三方登陆,使用业余时间自己也要实现一个第三方登陆的功能: 1.登陆qq互联的网站:https://connect.qq.com/index.html 2.点击头像进行资料申请 --- ...

  8. java可以微信qq同时登陆_java实现 微博登录、微信登录、qq登录实现代码_java_脚本之家...

    微信,微博,QQ,这是现在目前用的最多的手机 APP,我们做产品哪能不跟他们不沾边,对于登录,我想谁也不想要多少个帐号密码,根本记不住! 为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注 ...

  9. java实现QQ互联登录

    准备工作 1.云服务器 2.备案的域名 3.本地调试需要修改hosts文件,将域名映射到127.0.0.1 一.申请QQ互联,并成为开发者 QQ互联:https://connect.qq.com/in ...

  10. php qq登录修改回调地址,『通知』QQ无法登陆,QQ互联加强网站应用回调地址校验...

    2018年3月12日15:41:33 更新:还以为随便改一下URL就行了~~ 结果发现不行!!下面的总结的内容!!也通知一下大家本站QQ登录已经可以了! 最后仔细阅读了他们的文档,做以下修改!! 网站 ...

最新文章

  1. Docker 常用命令备忘录
  2. linux5.5 dev null,NULL TTY驱动程序将出现在Linux 5.2内核中
  3. 苹果手机壳_潮牌刺绣苹果8 Plus手机壳,让爱机焕然一新
  4. Maven学习—Nexus3私服搭建
  5. Cp与Cpk了解与计算
  6. VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
  7. 树莓派无法连接vnc,树莓派 vnc viewer 显示 cannot currently show the desktop 的解决方法
  8. 基因组共线性分析~mauve(图文教程)
  9. Markdown编辑器使用-yellowcong
  10. ckeditor5-vue自定义图片上传函数
  11. java meta-inf作用_java - META-INF的目的是什么?
  12. php做前端动态效果,通过CSS Animation进行前端动效
  13. 第二章 马尔可夫决策过程及表格型方法
  14. 第1关:学会使用 Gensim
  15. html怎么设置毛笔字体,三种实用的毛笔书法字体设计制作教程
  16. 【项目管理】项目进度管理
  17. 合工大宣城校区计算机老师,合肥工业大学计算机与信息学院导师教师师资介绍简介-△李春华...
  18. pandas内置数据集_Pandas数据分析实战01——Abalone Data Set(鲍鱼数据集)
  19. 微信公众平台网页开发实战-
  20. vue组件之具名slot 的分类案例

热门文章

  1. C语言也能干大事第十三节(如鹏基础)
  2. Apache Hadoop版本详解分享
  3. HIKSDK/大华SDK协议视频融合平台EasyCVR移动侦测录像功能无法在后台显示优化过程
  4. web前端开发面试题(五)
  5. 3月编程排行榜来了~有哪些新看点?
  6. Astah Professional三维图,网络上轻松上传图表
  7. MySQL读写分离的三种实现方案
  8. MatConvNet对自己的图片分两类及提取图片特征
  9. 网络七层协议和TCP/IP五层协议
  10. 用java实现九九乘法表的打印