You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中WhatsApp Business WebHook无法接收测试消息求助

Laravel项目中WhatsApp Business WebHook无法接收测试消息求助

Hey,我看你已经成功搞定了WebHook的验证流程,但测试消息接收不到,咱们一步步来排查可能的问题哈~

首先先确认Meta官方的规则,你提到的这段说明很关键:

Applications will only be able to receive test webhooks sent from the app dashboard while they are in development. No production data, including that of app admins, developers, and testers, will be delivered unless the app is live.

结合你的代码和场景,我整理了几个重点排查方向:


1. 内网穿透工具是否正常(本地开发场景)

如果是本地开发环境,Meta的WebHook无法直接访问你的localhost,必须用Ngrok这类内网穿透工具把本地端口暴露到公网。请确认:

  • 穿透工具是否处于运行状态,公网URL有没有变化
  • Meta Dashboard里配置的WebHook URL,和你当前穿透工具提供的公网URL完全一致(包括路径/webhook-receiving-url)

2. Laravel CSRF保护是否拦截了请求

WebHook的POST请求来自Meta,不会携带Laravel的CSRF Token,这会被默认的CSRF中间件拦截。你需要把WebHook路径加入CSRF白名单:
打开app/Http/Middleware/VerifyCsrfToken.php,修改$except数组:

protected $except = [
    '/webhook-receiving-url',
];

这是很多开发者容易忽略的点,大概率是这个原因导致POST请求被拦截!

3. 检查Laravel日志和请求到达情况

先去storage/logs/laravel.log里查看:

  • 有没有POST请求的日志记录?如果完全没有,说明请求根本没到达你的服务器
  • 如果有日志但内容异常,再进一步分析请求体格式

另外,你可以用curl模拟一个POST请求测试:

curl -X POST https://你的公网URL/webhook-receiving-url -d '{"object":"whatsapp_business_account","entry":[{"id":"123456789","changes":[{"value":{"messages":[{"from":"1234567890","id":"ABGGHS...","timestamp":"1620000000","text":{"body":"Test message"}}]},"field":"messages"}]}]}'

如果模拟请求能触发日志,说明代码逻辑没问题,问题出在Meta的配置;如果模拟请求也没日志,那就是本地环境或路由的问题。

4. Meta Dashboard的WebHook配置细节检查

  • 确认你已经订阅了messages事件(或者你测试的对应事件),没订阅的话测试消息不会发送
  • 再次核对Verify Token是否和代码里的xxxxxxxx完全一致(大小写、特殊字符都不能错)
  • 测试时是否选择了正确的测试号码,确保号码已添加到测试账号列表中

5. 请求响应超时问题

Meta要求WebHook必须在10秒内返回响应,否则会判定请求失败。你的代码逻辑很简单,但如果本地环境卡顿、日志写入耗时过长,可能会触发超时。可以先注释掉日志代码,只返回response('Event received', 200),测试是否能收到请求。


备注:内容来源于stack exchange,提问作者Austin Sanga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:28:09