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

Laravel Cashier中使用invoiceFor添加发票元数据失败如何解决?

解决Laravel Cashier发票元数据添加失败的问题

我之前也碰到过一模一样的问题——用invoiceFor()直接传metadata参数完全没效果,后来才搞清楚原因:这个快捷方法的参数结构里并不直接支持元数据的传递,得换个方式来操作。

给你两种可行的解决方案,根据你的Cashier版本选就行:

方案一:使用createInvoice()方法(推荐,适用于较新的Cashier版本)

invoiceFor()其实是createInvoice()的简化封装,后者支持更完整的参数配置,包括元数据。直接用它来创建发票就能带上元数据了:

$invoice = Auth::user()->createInvoice([
    'amount' => 500,
    'description' => 'Stickers',
    'metadata' => [
        'VAT' => 'TEST'
    ]
]);

// 如果你需要发送发票给用户,调用send()方法即可
$invoice->send();

方案二:手动更新Stripe发票元数据(适用于旧版Cashier)

如果你的Cashier版本不支持createInvoice()的元参数,那就先创建发票,再通过Stripe的API手动更新元数据:

// 先创建基础发票
$invoice = Auth::user()->invoiceFor('Stickers', 500);

// 获取对应的Stripe发票实例并更新元数据
$stripeInvoice = $invoice->asStripeInvoice();
$stripeInvoice->metadata = ['VAT' => 'TEST'];
$stripeInvoice->save();

为什么原来的方法不行?简单说就是invoiceFor()的第三个参数是用来设置税率、货币这类特定选项的,框架并没有把metadata参数传递到Stripe的创建请求里,所以自然不会生效啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:14:55