Stripe技术咨询:何时使用\Stripe\InvoiceItem::create与Charge::create?
什么时候用
Charge::create vs \Stripe\InvoiceItem::create? 嘿,刚接触Stripe的话搞不清这俩方法真的太正常了!我来给你拆解清楚它们的适用场景和核心区别:
用 Charge::create 的场景
这是用来发起即时收款的工具——你想立刻从客户的支付方式里扣钱时就用它,属于“一手交钱一手交货”的即时交易模式。
典型场景:
- 电商网站的单次商品购买:客户结账时直接付款,你需要马上完成交易
- 一次性服务收费:比如单次咨询、单次课程、线下服务的当场付款
- 不需要累计费用的单笔收款:只要是付完钱就完事的交易,都适合用这个
举个简单的代码例子:
\Stripe\Charge::create([ 'amount' => 1000, // 注意单位是分,这里对应10美元 'currency' => 'usd', 'source' => 'tok_visa', // 客户的支付令牌(从前端获取) 'description' => '2024年Q1技术咨询服务费', ]);
用 \Stripe\InvoiceItem::create 的场景
这个是用来先记账、后收款的工具——你先把一笔费用添加到客户的待付账单里,之后再统一生成发票完成扣款,适合需要累计费用或者和订阅绑定的场景。
典型场景:
- 订阅服务的额外收费:比如客户用了超出套餐的流量、额外功能,你把这笔费用加到他们的订阅账单里,跟着下次订阅周期自动开票扣款
- 按月/按周期结算的累计费用:比如SaaS工具的每日小额使用费、托管服务的月度附加费,先攒成发票项,月底统一生成发票收款
- 需要和客户账户绑定的待收费用:不管有没有订阅,只要你想把费用挂在客户名下,之后统一收钱,都可以用这个
代码示例:
\Stripe\InvoiceItem::create([ 'customer' => 'cus_123456', // 目标客户的Stripe ID 'amount' => 500, // 对应5美元 'currency' => 'usd', 'description' => '超出基础套餐的10GB流量费用', 'subscription' => 'sub_789012', // 可选,关联到特定订阅,会自动加入下一期订阅发票 ]);
核心区别总结
Charge::create:即时生效,调用后立刻尝试扣款,成功后资金就会进入你的Stripe账户(除了需要3D验证等特殊情况)\Stripe\InvoiceItem::create:仅记账,只是把费用记在客户名下,必须后续手动生成发票,或者通过订阅自动触发发票生成,才会实际扣款
简单来说:要立刻收钱用Charge,要攒着一起收钱用InvoiceItem~
内容的提问来源于stack exchange,提问作者Novice
相关产品推荐
相关产品推荐

