@RequestMapping(value = "/getConfig") @ResponseBody public Map<String, String> getConfig(HttpServletRequest request) { String accessToken = request.getParameter("accessToken"); String url = request.getParameter("url"); String jsApiTicket = request.getParameter("jsApiTicket"); // String url="app.lanbanshou.com/SSMDemo"; Map<String, String> map = makeWXTicket(jsApiTicket, url); return map; } /** * 获取access_token * @param request * @param response * @throws Exception */ @RequestMapping(value = "/getAccessToken") @ResponseBody private JSONObject getAccessToken(HttpServletResponse response) { String accessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET"; String requestUrl = accessTokenUrl.replace("APPID", WXConfig.appid).replace("APPSECRET", WXConfig.appsecret); String result = HttpClientUtil.doGet(requestUrl); //System.out.println(result+"==========="); return JSON.parseObject(result); } // 获取ticket @RequestMapping(value = "/getJsApiTicket") @ResponseBody private JSONObject getJsApiTicket(String accessToken) { String apiTicketUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi"; String requestUrl = apiTicketUrl.replace("ACCESS_TOKEN", accessToken); String result = HttpClientUtil.doGet(requestUrl); return JSON.parseObject(result); } // 生成微信权限验证的参数 public Map<String, String> makeWXTicket(String jsApiTicket, String url) { Map<String, String> ret = new HashMap<String, String>(); String nonceStr = createNonceStr(); String timestamp = createTimestamp(); String string1; String signature = ""; // 注意这里参数名必须全部小写,且必须有序 string1 = "jsapi_ticket=" + jsApiTicket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + url; try { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(string1.getBytes("UTF-8")); signature = byteToHex(crypt.digest()); } catch (NoSuchAlgorithmException e) { } catch (UnsupportedEncodingException e) { } ret.put("url", url); ret.put("jsapi_ticket", jsApiTicket); ret.put("nonceStr", nonceStr); ret.put("timestamp", timestamp); ret.put("signature", signature); ret.put("appid", WXConfig.appid); return ret; } // 字节数组转换为十六进制字符串 private static String byteToHex(final byte[] hash) { Formatter formatter = new Formatter(); for (byte b : hash) { formatter.format("%02x", b); } String result = formatter.toString(); formatter.close(); return result; } // 生成随机字符串 private static String createNonceStr() { return UUID.randomUUID().toString(); } // 生成时间戳 private static String createTimestamp() { return Long.toString(System.currentTimeMillis() / 1000); }
注意:调用时必须加入白名单
大家觉得不错的话可以支持一下我哦