处理成功的付款处理但数据库更新失败

Geo*_*dar 8 javascript payment node.js express stripe-payments

我正在尝试在我的一个express.js路由中实现条带检出过程.要做到这一点,我有:

  • 官方Node.js Stripe模块
  • 官方客户端Stripe模块
  • 我用json记录器来记录javascript错误,传入请求和来自外部服务(如stripe,mongodb等)的响应...
  • Order使用mongoose定义的模型 - MongoDB ODM

我的步骤如下:

客户:

  1. 提交包含条带支付令牌的订单详细信息

服务器:

  1. 创建未付订单并保存到数据库(order.statuscreated)
  2. 使用条带客户端向用户的信用卡/借记卡收费
  3. 更新订单并保存到数据库(order.statusacceptedfailed取决于Stripe的响应)

问题:如果在步骤2之后付款成功但是在步骤3中更新订单时发生错误(由于数据库服务器错误,中断或类似情况),有哪些适当的方法可以处理此故障情况并可能从中恢复?

Jer*_*NER 4

对于支付系统,您始终需要一个基于合理会计原则的整合流程(每小时、每天、每月),以检查每笔资金流是否匹配。

对于您的情况,我建议每个外部异步调用都记录发送的参数和收到的响应。如果您在一定时间内没有得到响应,您就知道外部系统(在您的情况下为 Stripe)或从外部系统返回时出现了问题(您提到了您这边的数据库故障)

基本上,对于您生成的每个异步“事务”,您知道何时开始它,并且必须在结束之前决定合理的时间量。因此,数据库中有一个预期的结束时间(expected_end_ts)。

如果您在expected_end_ts之后没有收到答复,您就知道出了问题。然后您可以向 Stripe 或其他 PSP 询问状态。希望 API 能够为您提供关于付款是否成功的明智答案。

另请注意,您应该在 1. 和 2 之间添加一个步骤:重新读取数据库。您需要确保您发出的每个付款请求确实都在数据库中,并且与您将要发送的请求完全一致地存储。