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";
}

 

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭