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

使用Laravel Cashier与Stripe订阅:数据未写入数据库问题咨询

问题解答

核心原因

redirectToBillingPortal() 是Stripe提供的订阅管理工具,原本定位是给已有订阅的用户做后续管理——比如修改支付方式、切换订阅计划、取消订阅,默认不支持创建新订阅。

如果你确实在账单门户中完成了订阅创建操作,那大概率是你在Stripe后台开启了「允许客户创建新订阅」的功能,但这种绕过Laravel Cashier的操作,Cashier不会自动将Stripe端的订阅数据同步到本地的subscriptions和subscription_items表,这属于正常表现。Cashier本地数据的写入,要么是通过自身的订阅创建方法触发,要么依赖Stripe Webhook事件的推送同步。

解决办法分两种场景:

1. 常规创建订阅(推荐方案)

不要通过账单门户处理新订阅,改用Laravel Cashier自带的订阅流程:

  • 使用 $user->newSubscription('default', 'price_xxx')->create($paymentMethodId) 这类方法,直接在应用内完成订阅创建,Cashier会自动将数据写入本地数据表,同时同步到Stripe平台。
  • 也可以用Cashier的checkout()方法生成Stripe Checkout链接,引导用户完成订阅支付,这种方式同样会自动同步本地数据。

2. 必须通过账单门户创建订阅

如果业务场景确实需要走账单门户创建订阅,那就必须配置Stripe Webhooks来同步数据到本地:

  • 登录Stripe后台,在「Webhooks」模块启用customer.subscription.created和customer.subscription.updated两个事件。
  • 在Laravel应用中配置Webhook路由,复用Cashier自带的Webhook处理逻辑:
    Route::post('/stripe/webhook', [App\Http\Controllers\StripeWebhookController::class, 'handleWebhook']);
    
    你的控制器可以直接继承Cashier的WebhookController,或者调用其内置的处理方法。当Stripe触发订阅创建事件时,Cashier会自动将数据写入本地的订阅相关数据表。

补充:Stripe账单门户的配置说明

若要让账单门户支持创建新订阅,需要在Stripe Dashboard的「设置」→「账单门户」→「功能」中,开启「允许客户创建新订阅」的选项,但即便开启该功能,仍需依赖Webhooks完成本地数据同步,Cashier不会主动拉取Stripe端的订阅信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:02:39