一 微信公众平台开发JAVA验证来自微信服务器的消息

备注:测试基于微信公众平台测试号编写,真实开发环境基本适用
微信公众平台测试账号申请:
【一微信公众平台开发JAVA验证来自微信服务器的消息】需要填写接口配置和安全域名,这里需要有自己的服务器,如果没有的话可以参考一下这篇文章:
填写好配置之后可以参考微信开放平台的文档:

一  微信公众平台开发JAVA验证来自微信服务器的消息

文章插图
上面的接入指南里给出来了解释:
下面直接上代码:
一  微信公众平台开发JAVA验证来自微信服务器的消息

文章插图
/*** 验证微信签名*/@GetMapping("/index")@ResponseBodypublic String gettoken(String signature,String timestamp,String nonce,String echostr){boolean checkSignature = checkSignature(signature, timestamp, nonce);if(checkSignature == true){return echostr;}else {return null;}}
/*** 验证微信签名*/public static boolean checkSignature(String signature, String timestamp,String nonce) {// 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;}
后台接口写好之后启动项目,去微信配置那里写好点击提交,显示验证成功,就是可以了 。如果没有成功,就要自己检查看是哪里出了问题 。
参考: