场景:注册页面显示一个QQ图标,用户点击qq图标,跳转登录,用户登录后,获取到qq用户的信息,然后把信息绑定到自己的业务用户中
这里介绍下调用QQ第三方登录的具体步骤;
第一步:进入qq官网 申请接入: https://connect.qq.com/index.html (QQ互联)
注意;多个回调地址用分号隔开(;)且以 斜杠(/)结尾,如: http://www.abc.cn/wei;http://www.abc.cn/qq/auto/
第二步:审核通过后开始接入,我这里采用的是 网站应用-- OAuth2.0接入方式(登录授权),同时还有2个版本的SDK(js和java),我是做javaWeb开发的,所以采用的是javaSDk
在官网: http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD 找到Java SDK v2.0 点击下载
把下载下来的SDK解压 得到 Sdk4J.jar 导入到项目中,把得到的 qqconnectconfig.properties 配置文件放入到项目资源目录(根路径),
并修改qqconnectconfig.properties文件中的前面三个参数,都可以从申请的QQ互联 后台得到
第三步:见代码
//点击QQ图标
$('#qq').on('click', function () {
window.location.href =ctx + "/qq";
})
@RequestMapping(value = "/qq", method = RequestMethod.GET)
@ResponseBody
public void qqGetCode(HttpServletRequest request, HttpServletResponse response) {
try {
response.setHeader("Access-Control-Allow-Origin","*");
response.sendRedirect(new Oauth().getAuthorizeURL(request));//请求qq互联网页授权,回调域名地址请求
} catch (IOException e) {
e.printStackTrace();
} catch (QQConnectException e) {
e.printStackTrace();
}
}
//注意 这个请求/qq/auto/就是申请QQ互联时候的回调地址(排除域名前缀)
@RequestMapping(value = "/qq/auto/")
@ResponseBody
public ModelAndView thirdPartyQQ(HttpServletRequest request) {
try {
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
String accessToken = null,
openID = null;
if (accessTokenObj.getAccessToken().equals("")) {
System.out.print("没有获取到响应参数");
} else {
accessToken = accessTokenObj.getAccessToken();
// 利用获取到的accessToken 去获取当前用的openid -------- start
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
com.qq.connect.api.qzone.UserInfo qzoneUserInfo = new com.qq.connect.api.qzone.UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
//这个userInfoBean就是qq返回过来的用户信息,有openid,昵称,头像,
//赋值到自己的业务逻辑里面……进行处理
return new ModelAndView("redirect:/"); // 利用获取到的accessToken 去获取当前用户的openid --------- end
}
} catch (QQConnectException e) {
e.printStackTrace();
}
return new ModelAndView("redirect:/user/login");
}
备注:这个qqconnectconfig.properties配置文件是官方jar 读取,我们开发人员不需要管;
是不是很简单;我是第一次弄,所以也花了几个小时