2016-06-02 11:38:27 +00:00
|
|
|
|
include "base.thrift"
|
|
|
|
|
include "domain.thrift"
|
2018-02-15 12:55:50 +00:00
|
|
|
|
include "user_interaction.thrift"
|
2019-08-09 07:58:32 +00:00
|
|
|
|
include "timeout_behaviour.thrift"
|
2016-06-02 11:38:27 +00:00
|
|
|
|
|
2016-06-21 15:45:09 +00:00
|
|
|
|
namespace java com.rbkmoney.damsel.proxy_provider
|
2016-10-20 10:47:12 +00:00
|
|
|
|
namespace erlang prxprv
|
2016-06-21 15:45:09 +00:00
|
|
|
|
|
2018-02-15 12:55:50 +00:00
|
|
|
|
/**
|
|
|
|
|
* Непрозрачное для процессинга состояние прокси, связанное с определённой сессией взаимодействия
|
|
|
|
|
* с третьей стороной.
|
|
|
|
|
*/
|
|
|
|
|
typedef base.Opaque ProxyState
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Запрос/ответ прокси при обработке обратного вызова в рамках сессии.
|
|
|
|
|
*/
|
|
|
|
|
typedef base.Opaque Callback
|
|
|
|
|
typedef base.Opaque CallbackResponse
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Требование прокси к процессингу, отражающее дальнейший прогресс сессии взаимодействия
|
|
|
|
|
* с третьей стороной.
|
|
|
|
|
*/
|
|
|
|
|
union Intent {
|
|
|
|
|
1: FinishIntent finish
|
|
|
|
|
2: SleepIntent sleep
|
|
|
|
|
3: SuspendIntent suspend
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Требование завершить сессию взаимодействия с третьей стороной.
|
|
|
|
|
*/
|
|
|
|
|
struct FinishIntent {
|
|
|
|
|
1: required FinishStatus status
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Статус, c которым завершилась сессия взаимодействия с третьей стороной.
|
|
|
|
|
*/
|
|
|
|
|
union FinishStatus {
|
|
|
|
|
/** Успешное завершение взаимодействия. */
|
|
|
|
|
1: Success success
|
|
|
|
|
/** Неуспешное завершение взаимодействия с пояснением возникшей проблемы. */
|
|
|
|
|
2: domain.Failure failure
|
|
|
|
|
}
|
|
|
|
|
|
2018-09-26 11:55:10 +00:00
|
|
|
|
struct Success {
|
|
|
|
|
/** Токен для последующих взаимодействий. */
|
|
|
|
|
1: optional domain.Token token
|
|
|
|
|
}
|
2018-02-15 12:55:50 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Требование прервать на определённое время сессию взаимодействия, с намерением продолжить
|
|
|
|
|
* её потом.
|
|
|
|
|
*/
|
|
|
|
|
struct SleepIntent {
|
|
|
|
|
/** Таймер, определяющий когда следует продолжить взаимодействие. */
|
|
|
|
|
1: required base.Timer timer
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Взаимодействие с пользователем, в случае если таковое необходимо для продолжения прогресса
|
|
|
|
|
* в рамках сессии взаимодействия.
|
|
|
|
|
*/
|
|
|
|
|
2: optional user_interaction.UserInteraction user_interaction
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
typedef base.Tag CallbackTag
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Требование приостановить сессию взаимодействия, с продолжением по факту прихода обратного
|
2019-07-01 10:50:00 +00:00
|
|
|
|
* запроса (callback), либо выполняет один из указаных вариантов timeout_behaviour.
|
|
|
|
|
* Если не указан timeout_behaviour, сессия завершается с неуспешным завершением
|
|
|
|
|
* по факту истечения заданного времени ожидания.
|
2018-02-15 12:55:50 +00:00
|
|
|
|
*/
|
|
|
|
|
struct SuspendIntent {
|
|
|
|
|
/**
|
|
|
|
|
* Ассоциация, по которой обработчик обратного запроса сможет идентифицировать сессию
|
|
|
|
|
* взаимодействия с третьей стороной, чтобы продолжить по ней взаимодействие.
|
|
|
|
|
*/
|
|
|
|
|
1: required CallbackTag tag
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Таймер, определяющий время, в течение которого процессинг ожидает обратный запрос.
|
|
|
|
|
*/
|
|
|
|
|
2: required base.Timer timeout
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Взаимодействие с пользователем, в случае если таковое необходимо для продолжения прогресса
|
|
|
|
|
* в рамках сессии взаимодействия.
|
|
|
|
|
*/
|
|
|
|
|
3: optional user_interaction.UserInteraction user_interaction
|
2019-07-01 10:50:00 +00:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Поведение процессинга в случае истечения заданного timeout
|
|
|
|
|
*/
|
2019-08-09 07:58:32 +00:00
|
|
|
|
4: optional timeout_behaviour.TimeoutBehaviour timeout_behaviour
|
2019-07-01 10:50:00 +00:00
|
|
|
|
}
|
2018-02-15 12:55:50 +00:00
|
|
|
|
|
2017-10-23 12:00:48 +00:00
|
|
|
|
struct RecurrentPaymentTool {
|
|
|
|
|
1: required base.ID id
|
|
|
|
|
2: required base.Timestamp created_at
|
|
|
|
|
3: required domain.DisposablePaymentResource payment_resource
|
|
|
|
|
4: required Cash minimal_payment_cost
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Данные, необходимые для генерации многоразового токена
|
|
|
|
|
*/
|
|
|
|
|
struct RecurrentTokenInfo {
|
|
|
|
|
1: required RecurrentPaymentTool payment_tool
|
|
|
|
|
2: optional domain.TransactionInfo trx
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Данные сессии взаимодействия с провайдерским прокси в рамках генерации многоразового токена.
|
|
|
|
|
*/
|
|
|
|
|
struct RecurrentTokenSession {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: optional ProxyState state
|
2017-10-23 12:00:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Набор данных для взаимодействия с провайдерским прокси в рамках проведения генерации
|
|
|
|
|
* многоразового токена.
|
|
|
|
|
*/
|
|
|
|
|
struct RecurrentTokenContext {
|
|
|
|
|
1: required RecurrentTokenSession session
|
|
|
|
|
2: required RecurrentTokenInfo token_info
|
|
|
|
|
3: optional domain.ProxyOptions options = {}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct RecurrentTokenProxyResult {
|
|
|
|
|
1: required RecurrentTokenIntent intent
|
2018-02-15 12:55:50 +00:00
|
|
|
|
2: optional ProxyState next_state
|
2017-10-23 12:00:48 +00:00
|
|
|
|
4: optional domain.TransactionInfo trx
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
union RecurrentTokenIntent {
|
|
|
|
|
1: RecurrentTokenFinishIntent finish
|
2018-02-15 12:55:50 +00:00
|
|
|
|
2: SleepIntent sleep
|
|
|
|
|
3: SuspendIntent suspend
|
2017-10-23 12:00:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct RecurrentTokenFinishIntent {
|
|
|
|
|
1: required RecurrentTokenFinishStatus status
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
union RecurrentTokenFinishStatus {
|
|
|
|
|
1: RecurrentTokenSuccess success
|
2018-02-15 12:55:50 +00:00
|
|
|
|
2: domain.Failure failure
|
2017-10-23 12:00:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct RecurrentTokenSuccess {
|
|
|
|
|
1: required domain.Token token
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct RecurrentTokenCallbackResult {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required CallbackResponse response
|
2017-10-23 12:00:48 +00:00
|
|
|
|
2: required RecurrentTokenProxyResult result
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-02 11:38:27 +00:00
|
|
|
|
/**
|
2016-09-27 13:01:50 +00:00
|
|
|
|
* Данные платежа, необходимые для обращения к провайдеру.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*/
|
2016-09-27 13:01:50 +00:00
|
|
|
|
struct PaymentInfo {
|
2019-02-01 10:45:02 +00:00
|
|
|
|
1: required Shop shop
|
|
|
|
|
2: required Invoice invoice
|
|
|
|
|
3: required InvoicePayment payment
|
|
|
|
|
4: optional InvoicePaymentRefund refund
|
|
|
|
|
5: optional InvoicePaymentCapture capture
|
2016-10-20 10:47:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct Shop {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required domain.ShopID id
|
|
|
|
|
2: required domain.Category category
|
|
|
|
|
3: required domain.ShopDetails details
|
2017-07-17 10:21:41 +00:00
|
|
|
|
4: required domain.ShopLocation location
|
2016-10-20 10:47:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct Invoice {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required domain.InvoiceID id
|
|
|
|
|
2: required base.Timestamp created_at
|
|
|
|
|
3: required base.Timestamp due
|
2016-12-21 12:53:12 +00:00
|
|
|
|
7: required domain.InvoiceDetails details
|
2018-02-15 12:55:50 +00:00
|
|
|
|
6: required Cash cost
|
2016-10-20 10:47:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-10-23 12:00:48 +00:00
|
|
|
|
union PaymentResource {
|
|
|
|
|
1: domain.DisposablePaymentResource disposable_payment_resource
|
|
|
|
|
2: RecurrentPaymentResource recurrent_payment_resource
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
struct RecurrentPaymentResource {
|
|
|
|
|
1: required domain.PaymentTool payment_tool
|
|
|
|
|
2: required domain.Token rec_token
|
|
|
|
|
}
|
|
|
|
|
|
2016-10-20 10:47:12 +00:00
|
|
|
|
struct InvoicePayment {
|
|
|
|
|
1: required domain.InvoicePaymentID id
|
2018-02-15 12:55:50 +00:00
|
|
|
|
2: required base.Timestamp created_at
|
|
|
|
|
3: optional domain.TransactionInfo trx
|
|
|
|
|
6: required PaymentResource payment_resource
|
|
|
|
|
5: required Cash cost
|
|
|
|
|
7: required domain.ContactInfo contact_info
|
2018-09-26 11:55:10 +00:00
|
|
|
|
8: optional bool make_recurrent
|
2019-08-23 09:51:04 +00:00
|
|
|
|
9: optional base.Timestamp processing_deadline
|
2016-10-20 10:47:12 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-09-12 09:36:42 +00:00
|
|
|
|
struct InvoicePaymentRefund {
|
|
|
|
|
1: required domain.InvoicePaymentRefundID id
|
2018-02-15 12:55:50 +00:00
|
|
|
|
2: required base.Timestamp created_at
|
2018-03-06 14:04:49 +00:00
|
|
|
|
4: required Cash cash
|
2018-02-15 12:55:50 +00:00
|
|
|
|
3: optional domain.TransactionInfo trx
|
2017-09-12 09:36:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-02-01 10:45:02 +00:00
|
|
|
|
struct InvoicePaymentCapture {
|
|
|
|
|
1: required Cash cost
|
|
|
|
|
}
|
|
|
|
|
|
2016-10-20 10:47:12 +00:00
|
|
|
|
struct Cash {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required domain.Amount amount
|
2016-10-20 10:47:12 +00:00
|
|
|
|
2: required domain.Currency currency
|
2016-06-02 11:38:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2016-09-27 13:01:50 +00:00
|
|
|
|
* Данные сессии взаимодействия с провайдерским прокси.
|
|
|
|
|
*
|
|
|
|
|
* В момент, когда прокси успешно завершает сессию взаимодействия, процессинг считает,
|
|
|
|
|
* что поставленная цель достигнута, и платёж перешёл в соответствующий статус.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*/
|
2017-07-17 10:21:41 +00:00
|
|
|
|
struct Session {
|
|
|
|
|
1: required domain.TargetInvoicePaymentStatus target
|
2018-02-15 12:55:50 +00:00
|
|
|
|
2: optional ProxyState state
|
2016-06-02 11:38:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2017-10-23 12:00:48 +00:00
|
|
|
|
* Набор данных для взаимодействия с провайдерским прокси в рамках платежа.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*/
|
2017-10-23 12:00:48 +00:00
|
|
|
|
struct PaymentContext {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required Session session
|
|
|
|
|
2: required PaymentInfo payment_info
|
|
|
|
|
3: optional domain.ProxyOptions options = {}
|
2016-06-02 11:38:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
2016-09-27 13:01:50 +00:00
|
|
|
|
* Результат обращения к провайдерскому прокси в рамках сессии.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*
|
|
|
|
|
* В результате обращения прокси может решить, следует ли:
|
2016-09-27 13:01:50 +00:00
|
|
|
|
* - завершить сессию взаимодействия с провайдером (FinishIntent); или
|
|
|
|
|
* - просто приостановить на определённое время (SleepIntent), обновив своё состояние, которое
|
|
|
|
|
* вернётся к нему в последующем запросе; или
|
|
|
|
|
* - приостановить до получения обратного запроса (SuspendIntent), обновив своё состояние, которое
|
|
|
|
|
* вернётся к нему при получени означенного обратного запроса.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*
|
2016-09-27 13:01:50 +00:00
|
|
|
|
* Прокси может связать с текущим платежом данные транзакции у провайдера для учёта в нашей системе,
|
|
|
|
|
* причём на эти данные налагаются следующие требования:
|
|
|
|
|
* - данные должны быть связаны на момент завершения сессии взаимодействия с провайдером в рамках
|
|
|
|
|
* достижения цели по переводу платежа в статус `processed`;
|
2016-06-02 11:38:27 +00:00
|
|
|
|
* - идентификатор связанной транзакции _не может измениться_ при последующих обращениях в прокси
|
|
|
|
|
* по текущему платежу.
|
|
|
|
|
*/
|
2017-10-23 12:00:48 +00:00
|
|
|
|
struct PaymentProxyResult {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required Intent intent
|
|
|
|
|
2: optional ProxyState next_state
|
2016-09-27 13:01:50 +00:00
|
|
|
|
3: optional domain.TransactionInfo trx
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Результат обработки провайдерским прокси обратного вызова в рамках сессии.
|
|
|
|
|
*/
|
2017-10-23 12:00:48 +00:00
|
|
|
|
struct PaymentCallbackResult {
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: required CallbackResponse response
|
2017-10-23 12:00:48 +00:00
|
|
|
|
2: required PaymentCallbackProxyResult result
|
2017-08-09 13:08:39 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-10-23 12:00:48 +00:00
|
|
|
|
struct PaymentCallbackProxyResult {
|
2017-08-09 13:08:39 +00:00
|
|
|
|
// TODO temporary crutch, remove it as soon as possible
|
|
|
|
|
// An `undefined` means that the suspend will be kept untouched
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: optional Intent intent
|
|
|
|
|
2: optional ProxyState next_state
|
2017-08-09 13:08:39 +00:00
|
|
|
|
3: optional domain.TransactionInfo trx
|
2016-06-02 11:38:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
service ProviderProxy {
|
|
|
|
|
|
|
|
|
|
/**
|
2017-10-23 12:00:48 +00:00
|
|
|
|
* Запрос к прокси на создание многоразового токена
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*/
|
2017-10-23 12:00:48 +00:00
|
|
|
|
RecurrentTokenProxyResult GenerateToken (
|
|
|
|
|
1: RecurrentTokenContext context
|
|
|
|
|
)
|
2016-06-02 11:38:27 +00:00
|
|
|
|
|
|
|
|
|
/**
|
2017-10-23 12:00:48 +00:00
|
|
|
|
* Запрос к прокси на обработку обратного вызова от провайдера в рамках сессии получения
|
|
|
|
|
* многоразового токена.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*/
|
2017-10-23 12:00:48 +00:00
|
|
|
|
RecurrentTokenCallbackResult HandleRecurrentTokenCallback (
|
2018-02-15 12:55:50 +00:00
|
|
|
|
1: Callback callback
|
2017-10-23 12:00:48 +00:00
|
|
|
|
2: RecurrentTokenContext context
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Запрос к прокси на проведение взаимодействия с провайдером в рамках платежной сессии.
|
|
|
|
|
*/
|
|
|
|
|
PaymentProxyResult ProcessPayment (1: PaymentContext context)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Запрос к прокси на обработку обратного вызова от провайдера в рамках платежной сессии.
|
|
|
|
|
*/
|
2018-02-15 12:55:50 +00:00
|
|
|
|
PaymentCallbackResult HandlePaymentCallback (1: Callback callback, 2: PaymentContext context)
|
2016-06-02 11:38:27 +00:00
|
|
|
|
|
2016-09-27 13:01:50 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-09-28 16:21:55 +00:00
|
|
|
|
exception PaymentNotFound {}
|
|
|
|
|
|
2016-09-27 13:01:50 +00:00
|
|
|
|
service ProviderProxyHost {
|
2016-12-13 17:23:13 +00:00
|
|
|
|
|
2016-06-02 11:38:27 +00:00
|
|
|
|
/**
|
2017-10-23 12:00:48 +00:00
|
|
|
|
* Запрос к процессингу на обработку обратного вызова от провайдера
|
|
|
|
|
* в рамках взаимодействия по платежу.
|
|
|
|
|
*/
|
2018-02-15 12:55:50 +00:00
|
|
|
|
CallbackResponse ProcessPaymentCallback (1: CallbackTag tag, 2: Callback callback)
|
2017-10-23 12:00:48 +00:00
|
|
|
|
throws (1: base.InvalidRequest ex1)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Запрос к процессингу на обработку обратного вызова от провайдера
|
|
|
|
|
* в рамках взаимодействия по получению многоразового токена.
|
2016-06-02 11:38:27 +00:00
|
|
|
|
*/
|
2018-02-15 12:55:50 +00:00
|
|
|
|
CallbackResponse ProcessRecurrentTokenCallback (1: CallbackTag tag, 2: Callback callback)
|
2016-09-27 13:01:50 +00:00
|
|
|
|
throws (1: base.InvalidRequest ex1)
|
2016-12-13 17:23:13 +00:00
|
|
|
|
|
2017-09-28 16:21:55 +00:00
|
|
|
|
/**
|
|
|
|
|
* Запрос-костыль к процессингу для получения актуального состояния платежа.
|
|
|
|
|
*/
|
2018-02-15 12:55:50 +00:00
|
|
|
|
PaymentInfo GetPayment (1: CallbackTag tag)
|
2017-09-28 16:21:55 +00:00
|
|
|
|
throws (1: PaymentNotFound ex1)
|
|
|
|
|
|
2016-06-02 11:38:27 +00:00
|
|
|
|
}
|