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

Laravel Cashier invoicePrice方法unit_amount金额过高问题求助

问题原因及修复方案

核心错误

你混淆了invoicePrice和invoiceFor的用法,并且错误传递了多余的金额参数:

  • invoicePrice仅需传入Stripe价格ID和选项数组,它会自动从Stripe价格对象中读取金额、货币等配置,不需要手动传金额。
  • 你传入的第二个参数intval($productPrice->unit_amount)是Stripe返回的最小单位数值(比如£4.99对应499便士),但Cashier会把这个值当成英镑单位的金额,再结合你的数量设置,直接导致扣费金额被放大100倍,最终出现异常高额扣费。

修复后的代码

$productPrice = Cashier::stripe()->prices->retrieve($productOption->stripe_id);
$user = Auth::user();

$user->createOrGetStripeCustomer();
$user->updateDefaultPaymentMethod($request->input('token'));

$user->invoicePrice(
    $productOption->stripe_id,
    [
        'metadata' => [
            'created_at' => Carbon::now(),
            'user_id' => $user->id,
            'api_key_uuid' => $apiKey->uuid,
            'quantity' => $productOption->quantity,
            'apply_credit_balance' => true
        ],
        // 若价格按数量计费,可直接在这里指定数量(可选,无需放在metadata中)
        'quantity' => $productOption->quantity
    ]
);

额外说明

如果确实需要使用invoiceFor方法(比如自定义计费描述),需先把最小单位金额转换为英镑单位,代码示例:

$user->invoiceFor(
    '自定义产品描述',
    $productPrice->unit_amount / 100, // 将便士转换为英镑
    [
        'currency' => 'gbp',
        'metadata' => [
            // 你的元数据配置
        ]
    ]
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:05:13