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

使用Stripe API创建发票遇问题:金额为零且无法添加订单项

解决Stripe发票amount_due为0及添加订单项的问题

问题原因

Stripe发票的金额不是通过创建发票时的直接金额参数设置的,它的金额由关联的订单项(Invoice Item)或订阅自动计算生成。你现在创建的发票没有任何订单项,所以amount_due自然为0。

添加订单项的两种方法

方法1:创建发票时直接嵌入订单项

在创建发票的参数中加入lines数组,直接定义订单项的价格、数量等信息。如果没有预先创建Stripe Price对象,可以用price_data动态生成价格;如果已有Price ID,直接指定price即可。

修改后的代码示例:

$params = [
    'customer' => $stripeCustomer['stripeCustomerId'],
    'auto_advance' => true,
    'collection_method' => 'charge_automatically',
    'currency' => Str::lower($record['CurrencyCode']),
    'metadata' => $metaData,
    'lines' => [
        [
            'price_data' => [
                'currency' => Str::lower($record['CurrencyCode']),
                'product_data' => [
                    'name' => '产品名称', // 替换为你的产品名
                ],
                'unit_amount' => 1000, // 单位:分,这里代表10.00 SGD
            ],
            'quantity' => 2, // 购买数量
        ],
        // 可按需添加更多订单项
    ],
];

$stripeInvoice = \Stripe\Invoice::create($params);

方法2:先创建独立的InvoiceItem,再生成发票

先为目标客户创建InvoiceItem,之后创建发票时,Stripe会自动将该客户的未结算InvoiceItem加入到发票中:

// 先创建订单项
\Stripe\InvoiceItem::create([
    'customer' => $stripeCustomer['stripeCustomerId'],
    'price_data' => [
        'currency' => Str::lower($record['CurrencyCode']),
        'product_data' => ['name' => '产品名称'],
        'unit_amount' => 1000,
    ],
    'quantity' => 2,
]);

// 再创建发票
$params = [
    'customer' => $stripeCustomer['stripeCustomerId'],
    'auto_advance' => true,
    'collection_method' => 'charge_automatically',
    'currency' => Str::lower($record['CurrencyCode']),
    'metadata' => $metaData,
];

$stripeInvoice = \Stripe\Invoice::create($params);

效果验证

修改后生成的发票对象中,lines.data会包含你添加的订单项,amount_due、subtotal、total等字段也会自动计算出正确的金额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:10:31