赞
踩
- 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) {
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。