天天看点

QQ联合登录

平台之前使用的腾讯开发平台的JS SDK。偶然发现,很多浏览器对于js的兼容性不好,导致大部分浏览器在触发QC.login方法之后不能回调,纠结半天不得其解,于是直接换成java SDK。

1,前端登录按钮

<p>第三方登录:<a href="qqUnionLogin.do" target="_blank" rel="external nofollow"  ><img src="images/loginQQ.png" width="19" /></a></p>
           

 2,下载官方sdk包:

http://qzonestyle.gtimg.cn/qzone/vas/opensns/res/doc/qqConnect_Server_SDK_java_v2.0.zip

jar包放入lib目录。

maven项目使用:

<dependency>
 
        <groupId>net.gplatform</groupId>
 
        <artifactId>Sdk4J</artifactId>
 
        <version>2.0</version>
 
    </dependency>
           

3,修改sdk配置文件 qqconnectconfig.properties (sdk包中有提供)

app_ID =*********
app_KEY =*************
redirect_URI =http://******.useQQLogin.do
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
           

只需要修改前三行。

3,编写按钮请求后台地址,用于大概qq登录页面

public void qqUnionLogin() {
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
	    response.setContentType("text/html;charset=utf-8");
	    try {
	        response.sendRedirect(new Oauth().getAuthorizeURL(request));
	    } catch (IOException e) {
	        e.printStackTrace();
	    } catch (QQConnectException e) {
	        e.printStackTrace();
	    }
	}
           

4,编写qq登录成功之后的回调方法,方法中包含对平台用户的操作。

public String useQQLogin() throws Exception
	{
		logger.info("useQQLogin method...");
		String Mes = "";
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		
		AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
        String accessToken = null;
        String openID = null;
        String nickname = null;
        if (accessTokenObj.getAccessToken().equals("")) {
            /**
            * 我们的网站被CSRF攻击了或者用户取消了授权 做一些数据统计工作
            */
            logger.info("没有响应参数");
        } 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());
            }
        }
		
	}
           

由于公司原因  具体操作代码已删除。

5,回调中可以直接进行跳转。