以下是旨在为组织(显示为第 3 方)开发支付平台的架构。每个实体都有一组 REST API。暂时假设我正在开发类似 Paypal 的东西。
我已经用垂直线(红色,蓝色)清楚地标记了边界。涉及三个方面。支付门户、银行和第 3 方。
- 客户可以通过登录支付门户发起交易。支付门户将调用银行的 API。请求流程如图所示。
- 每个请求和响应都将通过 ESB 并记录下来。如果交易成功,ESB 将更新第三方数据库并同时通知支付门户。
- 支付门户将向 ESB 发起另一个 API 调用,以确保正确更新第 3 方数据库(图中未显示)。
- 最后,支付门户将向银行发送确认,确认交易已完成整个周期(图中未显示)。这是另一个 API 调用。
问题是如果双方之间存在网络问题并且无法完成截断周期怎么办。应该如何解决?
假设一旦支付门户发起请求,支付门户与第 3 方之间的网络就会丢失。即使在银行端交易成功,支付门户也无法得到响应。一旦网络银行在线,应该如何处理?
我已阅读以下内容。
最佳答案
首先,您应该忘记同步处理事务。
在第一个场景中,您初始化交易和交易数据 - 及其状态 - 返回 200 OK
代码。开始状态可能是例如开始。然后您重复发送 GET
请求以获取所有交易数据并在其状态更改为例如完成。在这种情况下,如果客户端和服务器之间的连接断开,则不会发生什么坏事——所有数据都保存在服务器端,客户端充当观察者。综上所述,200 OK
代码与交易状态一起使用。
在第二种情况下,HTTP 状态代码指示事务是否已完成。如果事务已启动/提交,则响应包含事务数据并将其标记为 202 Accepted
。没有内部status 字段。然后,您应该重复查询端点,直到返回 200 OK
或 204 No Content
(如果答案正确)或 4XX
(5XX
) 以防出现任何故障。
这两种方法的不同之处仅在于指示事务是否已完成:通过资源内部字段或 HTTP 状态代码。
关于api - 支付平台的 REST API 交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078426/