微信公众号服务器配置验证token
@GetMapping("/demo3") public String demo3(String timestamp, String nonce, String signature, String echostr, HttpServletRequest request) throws IOException { System.out.println("timestamp = " + timestamp); System.out.println("nonce = " + nonce); System.out.println("signature = " + signature); System.out.println("echostr = " + echostr); String token = request.getHeader("token"); token = "charname"; boolean checkSignature = checkSignature(signature, timestamp, nonce, token); if (checkSignature == true) { return echostr; } else { return null; } }
public static boolean checkSignature(String signature, String timestamp, String nonce, String token) { // 1.将token、timestamp、nonce三个参数进行字典序排序 String[] arr = new String[]{token, timestamp, nonce}; Arrays.sort(arr); // 2. 将三个参数字符串拼接成一个字符串进行sha1加密 StringBuilder content = new StringBuilder(); for (int i = 0; i < arr.length; i++) { content.append(arr[i]); } MessageDigest md = null; String tmpStr = null; try { md = MessageDigest.getInstance("SHA-1"); // 将三个参数字符串拼接成一个字符串进行sha1加密 byte[] digest = md.digest(content.toString().getBytes()); tmpStr = byteToStr(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } content = null; // 3.将sha1加密后的字符串可与signature对比,标识该请求来源于微信 return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false; } private static String byteToStr(byte[] byteArray) { StringBuilder strDigest = new StringBuilder(); for (int i = 0; i < byteArray.length; i++) { strDigest.append(byteToHexStr(byteArray[i])); } return strDigest.toString(); } private static String byteToHexStr(byte mByte) { char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; char[] tempArr = new char[2]; tempArr[0] = Digit[(mByte >>> 4) & 0x0F]; tempArr[1] = Digit[mByte & 0x0F]; String s = new String(tempArr); return s; }
最终结果,没卵用啊,开启了服务器后,自定义菜单失效并且自动回复也失效。在这里插入代码片
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)