mirror of
https://github.com/valitydev/damsel.git
synced 2024-11-07 02:05:18 +00:00
222647466c
* 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
130 lines
6.0 KiB
Thrift
130 lines
6.0 KiB
Thrift
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)
|
||
}
|