Stripe Subscription、Invoice、Invoice Item、Line Item、PaymentIntent和Credit Note有什么区别?
Subscription描述客户持续购买什么方案以及何时续费;Invoice是某个账期客户应付金额的账单;Invoice Item是可在账单形成前创建的收费或抵扣组成项;Invoice Line Item是Invoice中最终展示的行,可能来自订阅项目、Invoice Item或按比例调整;PaymentIntent跟踪一次实际收款与认证流程;Credit Note用于对已最终确定的Invoice做正式贷项调整。
本文目录(31 节)
直接答案
Subscription描述客户持续购买什么方案以及何时续费;Invoice是某个账期客户应付金额的账单;Invoice Item是可在账单形成前创建的收费或抵扣组成项;Invoice Line Item是Invoice中最终展示的行,可能来自订阅项目、Invoice Item或按比例调整;PaymentIntent跟踪一次实际收款与认证流程;Credit Note用于对已最终确定的Invoice做正式贷项调整。
修改Subscription不等于某次付款已成功,创建Invoice Item也不等于已经扣款,PaymentIntent succeeded也不应脱离Invoice与订阅状态单独解释。正确集成要按对象生命周期处理,并以Webhook确认最终状态。
一、六类对象快速对比
| 对象 | 代表什么 | 何时出现 | 是否直接收款 |
|---|---|---|---|
| Subscription | 持续服务关系与计费周期 | 客户订阅方案时 | 不直接 |
| Invoice | 某次应收账单 | 首次、续费或单次开票 | 触发或等待收款 |
| Invoice Item | 待计入账单的收费/抵扣 | 草稿或下一张账单前 | 不直接 |
| Line Item | Invoice中的显示与计算行 | 账单生成时 | 不直接 |
| PaymentIntent | 一次付款状态机 | 需要自动收款时 | 是 |
| Credit Note | 最终账单的贷项凭证 | 账单确定后调整 | 调整应收或退款关系 |
这些对象通过ID关联,但各自有独立状态和审计意义。
二、Subscription是什么
Subscription把Customer与一个或多个Price关联,保存账期、数量、试用、折扣、收款方式和取消策略。它描述未来重复计费安排。
它不是某张账单,也不是支付交易。一个Subscription在生命周期中会生成多张Invoice和多个PaymentIntent。
三、Subscription Item是什么
Subscription Item是Subscription中的具体Price与数量组合。一个订阅可包含基础套餐、附加席位或多个计价项。
不要把Subscription Item与Invoice Item混用。前者属于持续计划,后者是账单层面的临时收费或抵扣。
四、Invoice是什么
Invoice是客户在某次计费中应付金额的正式账单对象,可由Subscription周期性生成,也可单独创建。它包含行项目、税费、折扣、余额应用和付款状态。
Invoice拥有draft、open、paid、uncollectible和void等状态,不能用Subscription状态代替。
五、draft与open有什么区别
Draft Invoice仍可调整行项目和部分字段;finalize之后通常进入open,金额与正式账单身份确定并可等待付款。
自动扣款账单可能在创建后由Stripe延迟最终确定,为Webhook和集成留出处理窗口;首张自动扣款订阅账单又可能立即处理,流程需按官方行为验证。
六、Invoice Item是什么
Invoice Item表示一个可加入Invoice的收费或贷项。指定invoice时,它进入该草稿账单;未指定时,常会等待客户的下一张账单。
它适合补收一次性服务费、合并周期费用或给下一账期添加抵扣,但创建成功不表示客户已付款。
七、负数Invoice Item是什么
负数金额可降低账单应付额,适合在账单最终确定前添加抵扣。是否受折扣和税影响需依据字段配置。
账单已经finalized后,不应尝试通过修改原Invoice Item重写历史,应评估Credit Note。
八、Invoice Line Item是什么
Line Item是Invoice中实际呈现和计算的一行。它可能由Invoice Item支持,也可能来自Subscription Item、用量计费或proration。
因此,读取invoice.lines看到一行,并不保证存在可独立删除的同ID Invoice Item。
九、Invoice Item与Line Item为何有两个ID
它们是不同资源视图:Invoice Item描述可被附到账单的组成对象,Line Item描述该Invoice中的行。API版本还可能改变展开和关联字段表现。
系统应保存明确对象类型与ID,不能把ii_和il_字符串当成可互换主键。
十、PaymentIntent是什么
PaymentIntent管理一次支付从创建、需要支付方式、需要客户认证、处理中到成功或失败的状态。自动收款Invoice在需要支付时会关联PaymentIntent。
它解决“钱怎么收”,而Invoice解决“为什么应收这些钱”。
十一、一个Invoice是否总有PaymentIntent
不一定。金额为零、客户余额完全抵扣、低于最小可扣金额、手动标记支付或某些收款流程可能没有普通自动扣款PaymentIntent。
代码不能假设invoice.payment_intent永远存在,应该按Invoice收款方式和状态处理。
十二、Subscription怎样生成Invoice和PaymentIntent
创建或续费Subscription时,Stripe根据Price、数量、折扣、税与proration形成Invoice;需要自动收款时,Invoice再生成或关联PaymentIntent。
支付结果反过来影响Invoice与Subscription状态,但三者不会始终使用相同状态名称。
十三、首次订阅为何是incomplete
采用default_等支付行为时,首张Invoice需要付款而尚未成功,Subscription可处于incomplete。客户完成3DS或换卡后,PaymentIntent成功、Invoice paid,Subscription才进入active。
若超过规定窗口仍未成功,Subscription可能变为incomplete_且Invoice void。
十四、active是否代表所有账单已付
不一定。Stripe官方明确指出,Subscription active不表示所有历史Invoice都已付款。异步支付、重试和配置也会造成状态差异。
授予服务时应结合当前权益和业务政策;财务对账则逐张检查Invoice,不能只看Subscription。
十五、send_invoice与charge_automatically区别
charge_使用保存的支付方式自动尝试付款;send_invoice向客户发送账单并等待其在到期日前支付。
两种collection method影响finalize、发送、到期日和PaymentIntent流程,不能在同一个Webhook处理器里假设都立即扣款。
十六、Proration是什么
账期中途升级、降级或改变数量时,Stripe可计算旧方案未使用部分与新方案剩余部分,形成proration行。它们出现在Invoice Lines中。
Proration行为取决于更新参数和计费模式。正式修改前先用预览接口查看金额,避免直接更改后才发现意外账单。
十七、Invoice Preview有什么用
Preview根据拟议订阅变更计算即将产生的账单,但它不是正式Invoice,也不会收款。适合向用户展示升级差额并做测试断言。
预览与实际执行之间若时间、用量、税率或客户余额变化,最终金额仍可能不同。
十八、Credit Note是什么
Credit Note用于减少已finalized Invoice的应收或记录对已支付账单的贷项。它保留正式调整记录,而不是静默改写原账单。
具体结果可能作用于客户余额、账外金额或退款,取决于Invoice已支付金额和参数。
十九、Credit Note与Refund有什么区别
Refund把已支付资金退回原支付路径;Credit Note是账单层面的贷项凭证。对已支付Invoice调整时,两者可能关联,但概念和对象不同。
只做Refund可能没有完整解释Invoice为什么减少;只做Credit Note也不一定自动把钱退回银行卡。
二十、Void与Credit Note怎样选
Void让未支付的最终账单失效,通常表示不再向客户追收;Credit Note用于保留原Invoice并记录部分或全部贷项。已支付账单不能靠void当作退款。
选择取决于账单状态、会计要求和是否已有实际付款。
二十一、Uncollectible是什么
Mark uncollectible表示账单仍是有效应收,但企业判断无法收回,常用于坏账处理。它与void“账单不再有效”的语义不同。
不要为了关闭失败告警把Invoice随意标为uncollectible,这会影响财务报表。
二十二、客户余额何时参与
Stripe在确定Invoice实际应付金额时可应用Customer Credit Balance。金额被完全覆盖时,Invoice可能不需要新的外部扣款。
账单显示金额、amount_due、amount_paid和amount_
二十三、应该监听哪些Webhook
至少根据业务监听Invoice创建、finalized、paid、payment_failed、payment_
Webhook可能重复或乱序,处理器必须幂等,并主动获取最新对象确认状态。
二十四、何时授予或暂停服务
首次订阅通常在可靠确认Invoice已付或权益激活后授权。续费失败是否立即暂停,应依据宽限期与重试策略,而不是看到一次PaymentIntent失败就删除账户。
异步支付可能先active后失败,因此高风险服务需设计暂时访问和后续撤销策略。
二十五、对账应该以哪个对象为主
产品套餐和周期以Subscription为主,客户应收与税费以Invoice为主,实际支付状态以PaymentIntent及其支付记录为主,正式贷项以Credit Note为主。
建立内部订单与这些外部ID的一对多映射,避免只保存一个“stripe_id”。
二十六、常见实现错误
常见错误包括创建Invoice Item后宣称付款成功、用active判断所有历史账单、修改已finalized Invoice、把Line Item ID当Invoice Item删除、退款后不处理账单贷项、漏掉3DS状态、根据Webhook到达顺序覆盖新状态,以及未绑定Customer归属造成越权查询。
这些错误都源于把多个状态机压成一个布尔字段。
二十七、上线测试清单
测试免费试用、首付成功、3DS、拒付、异步处理中、续费、升级降级proration、下一账期Invoice Item、零金额账单、部分Credit Note、全额Credit Note、Refund、Void和Uncollectible。
每个场景核对Subscription、Invoice、Line、PaymentIntent和内部权限状态,并重放Webhook验证幂等。
常见问题
1. 创建Invoice Item会立即扣款吗?
不会。它只是账单组成项,需被Invoice包含并按收款流程付款。
2. Subscription active就能确认本月已收款吗?
不能一概而论。应检查对应Invoice和支付状态,特别是异步付款与历史欠款。
3. Invoice Line可以直接删除吗?
要看其来源和Invoice状态。草稿期可能修改支持它的Invoice Item;订阅或proration行需从对应来源处理。
4. 已支付账单金额写错应只做Refund吗?
退款处理资金,Credit Note处理正式账单调整。通常要按财务要求协调两类记录。
5. PaymentIntent succeeded后为何Invoice还没更新?
可能存在事件传播或异步处理。不要本地强改,应获取最新对象并以Webhook幂等更新。
结论
Subscription定义持续关系,Invoice形成具体应收,Invoice Item准备收费或抵扣,Line Item呈现账单明细,PaymentIntent执行收款,Credit Note记录最终账单调整。把这些对象按各自状态机建模,才能正确处理订阅、认证、续费、退款与财务对账。
参考来源
- Stripe:How subscriptions work,https:
/ / docs. stripe. com/ billing/ subscriptions/ overview - Stripe API Reference:Invoices,https:
/ / docs. stripe. com/ api/ invoices - Stripe API Reference:Invoice Items,https:
/ / docs. stripe. com/ api/ invoiceitems - Stripe:Build a subscriptions integration,https:
/ / docs. stripe. com/ billing/ subscriptions/ build- subscriptions - Stripe API Reference:Credit Notes,https:
/ / docs. stripe. com/ api/ credit_ notes