我第一次制作一个使用 Stripe 付款的应用程序。经过研究,我将使用 Stripe Checkout 进行一次性付款(无订阅)、Firebase Cloud Functions 和 Firebase Realtime Database。希望将成本降至 0 或最低。这些 Stripe 付款用于充值用户在应用程序上的钱包余额。
由于我最初是一名前端开发人员,我担心会遗漏某些内容或产生误解,所以我想知道是否有人可以让我知道我是否走在正确的轨道上。
在我的应用程序上,我将有一个付款历史记录页面,用于记录每笔交易的任何状态。根据我的研究:
在 Firebase Cloud 上实施的 Webhooks:
checkout.sessions.completed - 这是用户完成提交付款详细信息的时间。当 webhook 被触发时,创建 实时数据库中状态为“待处理”的事务。
payment_intent.succeeded - 数据库中的交易状态将更改为“成功”。调整钱包余额。
payment_intent. payment_failed - 数据库中的交易状态将更改为“失败”
payment_intent.canceled - 数据库中的交易状态将更改为“已取消”
checkout.session.expired - 数据库中的事务状态将更改为“已过期”
已退款 webhook - 数据库中的交易状态将更改为“已退款”。调整钱包余额。
我的问题是:
非常感谢!
我建议查看本指南,了解如何在结账会话中履行订单:https://docs.stripe.com/checkout/fulfillment
您的系统应监听
checkout.session.*
事件以了解 payment_status
属性下的付款结果。
结帐会话允许多次付款尝试,直到付款成功。每次失败的付款尝试都会触发
payment_intent.payment_failed
事件。监听 checkout.session.*
事件应该足以确定结帐会话是否已成功或已过期(无法再进行付款)。听payment_intent.*
应该没有必要。
有关退款的相关信息,可以收听此处列出的退款事件:https://docs.stripe.com/refunds#refund-events