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

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

>官方Node.js Stripe模块
>官方客户端Stripe模块
>一个json logger我用来记录javascript错误,传入请求和来自外部服务(如stripe,mongodb等)的响应…
>使用mongoose定义的订单模型 – MongoDB ODM

我的步骤如下:

客户:

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

服务器:

>创建未付款的订单并保存到数据库(创建order.status)
>使用条带客户端向用户的信用卡/借记卡收费
>更新订单并保存到数据库(order.status被接受或失败,具体取决于Stripe的响应)

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

解决方法

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

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

基本上,对于您生成的每个异步“事务”,您知道何时启动它并且必须在它结束之前确定合理的时间量.因此,您在数据库中有expected_end_ts.

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

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...