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

Laravel Cashier SCA订阅创建后stripe_status为incomplete问题咨询

原因说明

  • 核心是本地订阅状态没有和Stripe服务端同步:Laravel Cashier不会在用户前端完成SCA认证后立刻主动拉取最新状态,默认依赖Stripe异步推送的Webhook事件更新本地数据。用户完成认证后,Stripe会发送customer.subscription.updated、payment_intent.succeeded事件到你的服务端,只有正确处理这些事件,subscriptions表的stripe_status才会从incomplete更新为active。
  • 本地开发场景下如果你的服务没有公网可访问的地址,Stripe无法推送Webhook事件到本地,也会导致状态一直停留在incomplete。
  • 部分场景下Webhook推送存在延迟,用户跳转回你的站点时事件还没到,也会暂时显示incomplete状态。

解决方法

  1. 配置Stripe Webhook
    在Stripe后台配置Webhook端点,指向Cashier默认自带的/stripe/webhook路由,勾选所有订阅、支付意图相关的事件,再把Stripe生成的Webhook密钥配置到项目.env文件的STRIPE_WEBHOOK_SECRET字段即可。本地开发可以用Stripe CLI转发事件到本地服务,不需要配置公网地址。
  2. 跳转后主动同步状态
    在你设置的回调路由get.premium.settings对应的处理逻辑中,增加主动同步订阅状态的代码,示例如下:
$user = Auth::user();
$subscription = $user->subscription('default');
if ($subscription && $subscription->stripe_status === 'incomplete') {
    // 主动从Stripe拉取最新状态更新本地
    $subscription->syncStripeStatus();
}
  1. 检查Webhook签名校验是否正常,如果签名校验失败,Cashier会直接丢弃收到的Webhook事件,也不会更新本地状态,确认.env里的STRIPE_WEBHOOK_SECRET和Stripe后台给出的完全一致即可。

内容的提问来源于stack exchange,提问作者Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:04