微信公众平台, 服务器配置-Token 令牌校验报错 [解决方案]

原因
所写的服务器地址不对, 或者说, 项目中, 没有 代码接口/白名单接口URL
;
说明
本人使用 Java 版代码, 网上 90% 都是一些 PHP 代码 (可能因为官方给的例子就是这样写的), Demo 下载下来看着又有些乱, 我直接给出代码, 直接复制即可使用!
解决方案 [Java 代码]
private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5','6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* 将字节数组转换成十六进制字符串的形式
**/
public static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文转换成十六进制的字符串形式
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
return buf.toString();
}
// controller 接口
@RequestMapping("/wx/callback")
public String callBack(HttpServletResponse response, HttpServletRequest request,
String signature, String timestamp,
String nonce, String echostr) throws IOException {
String token = "服务器自定义的 Token"; // TODO 注意这里哦, 到和你的自定义 Token 配置一样
try {
String[] arr = new String[]{token, timestamp, nonce};
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
messageDigest.update(sb.toString().getBytes());
String sign = getFormattedText(messageDigest.digest());
if (sign.equals(signature)) {
return echostr;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// 这个 Controller 的接口地址就是你要配置的服务器地址(URL) https://你的域名/接口地址
// 例: https://lalala.cn/api/controller/wx/callback
// 当你保存时, 就会成功了!
// 如果项目具有 访问校验/登录校验 可以加个白名单;