配置WhatsApp Webhook回调URL时验证失败求助
解决WhatsApp Webhook验证失败问题
核心验证逻辑要求
WhatsApp Webhook验证时,Meta服务器会发送GET请求,携带hub.mode、hub.verify_token、hub.challenge三个参数,你必须完成以下操作:
- 校验
hub.mode是否为subscribe - 确认
hub.verify_token和你在配置页面设置的令牌完全一致(大小写、空格、特殊字符都要匹配) - 以上条件满足时,直接返回
hub.challenge的原始值,响应头Content-Type设为text/plain,状态码保持200
常见错误排查点
- 令牌不匹配:检查配置页面填写的令牌和代码中校验的内容,避免拼写错误、大小写差异或多余空格。
- 响应格式错误:禁止将
hub.challenge包装为JSON或其他结构,必须返回纯文本(你在Postman中看到的纯文本格式是正确的,要确保服务返回的就是这种格式)。 - 请求拦截问题:确认你的服务能正常接收GET请求,没有被防火墙、反向代理(如Nginx)拦截或修改参数/响应内容。
- HTTPS要求:回调URL必须使用受信任CA颁发的HTTPS证书,自签名证书无法通过验证;本地测试可使用ngrok等工具暴露合法HTTPS地址。
- IP访问限制:确保服务器允许Meta的官方IP段访问,避免安全组或防火墙阻断请求。
示例验证代码(Node.js/Express)
app.get('/webhook', (req, res) => { const targetToken = '你设置的验证令牌'; const mode = req.query['hub.mode']; const token = req.query['hub.verify_token']; const challenge = req.query['hub.challenge']; if (mode && token) { if (mode === 'subscribe' && token === targetToken) { res.status(200).send(challenge); // 直接返回纯文本挑战值 } else { res.sendStatus(403); } } else { res.sendStatus(400); } });
内容的提问来源于stack exchange,提问作者Shailesh
相关产品推荐
相关产品推荐

