调用 API 时如何处理网络中断
How to handle network down when calling a API
今天,我在想一个简化的场景如下:
我有自己的支付系统,当用户来存钱时,我使用一个表格将交易数据保存在我自己的数据库中。在保存我自己的记录之前,我需要调用银行支付系统,它有一个像
这样的网络服务 API
public boolean pay(userInfo userInfo, float money)
。
根据返回的结果,我决定是否保存自己的数据。
我的问题是如果打电话给银行付款后API,我自己的网络就断了,没有结果。如何判断是否需要保存自己的Form记录。也许银行支付系统已经处理了这笔交易?如何让两部分数据同步?
我们无法更改银行付款方式 API,因为银行规格是固定的。网络服务 API 是 SOAP 或 Restful
你的实现可能是这样的:
始终将交易数据保存到您的数据库并将其标记为 "unprocessed"。
使用单独的 "worker" 进程,从您的数据库中获取所有未处理的交易,并调用银行支付系统的 pay
方法。
根据pay
方法结果,选择change/not更改交易状态
Worker 可能通过一个预定的进程(每个 XX sec/minutes/etc)或一些不断查询未处理事务的服务(可能在循环之间有一些延迟)。
因此,如果来自银行支付系统的 "no result",交易状态将不会更改,并且 "pay" 方法将在下一个工作人员 运行.
上重试
今天,我在想一个简化的场景如下:
我有自己的支付系统,当用户来存钱时,我使用一个表格将交易数据保存在我自己的数据库中。在保存我自己的记录之前,我需要调用银行支付系统,它有一个像
这样的网络服务 APIpublic boolean pay(userInfo userInfo, float money)
。
根据返回的结果,我决定是否保存自己的数据。
我的问题是如果打电话给银行付款后API,我自己的网络就断了,没有结果。如何判断是否需要保存自己的Form记录。也许银行支付系统已经处理了这笔交易?如何让两部分数据同步?
我们无法更改银行付款方式 API,因为银行规格是固定的。网络服务 API 是 SOAP 或 Restful
你的实现可能是这样的:
始终将交易数据保存到您的数据库并将其标记为 "unprocessed"。
使用单独的 "worker" 进程,从您的数据库中获取所有未处理的交易,并调用银行支付系统的
pay
方法。根据
pay
方法结果,选择change/not更改交易状态
Worker 可能通过一个预定的进程(每个 XX sec/minutes/etc)或一些不断查询未处理事务的服务(可能在循环之间有一些延迟)。
因此,如果来自银行支付系统的 "no result",交易状态将不会更改,并且 "pay" 方法将在下一个工作人员 运行.
上重试