这是我的实现类代码:
log.info("开始调用微信公众号签名验证接口!!!");log.info("微信验签传递的参数分别为:signature:{}、timestamp:{}、nonce:{}、echostr:{}",signature, timestamp, nonce, echostr);// 微信验签传递的参数均非空if (Stream.of(signature, timestamp, nonce, echostr).anyMatch(StringUtils::isBlank)) {log.info("微信验签传递的参数存在空值,微信验签失败!!!");return null;}// 构建参数列表,将参数排序并拼接为一个字符串List<String> arguments = Arrays.asList(weChatConfig.getToken(), timestamp, nonce);String concatenatedArguments = arguments.stream().sorted().collect(Collectors.joining());log.info("微信公众号配置的Token为:" + weChatConfig.getToken());try {// 创建MessageDigest对象,使用指定的摘要算法MessageDigest digest = MessageDigest.getInstance(WeChatConstant.DIGEST_ALGORITHM);// 计算摘要,将拼接的参数字符串转换为字节数组后进行摘要计算String calculatedDigest = Hex.encodeHexString(digest.digest(concatenatedArguments.getBytes()));if (StringUtils.equals(signature, calculatedDigest)) {log.info("调用微信公众号签名验证接口完毕,微信验签成功!!!");return echostr;}} catch (NoSuchAlgorithmException e) {e.printStackTrace();log.info("微信验签过程中发生了异常,微信验签失败!!!");}log.info("调用微信公众号签名验证接口完毕,微信验签失败!!!");return null;
这是实现类中用到的常量:
/*** 微信验签 验签参数的加密算法*/public static final String DIGEST_ALGORITHM = "sha1";
这是微信测试公众号配置失败 {"errcode":-106,"errmsg":"token check fail"}的控制层代码:
这是微信测试公众号配置成功的控制层代码:
这是微信官方文档:
最后,我只想说:tmd,好无语了!!!