付款处理成功,但数据库更新失败
Handling successful payment processing but database update failure
我正试图在我的express.js路由之一中实现条带结账过程。为此,我输入:
- 官方Node.js分条模块
- 官方客户端Stripe模块
- 一个json记录器,我用来记录javascript错误,来自外部服务的传入请求和响应,如stripe, mongodb等…
- 使用mongoose定义的
Order
模型- MongoDB ODM
步骤如下:
客户:- 提交包含条带支付令牌的订单详细信息
- 创建未付订单并保存到数据库(
order.status
是created
) - 使用条带客户端对用户的信用卡/借记卡进行收费
- 更新顺序并保存到数据库(
order.status
是accepted
或failed
取决于来自Stripe的响应)
问题:如果在步骤2之后付款成功,但在步骤3中更新订单时出现错误(由于数据库服务器错误、中断或类似),处理这种失败场景并可能从它恢复的一些适当方法是什么?
对于支付系统,您总是需要一个基于相同会计原则的合并过程(每小时,每天,每月),以检查每笔资金流动是否匹配。
在您的情况下,我建议每个外部异步调用记录发送的参数和接收的响应。如果您在一定时间内没有响应,则您知道外部系统(在您的情况下是Stripe)或从外部系统返回的路上出现了问题(您提到您那边的数据库故障)
基本上,对于你生成的每个异步"事务",你知道什么时候开始它,并且必须在它结束之前决定一个合理的时间。因此,在数据库中有一个expected_end_ts。
如果在expected_end_ts之后没有收到答案,您就知道出了问题。然后你可以向Stripe或其他PSP询问状态。希望API能给你一个合理的答案,关于支付是否通过。
还要注意,您应该在1和1之间添加一个步骤。2:重新读取数据库。你要确保你所做的每一个支付请求都在数据库中,和你要发送的完全一样。
相关文章:
- 如何在执行 Ajax 请求大量数据库更新时实现进度条
- 用sql数据库更新谷歌地图标记
- 数据库更新后刷新数据表
- 通知浏览器数据库更新的最佳方法
- AJAX 数据库更新
- 数据库更新的用户确认 - php + Ajax
- 如何使用 typicode/lowdb 文件数据库更新项目数组
- 如何在数据库更新时向客户端发送警报,如facebook聊天
- 在数据库更新时通过Jquery Ajax跟踪和操纵内容
- 付款处理成功,但数据库更新失败
- AJAX数据库更新与CSS按钮颜色改变使用Codeigniter
- 我怎么能得到一个文本字段的值从数据库更新的形式
- Angular JS从数据库更新视图
- 使用外部数据库更新多个站点上的html和css
- 如何在不重新加载页面的情况下使用数据库更新游戏的最高分?
- 当数据库更新时,web应用程序中的通知
- php/javascript在数据库更新后更改内联标签
- 从远程数据库更新Kendo UI Mobile中的列表视图
- 如何处理Angular控制器中的错误从MongoDB数据库更新/删除在Express
- onclick提交上的数据库更新字段不起作用