Laravel应用集成Lemon Squeezy时POST请求出现404错误,Webhook未同步本地数据库
我之前也碰到过类似的问题,咱们一步步来排查解决:
检查路由配置与前缀
首先确认你是在routes/api.php中注册的Webhook路由(Webhook请求通常走API路由),比如官方文档里的写法:Route::post('/webhooks/lemon-squeezy', [LemonSqueezyController::class, 'handleWebhook']);注意Laravel的API路由默认带
/api前缀,所以你在Lemon Squeezy后台配置的Webhook URL应该是https://你的域名/api/webhooks/lemon-squeezy,很多人会漏加这个前缀导致404。你可以执行php artisan route:list命令,查看路由列表里是否存在这个POST路由,路径是否完全匹配。排除CSRF令牌验证
Laravel的Web中间件默认会验证CSRF令牌,但Lemon Squeezy的Webhook请求不会携带你的应用CSRF令牌,所以必须把Webhook路由排除在外。打开app/Http/Middleware/VerifyCsrfToken.php,在$except数组中添加你的Webhook路径:protected $except = [ '/api/webhooks/lemon-squeezy', ];清除路由缓存
如果你之前运行过php artisan route:cache,修改路由后必须清除缓存才能让新路由生效。执行以下命令:php artisan route:clear本地环境的URL重写问题
如果你在本地测试(比如用Valet、XAMPP或WAMP),要确保服务器配置了正确的URL重写规则:- Apache需要开启
mod_rewrite模块,并且项目根目录的.htaccess文件配置正确(Laravel默认自带的就行); - Nginx需要配置对应的重写规则,把所有请求转发到
index.php;
嫌麻烦的话,可以直接用Laravel内置服务器php artisan serve,它默认支持正确的路由解析。
- Apache需要开启
查看日志定位问题
打开storage/logs/laravel.log文件,搜索404相关的日志条目,里面会记录请求的具体路径,你可以对比这个路径和你配置的路由是否一致,这通常能快速定位问题。
我当时就是因为漏加了API前缀,导致Lemon Squeezy的Webhook请求找不到对应的路由,调整URL后就正常同步数据库了。
备注:内容来源于stack exchange,提问作者mathews

