【问题标题】:REST API Transaction For Payment Platform支付平台的 REST API 交易
【发布时间】:2016-01-09 18:33:00
【问题描述】:

以下是旨在为组织(显示为第 3 方)开发支付平台的架构。每个实体都有一组 REST API。暂时假设我正在开发类似 Paypal 的东西。

我已经用垂直线(红色,蓝色)清楚地标记了边界。涉及三方。支付门户、银行和第 3 方。

  1. 客户可以通过登录支付门户发起交易。支付门户将调用银行的 API。请求流程如图所示。
  2. 每个请求和响应都将通过 ESB 并被记录。如果交易成功,ESB 将更新第 3 方数据库并同时通知支付门户。
  3. 支付门户将向 ESB 发起另一个 API 调用,以确保正确更新第 3 方数据库(图中未显示)。
  4. 最后支付门户将向银行发送确认交易已完成整个周期(图中未显示)。这是另一个 API 调用。

问题是如果两方之间存在网络问题并且无法完成截断周期怎么办。应该如何解决?

假设一旦支付门户发起请求,支付门户和第三方之间的网络就丢失了。即使在银行端交易成功,支付门户也无法得到响应。一旦网络是银行在线,这应该如何处理?

我已阅读以下内容。

Transactions in REST?

【问题讨论】:

    标签: api rest paypal transactions payment-gateway


    【解决方案1】:

    首先,您应该忘记同步处理事务。

    在第一个场景中,您初始化交易和交易数据 - 及其状态 - 返回 200 OK 代码。开始状态可能是例如开始。然后您重复发送GET 请求以获取所有交易数据并在其状态更改为例如时显示适当的信息。 完成。在这种情况下,如果客户端和服务器之间的连接断开,则不会发生任何坏事——所有数据都保存在服务器端,客户端表现为观察者。综上所述,200 OK 代码与交易状态一起使用。

    在第二种情况下,HTTP 状态代码指示事务是否完成。如果事务已启动/提交,则响应包含事务数据并标记为202 Accepted。没有内部 status 字段。然后,您应该重复查询端点,直到返回 200 OK204 No Content(如果答案正确)或返回 4XX (5XX),以防出现任何故障。

    这两种方法仅在指示事务是否完成时有所不同:通过资源内部字段或 HTTP 状态代码。

    【讨论】:

    • +1 为答案。由于有 3 个实体,您在这里将谁称为客户端和服务器?另外,如果可能的话,请您详细说明您的答案,并提供一些链接以获取更多信息。
    • 支付门户是客户端,它与第 3 方 ESB 通信,从我的角度来看,这是服务器。稍后我会尝试扩展答案。
    • @Techie,你能澄清一下这个场景吗?因为重读后我不确定到底是谁发起了交易并监控了它的状态。
    • 好的,所以 client 我的意思是启动事务的系统/页面。然后它应该只监视/请求(观察者模式)事务状态,如果它成功/失败,则做出适当的反应。 server 我的意思是唯一的系统 client 与之通信。由于 REST 本身没有事务,因此这是模拟它们的唯一方法。
    • 这取决于所使用的库,但 client 会收到异常或超时,这一切都清楚且安全。 Server 没有初始化与client 的连接,所以这边没有问题。如果在添加新事务时连接断开。在 server 端创建新事务时,应该将其本身作为事务进行 - 例如数据库事务。再次建立连接后,客户端会通过查询知道结果。
    猜你喜欢
    • 2013-04-11
    • 2017-06-03
    • 2018-02-10
    • 2013-08-20
    • 1970-01-01
    • 2011-03-29
    • 2016-03-17
    • 2013-05-20
    • 2018-08-22
    相关资源
    最近更新 更多