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

如何在Laravel或Stripe API中阻止订阅创建/更新时使用客户余额(信用额)

问题

使用Stripe订阅服务与客户余额(信用额)功能时,默认会自动用客户的信用额抵扣下一张发票或订阅付款。但业务场景需要针对特定订阅创建/更新操作,完全跳过信用额,直接从客户默认支付方式(如银行卡)收取全额费用。例如客户有50美元信用额,创建100美元订阅时,需向银行卡收取全额100美元,而非扣除信用额后收50美元。

当前使用Laravel Cashier + Stripe PHP SDK的简化代码:

$subscription = $client->newSubscription('default', $planId)
->skipTrial()
->noProrate()
->create(
    $client->defaultPaymentMethod()->id,
    [],
    [
        'payment_behavior' => 'error_if_incomplete',
        'metadata' => $metadata,
    ]
);

查阅Stripe文档后未找到直接跳过信用额的参数。

解决方案

Stripe本身没有直接在订阅创建时跳过客户余额的顶层参数,但可以通过控制订阅生成的发票行为来实现需求:

  • 在订阅创建的Stripe API参数中,通过invoice_creation.invoice_data传递apply_customer_balance参数并设为false,这样生成的发票不会自动应用客户余额,付款时就只会从指定的支付方式全额扣款。

修改后的代码示例:

$subscription = $client->newSubscription('default', $planId)
->skipTrial()
->noProrate()
->create(
    $client->defaultPaymentMethod()->id,
    [],
    [
        'payment_behavior' => 'error_if_incomplete',
        'metadata' => $metadata,
        'invoice_creation' => [
            'enabled' => true,
            'invoice_data' => [
                'apply_customer_balance' => false,
            ],
        ],
    ]
);
  • 原理说明:当创建订阅时,Stripe会自动生成对应的发票,apply_customer_balance设为false会强制该发票忽略客户的可用信用额,完全依赖指定的支付方式完成付款。

如果是更新现有订阅,同样可以在update方法的参数中加入上述invoice_creation配置,确保后续生成的发票不应用客户余额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 03:07:22