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
相关产品推荐
相关产品推荐

