微信公众号 原样返回echostr 仍然验证失败的坑

遇到的问题:

pkhYIUJ.jpg

死活token校验不通过,我真的不知道啥原因

微信要求:确认此次GET请求来自微信服务器,则原样返回echostr参数内容

都按要求来了,但怎么都不行,总是提示:Token校验失败,请检查确认

仔细检查了配置好几次,都没发现能有什么问题

我自己都通过浏览器手动输入参数认证了好几遍,都能验证成功,而且返回了echostr参数内容,那怎么微信开通设置老是提示Token校验失败,请检查确认?

这时,我注意到一个问题,那就是return回来的echostr是带双引号,而echo回来的echostr是不带双引号的。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 消息校验,确定是微信发送的消息
*
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
* @throws Exception
*/
@GetMapping("/get")
//-------------微信小程序消息验证,signature:072146db664ac6e89cf22ceb5ee35c0dc7536a66,timestamp:1720665348,nonce:190254112,echostr:7375403449705256878
public String doGet(String signature, String timestamp, String nonce, String echostr) {
log.info("-------------微信小程序消息验证,signature:{},timestamp:{},nonce:{},echostr:{}", signature, timestamp, nonce, echostr);
// 消息合法
if (wxMaService.checkSignature(timestamp, nonce, signature)) {
log.info("-------------微信小程序消息验证通过,echostr:{}", echostr);
return echostr;
}
// 消息签名不正确,说明不是公众平台发过来的消息
return null;
}

死活验证不过去,百度半天没人给出正确的解决办法。最后终于找到了解决办法,把echostr改成Long类型,验证成功

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 消息校验,确定是微信发送的消息
*
* @param signature
* @param timestamp
* @param nonce
* @param echostr
* @return
* @throws Exception
*/
@GetMapping("/get")
//-------------微信小程序消息验证,signature:072146db664ac6e89cf22ceb5ee35c0dc7536a66,timestamp:1720665348,nonce:190254112,echostr:7375403449705256878
public Long doGet(String signature, String timestamp, String nonce, Long echostr) {
log.info("-------------微信小程序消息验证,signature:{},timestamp:{},nonce:{},echostr:{}", signature, timestamp, nonce, echostr);
// 消息合法
if (wxMaService.checkSignature(timestamp, nonce, signature)) {
log.info("-------------微信小程序消息验证通过,echostr:{}", echostr);
return echostr;
}
// 消息签名不正确,说明不是公众平台发过来的消息
return null;
}

pkhY5E4.md.png

文章结束!