Stripe强制触发invoice.payment_failed事件失败,却生成invoice.paid事件
强制触发Stripe invoice.payment_failed事件(按使用量计费场景)
针对你遇到的问题——用测试卡号4000000000000341却触发了invoice.paid而非支付失败,大概率和按使用量计费的特性有关,下面是具体原因和解决方法:
核心原因:0金额发票直接标记为已支付
按使用量计费的模式下,如果试用期内用户没有产生任何用量,生成的发票金额为0。Stripe对0金额发票会直接跳过支付流程,自动标记为invoice.paid,根本不会触发支付尝试,自然不会出现失败事件。
解决步骤(确保触发支付失败)
- 先给用户添加非0用量:在试用期结束前,通过Stripe API调用
UsageRecord.create(),给订阅关联的计量项添加一笔非0的用量记录。这样生成的发票会有实际金额,才会进入支付流程。 - 确认测试卡号是默认支付方式:检查客户的支付方式列表,确保
4000000000000341是当前默认支付方式,且没有其他有效的支付方式被系统优先选用。 - 手动触发支付(可选):如果不想等待Stripe的自动调度,可以在发票生成后,调用
Invoice.pay()API手动触发支付尝试,立刻就能看到支付结果,不用等1小时。
额外注意点
测试卡号4000000000000341的特性是首次支付失败,如果客户之前有过成功支付记录,可能需要先重置客户的支付状态,或者换用其他测试卡号(比如4000000000000002会触发永久失败)。
内容的提问来源于stack exchange,提问作者Rodrigo Carvalho
相关产品推荐
相关产品推荐

