Cashier问题:Stripe Checkout成功后订阅表未填充数据
问题排查方向
1. Webhook事件处理异常
虽然Stripe CLI显示接收事件,但需确认checkout.session.completed事件是否被正确处理:
- 检查
routes/web.php中是否存在Cashier的Webhook路由:Route::stripeWebhooks('/stripe/webhook');,且该路由未被CSRF、Auth等中间件拦截 - 查看Laravel日志文件
storage/logs/laravel.log,搜索stripe或webhook关键词,排查是否存在模型查找失败、权限错误等处理异常 - 确认Stripe CLI转发的URL是否正确,比如本地环境需确保是
http://localhost/stripe/webhook(注意协议、端口是否匹配)
2. Cashier与Stripe对象关联问题
- 验证用户模型是否正确引入
Billabletrait,且用户表的stripe_id字段已同步对应Stripe客户ID - 检查Stripe Checkout会话创建时,是否正确传递
customer参数:若为新用户,Cashier会自动创建客户;若手动指定客户ID,需确保该ID与Laravel用户的stripe_id一致 - 确认
config/cashier.php中的model配置指向正确的用户模型类
3. 订阅状态与事件触发逻辑
- 检查Stripe控制台中订阅的
status字段是否为active,若处于incomplete状态(如需额外确认的自动税配置),Cashier不会写入subscriptions表 - 确认创建Checkout会话时,是否设置
mode: 'subscription',若为payment(一次性支付模式)不会生成订阅记录
4. 缓存与配置问题
- 执行
php artisan config:clear和php artisan cache:clear,排除配置缓存导致的Webhook路由或逻辑未更新问题 - 验证
.env文件中的STRIPE_KEY和STRIPE_SECRET是否与Stripe控制台的测试密钥一致
5. 版本兼容性细节
- 查看Cashier GitHub Issues,确认是否存在其他用户遇到的
checkout.session.completed事件未触发订阅创建的同类问题 - 确认Checkout会话创建时是否配置了有效的
success_url和cancel_url,Cashier依赖完整的会话参数完成后续逻辑
内容的提问来源于stack exchange,提问作者gs-rp
相关产品推荐
相关产品推荐

