使用Firestore Stripe Payments扩展如何正确测试订阅支付?
正确测试Firestore Stripe Payments扩展的订阅支付集成
问题根源
你遇到的异常是因为测试时用了Stripe自动支付成功的测试卡号,这类卡号会默认完成所有测试发票的支付,所以哪怕推进测试时钟,订阅状态仍会保持active,发票也会被标记为paid。
正确测试步骤
1. 用指定测试卡号模拟支付失败
创建订阅时,必须使用Stripe官方提供的支付失败测试卡号,才能触发逾期流程:
4000 0000 0000 0341:首次支付即失败,后续计费周期也会持续失败4000 0000 0000 0069:首次支付成功,但后续周期支付失败
用这类卡号创建订阅后,下一个计费周期生成的发票会处于未支付状态,订阅状态才会按预期变更。
2. 正确关联测试时钟
- 必须在创建订阅时就关联测试时钟,事后添加的测试时钟不会影响已存在的订阅周期
- 推进测试时钟时,要超过订阅的完整计费周期(比如月度订阅至少推进31天),确保触发下一次计费逻辑
3. 验证Firestore状态
推进时间后,检查以下节点的状态:
customers/{customerId}/subscriptions/{subscriptionId}:状态会变为past_due(逾期未付),超过宽限期后会变为canceled或unpaidcustomers/{customerId}/subscriptions/{subscriptionId}/invoices/{invoiceId}:发票状态会变为open(未支付),而非paid
4. 可选:测试逾期恢复流程
如果要验证用户补缴后的状态恢复:
- 在Stripe后台找到对应未支付的发票,手动标记为支付成功(或用有效测试卡号完成支付)
- 检查Firestore中订阅状态是否变回
active,发票状态同步更新为paid
额外检查项
- 确认Firestore Stripe Payments扩展的Webhook配置正常,Stripe的
invoice.payment_failed、customer.subscription.updated等事件能正确同步到Firestore - 确保订阅关联的产品配置了正确的计费周期和逾期规则(比如宽限期设置)
内容的提问来源于stack exchange,提问作者GameFromScratch
相关产品推荐
相关产品推荐

