stripe-payments - 在 Stripe Checkout 中需要注意哪些 webhook?
问题描述
我正在使用Stripe Checkout实施订阅,但我有一些问题即使从他们的支持中也无法得到明确的答案。
我有以下情况:
- 用户点击
Subscribe
按钮 - 用户被重定向到 Stripe Checkout 页面(连同会话令牌)
- 用户成功支付(从现在开始是客户)
- 在这里我收到 14 个 webhook 调用(每个都是不同的事件类型):
checkout.session.completed
payment_method.attached
invoice.created
customer.updated
customer.subscription.created
customer.created
(即使我使用相同的电子邮件 - 测试模式,但仍然......)invoice.finalized
invoice.updated
invoice.payment_succeeded
customer.subscription.updated
charge.succeeded
payment_intent.succeeded
payment_intent.created
invoice.updated
- 编辑:我一次得到所有这些,因为我使用Stripe CLI的
listen
功能,它可能会显示所有通常不会发生的调用,因为它们必须在仪表板事件中逐个事件定义。例如,如果我在仪表板中创建发票并付款,那么如果没有明确定义 webhook,那么我的服务器将一无所知
- 在这里我收到 14 个 webhook 调用(每个都是不同的事件类型):
直到这里一切都很好。我担心的是:
- 如果下个月将向客户收费,我应该听哪个 webhook?我需要区分首次客户(因为我为该用户创建了新帐户)和现有客户,我只需要在数据库中注意该用户仍处于活动状态(或监听订阅取消事件?
subscription_schedule.canceled
也许?)。一个想法是只听成功的付款,然后检查客户是否存在于数据库中 - 如果他只是更新,如果没有,则创建帐户。 - 当我使用相同的电子邮件进行另一次订阅付款时,我得到完全相同的 webhook(包括
customer.created
我认为不应该存在的 webhook)或者我错过了什么? - 是否有可能像我在其他 Stripe 实现中所读到的那样意外地向客户收取双重费用(请参阅:幂等性)?
- 实施 Stripe Checkout 时还需要考虑哪些其他事项?我觉得他们的指示并不能让人放心,我已经做了所有被认为是好的做法。
我想要实现的流程:
- 用户成功支付(如上1-3点)。已经完成了!
- 在数据库中注册新客户(在本例中为 Firebase)并自动登录,以便在付款后立即访问。
- 只要向客户的卡收费,他就可以访问。当他取消或卡没有足够的资金时,我需要通知我的服务器以降级访问权限。
解决方案
推荐阅读
- java - IntelliJ“运行覆盖率测试”始终为 0% 并显示 AccessDeniedException
- javascript - 禁用 JavaScript SPA 的“输入”和返回链接
- hadoop - hdfs ls on directory 返回 No such file or directory 错误
- mysql - 我们如何在 Google Cloud SQL 中检索日志文件路径
- python - 为 Python 3 安装模式
- mysql - Mysql Query where max(time) 小于今天
- node.js - 在 MongoDb 连接失败的情况下如何向前端发送消息
- mysql - 如何在mysql中将列拆分为多行(以管道作为分隔符)?
- typo3 - 如何在 TYPO3 中禁用一页的扩展名
- java - 使用 google tink 流编码问题的字节数组