使用Stripe一次性支付时,如何为已创建的Charge生成Invoice?
解决Stripe一次性支付下生成对应Invoice的问题
你现在的操作只停留在创建和获取InvoiceItem的阶段,但要生成关联Charge的Invoice,得走完整的Stripe Invoice流程才行。我给你理清楚步骤并调整代码:
首先,你创建InvoiceItem的步骤是对的,这是把收费项挂到客户名下的前置操作。接下来需要创建Invoice对象,Stripe会自动把该客户名下未结算的InvoiceItem归集到这个Invoice里,最后完成支付就能得到关联的Charge了。
给你完整的代码示例:
// 1. 先创建InvoiceItem(你原有的这部分代码没问题) \Stripe\InvoiceItem::create([ "customer" => $customer_id, "amount" => $price, "currency" => "aud", "description" => $courseTitle ]); // 2. 创建Invoice,关联目标客户,自动包含未结算的InvoiceItem $invoice = \Stripe\Invoice::create([ "customer" => $customer_id, "collection_method" => "charge_automatically", // 设置自动收费 "days_until_due" => 0 // 立即到期,适配一次性支付场景 ]); // 3. 定稿Invoice并触发支付 $invoice->finalizeInvoice(); // 先完成Invoice定稿,生成待支付金额 $paidInvoice = $invoice->pay(); // 执行支付,返回已支付的Invoice对象 // 如果你需要获取这个Invoice对应的Charge,直接从Invoice对象中提取 $chargeId = $paidInvoice->charge; $relatedCharge = \Stripe\Charge::retrieve($chargeId);
额外提醒几个关键点:
- 如果你只是单纯想完成一次性收费,其实可以直接创建Charge对象,但如果需要生成正规Invoice(用于给用户开具账单),走上述Invoice流程是标准做法
- 确保你的客户账号已经关联了有效支付方式(比如信用卡),否则
pay()方法会触发支付失败 - 你之前用
\Stripe\InvoiceItem::all()获取的是InvoiceItem列表,不是Charge;要找Invoice对应的Charge,直接从支付后的Invoice对象的charge字段取值即可
按照这个流程操作,就能得到和Charge关联的Invoice了!
内容的提问来源于stack exchange,提问作者noobie-php
相关产品推荐
相关产品推荐

