2017-02-03 14 views
1

Сегодня я имею в виду упрощенный сценария следующим образом:Как обращаться с сетью вниз при вызове API

У меня есть собственная платежная система, и когда пользователь пришел, чтобы сэкономить деньги, я использую форму для сохранения данных транзакций в моя собственная БД. Прежде чем сохранять свою собственную запись, мне нужно позвонить в банковскую платежную систему, у которой есть API-интерфейс Webservice, такой как

public boolean pay(userInfo userInfo, float money).

На основании полученного результата я определяю, сохраняют ли мои собственные данные или нет.

Мой вопрос в том, что после вызова API платежей Банка моя собственная сеть отключена, и никаких результатов не будет. Как определить, нужно ли мне сохранять собственную запись формы или нет. Может быть, банковская платежная система уже обработала эту транзакцию? Как синхронизировать две части данных?

Мы не можем изменить API банковских платежей, так как спецификация банка исправлена. Webservice API является SOAP или Restful

ответ

0

Ваша реализация может быть что-то вроде этого:

  • Всегда сохранять данные о транзакции в базе данных и пометить его как «необработанный».

  • Используйте отдельный «рабочий» процесс, который извлекает всю необработанную транзакцию из вашей базы данных и звонит pay метод банковской платежной системы.

  • В соответствии с результатом pay, вы можете изменить или не изменить статус транзакции.

работника может с помощью запланированного процесса (каждые ХХ сек/мин/и т.д.) или какого-либо сервиса, который запрашивает необработанные операции постоянно (возможно с некоторой задержкой между петлями).

Таким образом, в случае отсутствия результата из банковской платежной системы состояние транзакции не будет изменено, и метод «оплаты» будет повторен при следующем прогоне рабочего.