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

时间:2014-08-20 14:24:59

标签: javascript node.js express payment stripe-payments

我正在尝试在其中一条express.js路线中实施条带结帐流程。要做到这一点,我有:

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

我的步骤如下:

客户端:

  1. 提交包含条纹支付令牌的订单详情
  2. 服务器:

    1. 创建未付款的订单并保存到数据库(order.statuscreated
    2. 使用条带客户端向用户的信用卡/借记卡收费
    3. 更新订单并保存到数据库(order.statusacceptedfailed,具体取决于Stripe的响应)
    4. 问题:如果在步骤2之后付款成功但是在步骤3中更新订单时发生错误(由于数据库服务器错误,中断或类似情况),有哪些适当的方法可以处理此故障情景并可能从中恢复?

1 个答案:

答案 0 :(得分:4)

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

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

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

如果你在expected_end_ts之后没有收到答案,你知道出了什么问题。然后你可以向Stripe或另一个PSP询问状态。希望API能为您提供合理的答案,说明付款是否结束。

另请注意,您应在1.和2之间添加一个步骤:重新读取数据库。您希望确保您所做的每个付款请求都在数据库中,并完全按照您要发送的方式存储。