调用API时如何处理网络问题

时间:2017-02-03 17:23:03

标签: web-services rest soap distributed-transactions

今天,我正在考虑如下简化方案:

我有自己的支付系统,当用户来省钱时,我使用表单在我自己的数据库中保存交易数据。在保存我自己的记录之前,我需要调用银行支付系统,该系统具有像

这样的Web服务API

public boolean pay(userInfo userInfo, float money)

根据返回的结果,我确定是否保存自己的数据。

我的问题是,在拨打银行支付API之后,我自己的网络已关闭,并且没有结果。如何确定是否需要保存自己的表单记录。也许银行支付系统已处理此交易?如何使两部分数据同步?

我们无法更改银行支付API,因为银行规格已修复。 Webservice API是SOAP或Restful

1 个答案:

答案 0 :(得分:0)

您的实施可能是这样的:

  • 始终将交易数据保存到您的数据库并将其标记为"未处理"。

  • 使用单独的" worker"进程,从数据库中获取所有未处理的事务,并调用银行支付系统的pay方法。

  • 根据pay方法结果,选择更改/不更改交易状态。

工作人员可以通过预定的进程(每个XX秒/分钟/等)或一些不断查询未处理的事务的服务(可能在循环之间有一些延迟)。

因此,如果"没有结果"从银行支付系统,交易状态不会改变,"支付"方法将在下一次工人运行时重试。