平台之前使用的腾讯开发平台的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,回调中可以直接进行跳转。