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

Laravel Cashier invoicePrice()无效,无法生成Stripe发票并扣费

解决Laravel Cashier + Stripe 扣费并生成可管理发票的问题

问题根源

你使用的invoicePrice()方法是针对订阅场景的(比如生成订阅周期的发票),并非用于单次即时扣费+发票生成的场景,所以单独调用不会触发扣费,也不会生成有效记录。

另外:

  • charge()是直接发起单次扣费,不会生成Cashier可通过$user->invoices()管理的发票记录;
  • invoiceFor()仅创建发票(添加自定义金额项),不会自动执行扣费,需手动触发支付。

正确实现步骤

要实现「即时扣费+生成可管理发票」,需要创建发票并立即支付,具体代码如下:

1. 确保用户有默认支付方式

扣费需要使用用户的默认支付方式,所以先检查并设置:

if (!$user->hasDefaultPaymentMethod()) {
    // 先添加支付方式,再设为默认
    $user->addPaymentMethod($paymentMethod);
    $user->updateDefaultPaymentMethod($paymentMethod);
}

2. 创建发票并立即支付

使用invoice()方法添加Stripe价格项目,然后调用pay()触发扣费:

try {
    // 创建包含指定价格的发票
    $invoice = $user->invoice(
        [
            'price_xxxxxxx' => 1, // 你的Stripe价格ID + 购买数量
        ],
        [
            'description' => 'this is a dummy description',
            'receipt_email' => 'john@doe.com',
            'currency' => 'usd',
        ]
    );

    // 立即支付该发票
    $invoice->pay();

    // 此时可通过$user->invoices()获取到该发票记录
} catch (\Exception $e) {
    // 捕获并输出错误信息,排查问题
    dd($e->getMessage());
}

额外排查点

  • 确认.env文件中STRIPE_KEY、STRIPE_SECRET配置正确;
  • 确认用户表已添加Cashier所需字段(运行过php artisan cashier:install迁移);
  • 检查Stripe后台的产品/价格是否处于激活状态;
  • 确保$paymentMethod是有效的Stripe支付方式ID(如pm_xxxxxxx)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:18:17