QQ上网登录(Java) - Niceyoo

  小程序备案     |      2023-09-03
QQ上网登录(Java) - Niceyoo

一、准备部分

1、账户注册

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

首先,您需要在开放平台注册成为QQ互联网开发者。注册后,创建一个网站应用程序。请注意,申请时需要使用已成功备案的域名。

2、应用审核

审核通过后,如下图,审核通过后即可获取appid和appkey,用于开发时使用。

二、实现思路

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

生成QQ授权链接获取授权码,通过授权码获取用户的openid。使用openid查询用户信息。

看完这三步,是不是感觉很眼熟呢?没错,和微信是一样的,毕竟都是OAuth协议。如果不是特别清楚,可以去官方文档:腾讯开放平台文档—http://wiki.connect.qq.com/

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

编写授权链接接口编写授权回调接口,获取用户openid——获取授权码; -- 使用授权码获取accessToken; -- 使用accessToken获取用户openid。使用openid查询数据库的用户信息表中是否存在关系——如果使用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=版本(参数四) -Dpackaging=jarmvn install :install-file - Dfile='F:\Sdk4J.jar' -DgroupId=com.tengxun -DartifactId=sdk4j -Dversion=1.0 -Dpackaging=jar 在复制的项目中引入依赖:

dependencygroupIdcom.tengxun/groupIdartifactIdsdk4j/artifactIdversion1.0/version/dependency 将配置文件导入到复制的项目中

app_ID=APP_ID app_KEY=APP_KEY redirect_URI=回调地址范围=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_in fo,get_fanslist,get_idollist,add_idol,del_ido, get_tenpay_addrbaseURL=https://图。 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=33 359graph.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_fanslist getIdolsListURL=https://graph.qq.com/relation/get_id ollistaddIdolURL=3335 9graph.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 复制:

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

333 59graph.qq。 com/oauth2.0/authorize?response_type=codeclient_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 {StringauthorizeURL=new Oauth().getAuthorizeURL(request);log. info('authorizeURL:{}',authorizeURL);return 'redirect:' +authorizeURL;} catch (Exception e) {return ERROR_500_FTL;}} Copy:

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, HttpSer vletResponse 响应,HttpSession httpSession) {try {AccessToken accessTokenObj=(new Oauth()).getAccessTokenByRequest(request);if (accessTokenObj==null) {return ERROR_500_FTL;}String accessToken=accessTokenObj.getAccessToken();if (String Utils. isEmpty( accessToken)) {return ERROR_500_FTL;}/* 获取用户openid */OpenID openIDObj=new OpenID(accessToken);String openId=openIDObj.getUserOpenID();if (StringUtils.isEmpty(openId)) {return ERROR_500_FTL;}BaseResponseJSONObject findBy OpenId=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 文案如果您觉得本文有内容,不妨订阅niceyoo专栏。