避免对数据库的双重请求
Avoid double requests to database
我在 Nuxt.js(vue.js 和 node.js)上使用名为 Cockpit 的无头 cms 构建了电子商务解决方案。我正在使用第三方支付网关,当支付有效时,将用户重定向到回调 url.
在回电时 url 我正在进行多项操作:创建装运、将订单添加到 Cockpit 以及 post 将订单数据添加到发票软件。还会生成确认邮件和运输标签。标签和邮件也会发送两次,这对客户来说很烦人 + 生成运输标签需要花钱。一切都在 post 正常工作。
我的问题是,支付网关有时会在几毫秒内调用我的回调 url 两次,因此在 Cockpit 中创建了一个重复的订单,因为第一个请求在第二个请求开始之前还没有完成,并且因此我对双重订单的检查失败了,因为理论上不存在具有该交易 ID 的订单。
为了检查双重订单,我执行以下操作 - 这是在用户点击回调后立即完成的 url:
- 我检查我从支付网关获得的交易ID是否已经
存在于 Cockpit 中。
- 我检查服务器中是否存在交易ID
已经开会了。
我最后的问题是 - 你们对我如何避免和消除那些双重订单有什么建议吗?也许你们中有些人以前尝试过类似的东西?
很抱歉这么长post,但我觉得有必要在 Whosebug 上提出一个有效的问题
看来问题不在你这边:第一个问题是 "why the third-party payment gateway call your callback two times ? Does it make 2 payment ?" 我认为你应该首先尝试在支付网关人员的帮助下理解这一点,因为这不是正常。
在此期间,或者如果你无法在另一边解决,你可以尝试对当前订单或回调函数的队列进行某种锁定,以便如果第二次回调同样的订单到达,它可以被阻止、丢弃或停止,直到第一个订单结束(而且,此时,我想第二个电话会发现订单已经处理,所以不再重复打印和电子邮件)
我在 Nuxt.js(vue.js 和 node.js)上使用名为 Cockpit 的无头 cms 构建了电子商务解决方案。我正在使用第三方支付网关,当支付有效时,将用户重定向到回调 url.
在回电时 url 我正在进行多项操作:创建装运、将订单添加到 Cockpit 以及 post 将订单数据添加到发票软件。还会生成确认邮件和运输标签。标签和邮件也会发送两次,这对客户来说很烦人 + 生成运输标签需要花钱。一切都在 post 正常工作。
我的问题是,支付网关有时会在几毫秒内调用我的回调 url 两次,因此在 Cockpit 中创建了一个重复的订单,因为第一个请求在第二个请求开始之前还没有完成,并且因此我对双重订单的检查失败了,因为理论上不存在具有该交易 ID 的订单。
为了检查双重订单,我执行以下操作 - 这是在用户点击回调后立即完成的 url:
- 我检查我从支付网关获得的交易ID是否已经 存在于 Cockpit 中。
- 我检查服务器中是否存在交易ID 已经开会了。
我最后的问题是 - 你们对我如何避免和消除那些双重订单有什么建议吗?也许你们中有些人以前尝试过类似的东西?
很抱歉这么长post,但我觉得有必要在 Whosebug 上提出一个有效的问题
看来问题不在你这边:第一个问题是 "why the third-party payment gateway call your callback two times ? Does it make 2 payment ?" 我认为你应该首先尝试在支付网关人员的帮助下理解这一点,因为这不是正常。
在此期间,或者如果你无法在另一边解决,你可以尝试对当前订单或回调函数的队列进行某种锁定,以便如果第二次回调同样的订单到达,它可以被阻止、丢弃或停止,直到第一个订单结束(而且,此时,我想第二个电话会发现订单已经处理,所以不再重复打印和电子邮件)