Spring Boot控制器配置WhatsApp Cloud API验证失败求助
排查WhatsApp Cloud API回调验证失败问题
以下是几个关键排查方向:
验证令牌完全匹配检查
确保WhatsApp配置页面输入的验证令牌和代码中VERIFICATION_TOKEN的字符串完全一致,包括大小写、空格、特殊字符,任何细微差异都会导致验证失败。Ngrok URL与路径正确性
- 配置的回调URL必须是Ngrok当前运行的隧道地址,且末尾拼接
/webhook路径,例如完整URL应为https://xxxx-xx-xx-xx-xx.ngrok.io/webhook。 - 手动用浏览器访问该完整URL并携带测试参数:
https://xxxx.ngrok.io/webhook?hub.mode=subscribe&hub.challenge=test&hub.verify_token=12345,检查是否能返回test和200状态码。如果访问失败,说明Ngrok隧道未正常转发或Spring Boot服务未启动。
- 配置的回调URL必须是Ngrok当前运行的隧道地址,且末尾拼接
Spring Boot服务与端口匹配
- 确认Spring Boot服务本地正常启动,且Ngrok命令指定的转发端口与服务端口一致(例如服务用8080端口,Ngrok命令需写
ngrok http 8080)。 - 查看Spring Boot日志,验证配置回调时是否收到了来自WhatsApp的GET请求。若日志中无该请求记录,说明请求未到达服务,需检查Ngrok隧道或网络连接。
- 确认Spring Boot服务本地正常启动,且Ngrok命令指定的转发端口与服务端口一致(例如服务用8080端口,Ngrok命令需写
请求参数名严格匹配
代码中@RequestParam的参数名必须与WhatsApp传递的参数完全一致:hub.mode、hub.challenge、hub.verify_token,不能修改大小写或替换下划线为驼峰命名。防火墙/代理拦截排查
本地防火墙、杀毒软件或代理工具可能拦截了Ngrok的请求,暂时关闭相关工具后重新尝试验证。
附你提供的控制器代码:
@RestController public class WhatsappController { private final String VERIFICATION_TOKEN = "12345"; @GetMapping("/webhook") public ResponseEntity<String> verifyWebhook(@RequestParam("hub.mode") String mode, @RequestParam("hub.challenge") String challenge, @RequestParam("hub.verify_token") String token) { if (mode.equals("subscribe") && token.equals(VERIFICATION_TOKEN)) { return new ResponseEntity<>(challenge, HttpStatus.OK); } else { return new ResponseEntity<>("Verification token or mode mismatch", HttpStatus.FORBIDDEN); } } }
内容的提问来源于stack exchange,提问作者akash goyal
相关产品推荐
相关产品推荐

