damsel/proto/proxy_provider.thrift
Andrew Mayorov 222647466c HG-61: Introduce suspend intent and callbacks (#59)
* HG-61: Introduce suspend intent + callbacks, redesign proxy interfaces

* HG-61: Declare required namespaces

* HG-61: Bring back the notion of payment cancellation

* HG-41: Reference coredocs doc which explains a set of payment statuses
2016-09-27 16:01:50 +03:00

130 lines
6.0 KiB
Thrift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

include "base.thrift"
include "proxy.thrift"
include "domain.thrift"
namespace java com.rbkmoney.damsel.proxy_provider
typedef base.Opaque Callback
typedef base.Opaque CallbackResponse
/**
* Данные платежа, необходимые для обращения к провайдеру.
*/
struct PaymentInfo {
1: required domain.Invoice invoice
2: required domain.InvoicePayment payment
}
/**
* Данные сессии взаимодействия с провайдерским прокси.
*/
struct Session {
1: required Target target
2: optional proxy.ProxyState state
}
/**
* Целевое значение статуса платежа.
* Согласно https://github.com/rbkmoney/coredocs/blob/589799f/docs/domain/entities/payment.md
*
* В момент, когда прокси успешно завершает сессию взаимодействия, процессинг считает,
* что поставленная цель достигнута, и платёж перешёл в соответствующий статус.
*/
union Target {
/**
* Платёж обработан.
*
* При достижении платежом этого статуса процессинг должен обладать:
* - фактом того, что провайдер _по крайней мере_ авторизовал списание денежных средств в
* пользу системы;
* - данными транзакции провайдера.
*/
1: domain.InvoicePaymentProcessed processed
/**
* Платёж подтверждён.
*
* При достижении платежом этого статуса процессинг должен быть уверен в том, что провайдер
* _по крайней мере_ подтвердил финансовые обязательства перед системой.
*/
2: domain.InvoicePaymentCaptured captured
/**
* Платёж отменён.
*
* При достижении платежом этого статуса процессинг должен быть уверен в том, что провайдер
* аннулировал неподтверждённое списание денежных средств.
*
* В случае, если в рамках сессии проведения платежа провайдер авторизовал, но _ещё не
* подтвердил_ списание средств, эта цель является обратной цели `processed`. В ином случае
* эта цель недостижима, и взаимодействие в рамках сессии должно завершится с ошибкой.
*/
3: domain.InvoicePaymentCancelled cancelled
}
/**
* Набор данных для взаимодействия с провайдерским прокси.
*/
struct Context {
1: required Session session
2: required PaymentInfo payment
3: optional domain.ProxyOptions options = {}
}
/**
* Результат обращения к провайдерскому прокси в рамках сессии.
*
* В результате обращения прокси может решить, следует ли:
* - завершить сессию взаимодействия с провайдером (FinishIntent); или
* - просто приостановить на определённое время (SleepIntent), обновив своё состояние, которое
* вернётся к нему в последующем запросе; или
* - приостановить до получения обратного запроса (SuspendIntent), обновив своё состояние, которое
* вернётся к нему при получени означенного обратного запроса.
*
* Прокси может связать с текущим платежом данные транзакции у провайдера для учёта в нашей системе,
* причём на эти данные налагаются следующие требования:
* - данные должны быть связаны на момент завершения сессии взаимодействия с провайдером в рамках
* достижения цели по переводу платежа в статус `processed`;
* - идентификатор связанной транзакции _не может измениться_ при последующих обращениях в прокси
* по текущему платежу.
*/
struct ProxyResult {
1: required proxy.Intent intent
2: optional proxy.ProxyState next_state
3: optional domain.TransactionInfo trx
}
/**
* Результат обработки провайдерским прокси обратного вызова в рамках сессии.
*/
struct CallbackResult {
1: required CallbackResponse response
2: required ProxyResult result
}
service ProviderProxy {
/**
* Запрос к прокси на проведение взаимодействия с провайдером в рамках сессии.
*/
ProxyResult ProcessPayment (1: Context context)
throws (1: base.TryLater ex1)
/**
* Запрос к прокси на обработку обратного вызова от провайдера в рамках сессии.
*/
CallbackResult HandlePaymentCallback (1: Callback callback, 2: Context context)
throws (1: base.TryLater ex1)
}
service ProviderProxyHost {
/**
* Запрос к процессингу на обработку обратного вызова от провайдера.
*/
CallbackResponse ProcessCallback (1: base.Tag tag, 2: Callback callback)
throws (1: base.InvalidRequest ex1)
}