QQ集成登陆

 QQ授权登陆文档详解与步骤
一、在QQ的开发平台申请Appkey与Appid。但是申请的前提是需要域名。把拿到的appkey与appid存放在一个txt文档中,以便用到。
二、到技术支持中心下载Java sdk包。不要自己用httpclient去调用QQ的接口,那样可能会被别人攻击网站。 下载好的sdk里会有一个demo,把demo里的lib下的依赖包放到工程lib下,然后把那几个.property文件放到src下面。并把qqconnectconfig.properties文件里的前三项改成你自己的appkey,appid,和redirect_URI(QQ同意授权后,跳回到您的系统里的哪个路径)。
三、使用说明:在页面点击一个按钮后,跳到action里的方法,在方法里,重定向一个请求到QQAPI。用QQ的API我们直接重定向的方式如下:
String url=new Oauth().getAuthorizeURL(request);这样我们可以得到请求的路径了,使用自带的qq的sdk包,我们可以直接这样调。如果不使用这个方式,则直接发送请求:
https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=[YOUR_APPID]&redirect_uri=[YOUR_REDIRECT_URI]&scope=[THE_SCOPE]请求上面这个地址
请求后,会弹出一个授权页面,如果我们同意授权后,会自动跳转到我们的“redirect_uri”路径里,并在我们的“redirect_uri”后面加上“?code=XXXXXXX”
然后我们可以根据返回来的参数code来拿到access_token和其它的一些信息。例如:
我们可以拿到access_token后,可以根据它拿到用户的openid,然后根据access_token与openid可以拿到用户的信息,代码如下:

/**
* 进入QQ重定向的页面,取用户数据。
*TODO void
* @throws IOException 
*/
@Filters
@At("/regidt")
@Ok("jsp:member.regidt")
public void regidt(@Param("code") String code , HttpServletRequest request,HttpServletResponse response) throws IOException{
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
try {
System.out.println(request.getParameter("code"));
AccessToken accessTokenObj = new Oauth().getAccessTokenByRequest(request);
String accessToken = null,
openID = null;
long tokenExpireIn = 0L;
if (accessTokenObj.getAccessToken().equals("")) {
System.out.print("没有获取到响应参数");
} else {
accessToken = accessTokenObj.getAccessToken();
tokenExpireIn = accessTokenObj.getExpireIn();
request.getSession().setAttribute("demo_access_token", accessToken);
request.getSession().setAttribute("demo_token_expirein", String.valueOf(tokenExpireIn));
// 利用获取到的accessToken 去获取当前用的openid -------- start
OpenID openIDObj = new OpenID(accessToken);
openID = openIDObj.getUserOpenID();
out.println("欢迎你,代号为 " + openID + " 的用户!");
request.getSession().setAttribute("demo_openid", openID);
// 利用获取到的accessToken 去获取当前用户的openid --------- end
UserInfo qzoneUserInfo = new UserInfo(accessToken, openID);
UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo();
request.setAttribute("userInfoBean", userInfoBean);
out.println("
");
if (userInfoBean.getRet() == 0) {
out.println(userInfoBean.getNickname() + "
");
out.println(userInfoBean.getGender() + "
");
} else {
out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());
}
out.println("<p> end -----------------------------------利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息 ---------------------------- end </p>");

out.println("<p> start ----------------------------------- 验证当前用户是否为认证空间的粉丝------------------------------------------------ start <p>");
PageFans pageFansObj = new PageFans(accessToken, openID);
PageFansBean pageFansBean = pageFansObj.checkPageFans("97700000");
if (pageFansBean.getRet() == 0) {
out.println("<p>验证您" + (pageFansBean.isFans() ? "是" : "不是") + "QQ空间97700000官方认证空间的粉丝</p>");
} else {
out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + pageFansBean.getMsg());
}
out.println("<p> end ----------------------------------- 验证当前用户是否为认证空间的粉丝------------------------------------------------ end <p>");



out.println("<p> start -----------------------------------利用获取到的accessToken,openid 去获取用户在微博的昵称等信息 ---------------------------- start </p>");
com.qq.connect.api.weibo.UserInfo weiboUserInfo = new com.qq.connect.api.weibo.UserInfo(accessToken, openID);
com.qq.connect.javabeans.weibo.UserInfoBean weiboUserInfoBean = weiboUserInfo.getUserInfo();
if (weiboUserInfoBean.getRet() == 0) {
//获取用户的微博头像----------------------start
out.println("<image src=" + weiboUserInfoBean.getAvatar().getAvatarURL30() + "/>
");
out.println("<image src=" + weiboUserInfoBean.getAvatar().getAvatarURL50() + "/>
");
out.println("<image src=" + weiboUserInfoBean.getAvatar().getAvatarURL100() + "/>
");
//获取用户的微博头像 ---------------------end

//获取用户的生日信息 --------------------start
out.println("<p>尊敬的用户,你的生日是: " + weiboUserInfoBean.getBirthday().getYear()
+ "年" + weiboUserInfoBean.getBirthday().getMonth() + "月" +
weiboUserInfoBean.getBirthday().getDay() + "日");
//获取用户的生日信息 --------------------end

StringBuffer sb = new StringBuffer();
sb.append("<p>所在地:" + weiboUserInfoBean.getCountryCode() + "-" + weiboUserInfoBean.getProvinceCode() + "-" + weiboUserInfoBean.getCityCode()
+ weiboUserInfoBean.getLocation());

//获取用户的公司信息---------------------------start
ArrayList<Company> companies = weiboUserInfoBean.getCompanies();
if (companies.size() > 0) {
//有公司信息
for (int i=0, j=companies.size(); i<j; i++) {
sb.append("<p>曾服役过的公司:公司ID-" + companies.get(i).getID() + " 名称-" +
companies.get(i).getCompanyName() + " 部门名称-" + companies.get(i).getDepartmentName() + " 开始工作年-" +
companies.get(i).getBeginYear() + " 结束工作年-" + companies.get(i).getEndYear());
}
} else {
//没有公司信息
}
//获取用户的公司信息---------------------------end

out.println(sb.toString());

} else {
out.println("很抱歉,我们没能正确获取到您的信息,原因是: " + weiboUserInfoBean.getMsg());
}
out.println("<p> end -----------------------------------利用获取到的accessToken,openid 去获取用户在微博的昵称等信息 ---------------------------- end </p>");
}
} catch (QQConnectException e) {
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值