Laravel Cashier Stripe支付成功后未自动生成本地订阅记录
Laravel Cashier 订阅不同步问题解决方案
你遇到的问题核心是Stripe事件未被Cashier正常接收处理,无需手动实现订阅同步逻辑,Cashier已内置相关处理能力,按以下步骤排查配置即可:
必查配置项
确认Webhook路由未被CSRF拦截
将/stripe/webhook路径添加到app/Http/Middleware/VerifyCsrfToken.php的$except数组中:protected $except = [ '/stripe/webhook', ];Stripe的Webhook请求不会携带Laravel要求的CSRF令牌,不排除的话会直接返回419错误,事件处理中断。
确认Webhook端点配置正确
- 公网环境需在Stripe后台添加Webhook端点,地址为
https://你的站点域名/stripe/webhook,同时勾选以下必须监听的事件:checkout.session.completedcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.paidinvoice.payment_failed
- 复制Stripe后台生成的Webhook签名密钥,填写到项目
.env文件的STRIPE_WEBHOOK_SECRET字段,密钥不匹配时Cashier会直接丢弃所有事件。 - 本地开发环境需使用Stripe CLI转发事件到本地服务,执行命令:
stripe listen --forward-to localhost:8000/stripe/webhook
- 公网环境需在Stripe后台添加Webhook端点,地址为
确认Cashier依赖的数据库表已生成
执行Cashier自带的迁移命令生成订阅相关表:php artisan migrate确保数据库中存在
subscriptions、subscription_items等Cashier专用表。确认User模型已引入Billable Trait
检查app/Models/User.php中是否已引入Laravel\Cashier\Billable:use Laravel\Cashier\Billable; class User extends Authenticatable { use Billable; }
验证方法
配置完成后发起一笔测试支付,查看Stripe后台对应Webhook的事件日志,若状态为200则说明事件已被正常处理,此时本地数据库会自动生成订阅记录。
内容的提问来源于stack exchange,提问作者zangarmarsh
相关产品推荐
相关产品推荐

