JAVA微信公众号开发TOKEN验证失败怎么办?

 5140

JAVA微信公众号开发TOKEN验证失败怎么办?


JAVA微信公众号开发TOKEN验证失败怎么办?

JAVA微信公众号开发TOKEN验证失败的解决办法:

微信公众平台服务器配置时,需要引入token,但是提交的时候总是提示token验证失败,是因为微信后台并未检测到你代码中有验证token的代码,那么应该按照官方文档对token进行验证,验证后再将结果返回微信公众平台即可。

验证的代码为:

  1. public class SignUtil {
  2.     private static String token = "WnbVm6GTQj4BPmLliSday4K";//这里是自定义的token,需和你提交的token一致
  3.     /**
  4.     * 校验签名
  5.     * 
  6.     * @param signature 签名
  7.     * @param timestamp 时间戳
  8.     * @param nonce 随机数
  9.     * @return 布尔值
  10.     */
  11.     public static boolean checkSignature(String signature, String timestamp, String nonce) {
  12.         String checktext = null;
  13.         if (null != signature) {
  14.             // 对ToKen,timestamp,nonce 按字典排序
  15.             String[] paramArr = new String[] { token, timestamp, nonce };
  16.             Arrays.sort(paramArr);           
  17.             try {
  18.                 MessageDigest md = MessageDigest.getInstance("SHA-1");
  19.                 // 对接后的字符串进行sha1加密
  20.                 byte[] digest = md.digest(content.toString().getBytes());
  21.                 checktext = byteToStr(digest);
  22.             } catch (NoSuchAlgorithmException e) {
  23.                 e.printStackTrace();
  24.             }
  25.         }
  26.         // 将加密后的字符串与signature进行对比
  27.         return checktext != null ? checktext.equals(signature.toUpperCase()) : false;
  28.     }
  29.     /**
  30.     * 将字节数组转化为16进制字符串
  31.     * 
  32.     * @param byteArrays 字符数组
  33.     * @return 字符串
  34.     */
  35.     private static String byteToStr(byte[] byteArrays) {
  36.         String str = "";
  37.         for (int i = 0; i < byteArrays.length; i++) {
  38.             str += byteToHexStr(byteArrays[i]);
  39.         }
  40.         return str;
  41.     }
  42.     /**
  43.     * 将字节转化为十六进制字符串
  44.     * 
  45.     * @param myByte 字节
  46.     * @return 字符串
  47.     */
  48.     private static String byteToHexStr(byte myByte) {
  49.         char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
  50.         char[] tampArr = new char[2];
  51.         tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
  52.         tampArr[1] = Digit[myByte & 0X0F];
  53.         String str = new String(tampArr);
  54.         return str;
  55.     }
  56. }

提交时公众平台会请求你的地址,并校验你是否在后台做了验证,验证部分:

  1. if (StringUtils.isNotBlank(request.getParameter("signature"))) {
  2.     String signature = request.getParameter("signature");
  3.     String timestamp = request.getParameter("timestamp");
  4.     String nonce = request.getParameter("nonce");
  5.     String echostr = request.getParameter("echostr");
  6.     LOGGER.info("signature[{}], timestamp[{}], nonce[{}], echostr[{}]", signature, timestamp, nonce, echostr);
  7.     if (SignUtil.checkSignature(signature, timestamp, nonce)) {
  8.         LOGGER.info("数据源为微信后台,将echostr[{}]返回!", echostr);
  9.         response.getOutputStream().println(echostr);
  10.     }
  11. }

以上就是JAVA微信公众号开发TOKEN验证失败的解决办法。



TAG标签:
本文网址:https://www.zztuku.com/index.php/detail-7859.html
站长图库 - JAVA微信公众号开发TOKEN验证失败怎么办?
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐