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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:45