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

Handling successful payment processing but database update failure

本文关键字:数据库 更新 失败 处理 成功 付款      更新时间:2023-09-26

我正试图在我的express.js路由之一中实现条带结账过程。为此,我输入:

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

步骤如下:

客户:

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

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

问题:如果在步骤2之后付款成功,但在步骤3中更新订单时出现错误(由于数据库服务器错误、中断或类似),处理这种失败场景并可能从它恢复的一些适当方法是什么?

对于支付系统,您总是需要一个基于相同会计原则的合并过程(每小时,每天,每月),以检查每笔资金流动是否匹配。

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

基本上,对于你生成的每个异步"事务",你知道什么时候开始它,并且必须在它结束之前决定一个合理的时间。因此,在数据库中有一个expected_end_ts。

如果在expected_end_ts之后没有收到答案,您就知道出了问题。然后你可以向Stripe或其他PSP询问状态。希望API能给你一个合理的答案,关于支付是否通过。

还要注意,您应该在1和1之间添加一个步骤。2:重新读取数据库。你要确保你所做的每一个支付请求都在数据库中,和你要发送的完全一样。