注册
登录
Springboot集成QQ互联
集成QQ互联第三方登录 必须先审核通过,提交审核可以参考上一节内容
在集成之前需要将demo中的SDK4J.jar安装到本地 或在项目中单独引入
第一步:原生demo是serlvet版本的,我们这里改为springboot版本(其实两个都一样,只是后边使用springboot较多 所以这里直接使用springboot作为载体框架)

第二部:Springboot版本

第三步:添加sdk4j的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.qq</groupId>
<artifactId>Sdk4J</artifactId>
<version>2</version>
</dependency>
</dependencies>
第四步:修改qqconnectconfig.properties文件内容
需要将里面的appid和appkey以及回调地址改为我们自己的
app_ID = 102083221
app_KEY = TtACzXqujIcgV4NR
redirect_URI = http://www.etjava.cn/connect
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
第五步:放置登录图片
登录图片需要在QQ互联官网进行下载 选择自己合适的尺寸即可

将图片放置到static下的images目录中即可
第六步:在templates目录下创建一个index页面并使用图片按钮登录
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}"></title>
</head>
<body>
<a href="/qqLogin"><img src="/images/qqlogin.png"/></a>
</body>
</html>
第七步:创建controller进行业务处理
controller参考servlet版本中的IndexServlet和AfterLoginRedirectServlet两个业务处理类
IndexController
package com.et.controller;
import com.qq.connect.QQConnectException;
import com.qq.connect.api.OpenID;
import com.qq.connect.api.qzone.UserInfo;
import com.qq.connect.javabeans.AccessToken;
import com.qq.connect.javabeans.qzone.UserInfoBean;
import com.qq.connect.oauth.Oauth;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@Controller
public class IndexController {
@RequestMapping("/")
public ModelAndView index(){
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
mav.addObject("title","测试登录");
return mav;
}
@RequestMapping("/qqLogin")
public void qqLogin(HttpServletRequest request, HttpServletResponse response){
response.setContentType("text/html;charset=utf-8");
try {
response.sendRedirect(new Oauth().getAuthorizeURL(request));
} catch (Exception e) {
e.printStackTrace();
}
}
@RequestMapping("/connect")
public void connect(HttpServletRequest request, HttpServletResponse response)throws Exception{
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
try {
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
String accessToken = null,
openID = null;
long tokenExpireIn = 0L;
System.out.println("accessTokenObj.getAccessToken():: "+accessTokenObj.getAccessToken());
if (accessTokenObj.getAccessToken().equals("")) {
// 我们的网站被CSRF攻击了或者用户取消了授权
// 做一些数据统计工作
System.out.print("没有获取到响应参数");
} else {
accessToken = accessTokenObj.getAccessToken();
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);
openID = openIDObj.getUserOpenID();
out.println("欢迎你,代号为 " + openID + " 的用户!");
request.getSession().setAttribute("demo_openid", openID);
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
out.println("<br/>");
if (userInfoBean.getRet() == 0) {
out.println(userInfoBean.getNickname() + "<br/>");
out.println(userInfoBean.getGender() + "<br/>");
out.println("<image src=" + userInfoBean.getAvatar().getAvatarURL30() + "><br/>");
out.println("<image src=" + userInfoBean.getAvatar().getAvatarURL50() + "><br/>");
out.println("<image src=" + userInfoBean.getAvatar().getAvatarURL100() + "><br/>");
} else {
out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());
}
}
} catch (QQConnectException e) {
e.printStackTrace();
}
}
}
最后发布到服务器进行审核或测试即可
需要注意的是 必须审核通过后才能进行测试 审核通过之前 直接测试会返回100008错误代码 表示appid无效
* 审核通过后 如果登录成功没有显示用户相关信息 则改为www.xxx.xx这种方式在进行访问并测试即可