/** * qq登陸驗證 * * @param request * @param response * @author linwk 2016年6月15日 * @throws Exception */ public static void doPost(HttpServletRequest request, HttpServletResponse response, String code) throws Exception { response.setContentType("text/html; charset=utf-8"); // PrintWriter out = response.getWriter(); try { // code 格式:7C3741B3B38C48BC42FFDA5A5D95D56B // https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=[YOUR_APP_ID]&client_secret=[YOUR_APP_Key]&code=[The_AUTHORIZATION_CODE]&state=[The_CLIENT_STATE]&redirect_uri=[YOUR_REDIRECT_URI] String url = " https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=" + app_ID + "&client_secret=" + accessToken + "&code=" + code + "&redirect_uri=" + domailString; String accrssString = HttpUtils.doGet(url); logger.info("access_token=" + accrssString); // access_token=A8737F532ECF20BD081BDEE51A8C34F5&expires_in=7776000&refresh_token=1CCF78452DD3832B74144093171572E5html
String accrssString_access_token = null; // 關鍵 String accessToken = null, openID = null; long tokenExpireIn = 0L; if (StringUtils.isNoneBlank(accrssString)) { String pattern_acessString = "access_token=(.*?)&expires_in="; Pattern p_acessString = Pattern.compile(pattern_acessString); Matcher m_acessString = p_acessString.matcher(accrssString); ArrayList<String> strs_acessString = Lists.newArrayList(); while (m_acessString.find()) { strs_acessString.add(m_acessString.group(1)); } for (String s : strs_acessString) { accessToken = s; logger.info("經過access_token=" + s + ",獲取openid"); String url_access_token = "https://graph.qq.com/oauth2.0/me?access_token=" + s; accrssString_access_token = HttpUtils.doGet(url_access_token); logger.info(accrssString_access_token); // callback( // {"client_id":"101334493","openid":"DD5460B710B4524962810BB007C81AD4"} // ); } } AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request); if (StringUtils.isNoneBlank(accrssString_access_token)) { // 獲取 openid clientid // {"client_id":"101334493","openid":"DD5460B710B4524962810BB007C81AD4"} String openidString = "{\"client_id\":\"101334493\",\"openid\":\"DD5460B710B4524962810BB007C81AD4\"}"; String client_id = "\"client_id\":\"(.*?)\",\"openid\""; String openid = "\"openid\":\"(.*?)\"}"; Pattern p_client_id = Pattern.compile(client_id); Matcher m_client_id = p_client_id.matcher(openidString); ArrayList<String> strs_client_id = Lists.newArrayList(); while (m_client_id.find()) { strs_client_id.add(m_client_id.group(1)); } for (String s : strs_client_id) { logger.info(s); } Pattern p_openid = Pattern.compile(openid); Matcher m_openid = p_openid.matcher(openidString); ArrayList<String> strs_openid = Lists.newArrayList(); while (m_openid.find()) { strs_openid.add(m_openid.group(1)); } for (String s : strs_openid) { logger.info(s); openID = s; } } if (accessTokenObj.getAccessToken().equals("")) { // 咱們的網站被CSRF攻擊了或者用戶取消了受權 // 作一些數據統計工做 logger.info("沒有獲取到響應參數"); } 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(); logger.info("歡迎你,代號爲 " + openID + " 的用戶!"); request.getSession().setAttribute("demo_openid", openID); logger.info("<a href=" + "/shuoshuoDemo.html" + " target=\"_blank\">去看看發表說說的demo吧</a>"); // 利用獲取到的accessToken 去獲取當前用戶的openid --------- end } if (StringUtils.isBlank(openID) || StringUtils.isBlank(accessToken)) { return; } logger.info("<p> start -----------------------------------利用獲取到的accessToken,openid 去獲取用戶在Qzone的暱稱等信息 ---------------------------- start </p>"); UserInfo qzoneUserInfo = new UserInfo(accessToken, openID); UserInfoBean userInfoBean = qzoneUserInfo.getUserInfo(); logger.info("<br/>"); if (userInfoBean.getRet() == 0) { logger.info(userInfoBean.getNickname() + "<br/>"); logger.info(userInfoBean.getGender() + "<br/>"); logger.info("黃鑽等級: " + userInfoBean.getLevel() + "<br/>"); logger.info("會員 : " + userInfoBean.isVip() + "<br/>"); logger.info("黃鑽會員: " + userInfoBean.isYellowYearVip() + "<br/>"); logger.info("<image src=" + userInfoBean.getAvatar().getAvatarURL30() + "/><br/>"); logger.info("<image src=" + userInfoBean.getAvatar().getAvatarURL50() + "/><br/>"); logger.info("<image src=" + userInfoBean.getAvatar().getAvatarURL100() + "/><br/>"); } else { logger.info("很抱歉,咱們沒能正確獲取到您的信息,緣由是: " + userInfoBean.getMsg()); } logger.info("<p> end -----------------------------------利用獲取到的accessToken,openid 去獲取用戶在Qzone的暱稱等信息 ---------------------------- end </p>"); logger.info("<p> start ----------------------------------- 驗證當前用戶是否爲認證空間的粉絲------------------------------------------------ start <p>"); PageFans pageFansObj = new PageFans(accessToken, openID); PageFansBean pageFansBean = pageFansObj.checkPageFans("97700000"); if (pageFansBean.getRet() == 0) { logger.info("<p>驗證您" + (pageFansBean.isFans() ? "是" : "不是") + "QQ空間97700000官方認證空間的粉絲</p>"); } else { logger.info("很抱歉,咱們沒能正確獲取到您的信息,緣由是: " + pageFansBean.getMsg()); } logger.info("<p> end ----------------------------------- 驗證當前用戶是否爲認證空間的粉絲------------------------------------------------ end <p>"); logger.info("<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 logger.info("<image src=" + weiboUserInfoBean.getAvatar().getAvatarURL30() + "/><br/>"); logger.info("<image src=" + weiboUserInfoBean.getAvatar().getAvatarURL50() + "/><br/>"); logger.info("<image src=" + weiboUserInfoBean.getAvatar().getAvatarURL100() + "/><br/>"); // 獲取用戶的微博頭像 ---------------------end // 獲取用戶的生日信息 --------------------start logger.info("<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 logger.info(sb.toString()); } else { logger.info("很抱歉,咱們沒能正確獲取到您的信息,緣由是: " + weiboUserInfoBean.getMsg()); } logger.info("<p> end -----------------------------------利用獲取到的accessToken,openid 去獲取用戶在微博的暱稱等信息 ---------------------------- end </p>"); } catch (QQConnectException e) { } }
}java