gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:17:03 25 4
gpt4 key购买 nike

我正在尝试在我的 express.js 路由之一中实现 strip 结帐流程。为此,我有:

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

我的步骤如下:

客户:

  1. 提交包含 Stripe 支付 token 的订单详情

服务器:

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

问题:如果在第 2 步后付款成功,但在第 3 步更新订单时出现错误(由于数据库服务器错误、中断或类似情况),有哪些适当的方法来处理此失败场景并可能从中恢复?

最佳答案

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

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

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

如果您在 expected_end_ts 之后还没有收到答复,您就知道出了问题。然后你可以向 Stripe 或其他 PSP 请求状态。希望 API 能够就付款是否成功给您一个理智的答案。

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

关于javascript - 处理付款处理成功但数据库更新失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25407282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com