Java微信网页授权获取用户信息 微信分享
2017-11-13 18:09
721 查看
1. 微信授权获取用户信息
1. 网页链接 javascript:var redirectUrl = window.location.protocol + "//" + window.location.host + "/web/share/index.html"; var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx9fea09e960df08c0&redirect_uri=" + redirectUrl + "&response_type=code&scope=snsapi_userinfo&state=" + token + "#wechat_redirect";
2. 通过code换取网页授权access_token,拉取用户信息(需scope为 snsapi_userinfo) java:
/*第二步:通过code换取网页授权access_token*/ @RequestMapping("/getUserInfoByCode") @ResponseBody public Object getUserInfoByCode(@RequestParam String code) { StringBuffer url = new StringBuffer(); url.append("https://api.weixin.qq.com/sns/oauth2/access_token").append("?appid=").append(CommonConstant .WX_APP_ID).append("&secret=").append(CommonConstant.WX_APP_SECRET).append("&code=").append(code) .append("&grant_type=authorization_code"); String result = HttpServiceUtils.sendHttpsPostRequest(url.toString(), "", HttpParamDto.DEFAULT_CHARSET); Map<String, String> resultMap = (Map<String, String>) JSONObject.parse(result); /* 第四步:拉取用户信息(需scope为 snsapi_userinfo)*/ StringBuffer userUrl = new StringBuffer(); userUrl.append("https://api.weixin.qq.com/sns/userinfo"); String access_token = resultMap.get("access_token"); userUrl.append("?access_token=").append(access_token); String openid = resultMap.get("openid"); userUrl.append("&openid=").append(openid); userUrl.append("&lang=").append("zh_CN"); String userInfoResult = HttpServiceUtils.sendHttpsPostRequest(userUrl.toString(), "", HttpParamDto .DEFAULT_CHARSET); Map<String, String> userInfoResultMap = (Map<String, String>) JSONObject.parse(userInfoResult); return buildSuccJson(userInfoResultMap); }
2. 微信分享获取JsApiTicket java:
@Override public Map<String, String> getJsApiTicket(String pageUrl) { /* 获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token)*/ String wx_access_token = redisService.kryoGet("wx_access_token", String.class); if (StringUtils.isBlank(wx_access_token)) { StringBuffer url = new StringBuffer(); url.append("https://api.weixin.qq.com/cgi-bin/token?").append("grant_type=client_credential&appid=") .append(CommonConstant.WX_APP_ID).append("&secret=").append(CommonConstant.WX_APP_SECRET); String result = HttpServiceUtils.sendHttpsPostRequest(url.toString(), "", HttpParamDto.DEFAULT_CHARSET); wx_access_token = JSONObject.parseObject(result).getString("access_token"); if (null != wx_access_token) { redisService.kryoSetEx("wx_access_token", 7200, wx_access_token); } } log.info("wx_access_token:" + wx_access_token); /* 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket*/ String jsApiTicket = redisService.kryoGet("wx_js_api_ticket", String.class); if (StringUtils.isBlank(jsApiTicket)) { StringBuffer getTicketUrl = new StringBuffer(); getTicketUrl.append("https://api.weixin.qq.com/cgi-bin/ticket/getticket?").append("access_token=").append (wx_access_token).append("&type=jsapi"); String getTicketResult = HttpServiceUtils.sendRequest(getTicketUrl.toString()); jsApiTicket = JSONObject.parseObject(getTicketResult).getString("ticket"); int activeTime = Integer.parseInt(JSONObject.parseObject(getTicketResult).getString("expires_in")); if (StringUtils.isNotBlank(jsApiTicket)) { redisService.kryoSetEx("wx_js_api_ticket", activeTime, jsApiTicket); } } log.info("wx_access_token:" + jsApiTicket); Random random = new Random(); String nonceStr = Md5Util.getMD5String(String.valueOf(random.nextInt(10000)).getBytes()); String timeStamp = String.valueOf(System.currentTimeMillis() / 1000); String sign = "jsapi_ticket=" + jsApiTicket + "&noncestr=" + nonceStr + "×tamp=" + timeStamp + "&url=" + pageUrl; log.info("wx_access_token:" + sign); String signature = getSha1(sign); log.info("wx_access_token:" + signature); Map<String, String> resultMap = new HashMap<>(); resultMap.put("timestamp", timeStamp); resultMap.put("nonceStr", nonceStr); resultMap.put("signature", signature); resultMap.put("appId", CommonConstant.WX_APP_ID); return resultMap; } public static String getSha1(String str) { if (str == null || str.length() == 0) { return null; } char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update(str.getBytes("UTF-8")); byte[] md = mdTemp.digest(); int j = md.length; char buf[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[k++] = hexDigits[byte0 & 0xf]; } return new String(buf); } catch (Exception e) { return null; } }
3.微信分享前端的JS代码 略
参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115相关文章推荐
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<四>
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<三>
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<一>
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<五>
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<二>
- java 网页授权获取微信用户信息错误 40029 微信端会发出两次请求 错误的oauth第二次无效的code
- Java微信网页授权授权获取用户基本信息
- 微信网页中获取用户基本信息(网页授权操作)
- 微信开发之网页授权获取用户基本信息
- Ruby on Rails微信开发4——通过网页授权获取用户的基本信息
- 微信开发之网页授权获取用户信息(二)
- 微信公众号开发-微信网页授权获取用户openid以及用户信息的步骤
- 微信网页授权获取用户基本信息
- 微信--网页授权获取用户基本信息
- 微信开发之网页授权获取用户信息(二)
- 微信使用网页授权获取用户基本信息
- 微信 网页授权获取用户基本信息(OAuth 2.0)
- 微信网页授权获取用户基本信息
- 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息
- 微信开发 网页授权获取用户基本信息