QQ联合登录(使用JAVA SDK)(WAP端浏览器不能正常使用JS SDK)

    关于QQ联合登录官方文档提供了很方便的JS SDK ,但是在手机WAP网站使用JS SDK时,大多数浏览器调起QQ登录后不能正常回调,只有极个别的浏览器能正常使用,比如我试了手机谷歌浏览器可以使用,但是譬如qq浏览器,Safari浏览器都不能正常回调。

    于是考虑到时浏览器兼容性问题,所以放弃JS SDK ,开始使用 JAVA SDK。一切OK。

    首先,从http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD下载JAVA SDK,解压后,我们需要用到的是qqconnectconfig.properties。

    然后,在项目中引入依赖

    <dependency>

<groupId>net.gplatform</groupId>

        <artifactId>Sdk4J</artifactId>

        <version>2.0</version>

    </dependency>

    接着,把qqconnectconfig.properties放到项目resource下,修改里面内容,


只修改前三行,其中redirect_URL是回调地址,这个需要QQ互联应用管理中配置。

一切配置完成,最后写调起QQ登录和回调的方法。

1、页面设置登录按钮,为按钮添加点击事件,比如 qqLogin.action。

2、在java后台写qqLogin方法。

        @RequestMapping(value = "/qqLogin")
public void aaLogin(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=utf-8");
try {
response.sendRedirect(new Oauth().getAuthorizeURL(request));
} catch (IOException e) {
e.printStackTrace();
} catch (QQConnectException e) {
e.printStackTrace();
}

}

写完该方法,此时点击按钮,会跳转到QQ登录页面。


3、接着,写回调方法,比如我的回调方法名为 :qqDoLogin.action,那么,在qqconnectconfig.properties的redirect_URL要填 域名+qqDoLogin.action,比如我:http://www.songsir.net/qqDoLogin.action。(当然,QQ互联应用管理中配置的也是该地址)

代码如下:

        @RequestMapping(value = "/qqDoLogin")
public String afterLogin(HttpServletRequest request, HttpServletResponse response) {
try {
AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
String accessToken = null;
String openID = null;
String nickname = null;
if (accessTokenObj.getAccessToken().equals("")) {
/**
* 我们的网站被CSRF攻击了或者用户取消了授权 做一些数据统计工作
*/
logger.info("没有响应参数");
return "member/login";
} else {
accessToken = accessTokenObj.getAccessToken();
/**
* 利用获取到的accessToken 去获取当前用的openid
*/
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
if (userInfoBean.getRet() == 0) {
nickname = userInfoBean.getNickname();
} else {
logger.info("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());
return "member/login";
}

}

                        /**
* 获取到用户qq信息,商家应用后台做一系列登录注册等方法
*/

JSONObject vapQQLoginJson = vapQQLogin(openID, accessToken, nickname, request, response);
logger.info("登录:" + vapQQLoginJson);
if (vapQQLoginJson.getBoolean("success")) {
return redirect(response, "member.html");
} else {
return "member/login";
}

} catch (QQConnectException e) {
e.printStackTrace();
} catch (Exception e) {
}
logger.info("qqDoLogin请求失败");
return "member/login";
}


猜你喜欢

转载自blog.csdn.net/SongSir001/article/details/80347065
SDK