Перейти к содержанию

Решение об успешности платежа

BaaS поддерживает несколько вариантов проведения платежа:

  • синхронный — когда финальный статус проведения платежа известен сразу и возвращается в ответе на платёжный запрос;
  • асинхронный — когда платёж находится в обработке после получения запроса (и отправки ответа на запрос) и приобретает финальный статус несколько позже.

Синхронный вариант проведения платежа

Пример — выплата на кошелёк, перевод между кошельками и др.

Для принятия решения об успешности платежа партнёр может основываться на значении поля status, полученном в ответе на соответствующий платёжный запрос. Запросы и ответы описаны в документации Payments API.

Последовательность действий для принятия решения об успешности платежа на примере совершения перевода между кошельками приведена ниже.

%%{init: {
    "sequence" : {
        "wrap":true,
        "messageFontSize":14,
        "noteFontSize":14,
        "actorMargin":
        85 }}}%%
sequenceDiagram
    participant С as Клиент
    participant P as Партнёр
    participant B as BaaS
    С->>P: Перевод на кошелёк в интерфейсе
    Note right of С: «Перевести»
    P->>+B: Сценарий «Перевод между кошельками» (Payments API)
    Note right of P: transactionId
    B->>-P: 
    Note left of B: status:SUCCESS
    P->>С: Коммуникация с клиентом

Сценарий «Перевод между кошельками» см. здесь.

Обратите внимание

Синхронный вариант означает, что финальный статус проведения платежа (SUCCESS или DECLINED) известен сразу и возвращается в ответе на платёжный запрос. Тем не менее в редких случаях BaaS может вернуть статус PROCESSING. В такой ситуации партнёр должен выполнять одно из следующих действий до получения финального статуса:

  • отправлять запрос на совершение операции (повторный запрос должен быть идентичен исходному — методы Payments API являются идемпотентными);
  • запрашивать статус операции.

Асинхронный вариант проведения платежа

Пример — пополнение с банковской карты (см. пример запроса), перевод на банковскую карту (см. пример запроса) и др.

Для принятия решения об успешности платежа партнёру нужно дождаться уведомления от BaaS и следовать описанной ниже логике.

Если статус в уведомлении имеет финальное успешное значение status:SUCCESS, партнёру необходимо однократно выполнить запрос статуса к платформе самостоятельно. Это позволит избежать ложных уведомлений, т.е. устранить риски компрометации данных в случае утечки “секрета”, который используется при вычислении цифровой подписи уведомления. В конечном итоге партнёру следует основываться на значении поля status в ответе на запрос статуса соответствующего платежа. Запросы и ответы описаны в документации Payments API.

Последовательность действий для принятия решения об успешности платежа на примере совершения перевода на банковскую карту приведена ниже.

%%{init: {
    "sequence" : {
        "wrap":true,
        "messageFontSize":15,
        "noteFontSize":14,
        "actorMargin":
        85 }}}%%
sequenceDiagram
    participant С as Клиент
    participant P as Партнёр
    participant B as BaaS
    С->>P: Перевод на карту в интерфейсе
    Note right of С: «Перевести»
    P->>+B: Сценарий «Перевод на банковскую карту» (Payments API)
    Note right of P: transactionId
    B->>-P: 
    Note left of B: status:PROCESSING
    rect rgb(255, 238, 223)
    B->>+P: Сценарий «Уведомление об операциях домена PAYMENTS» (History&Notifications API)
    P-->>-B: 
    Note left of B: transactionId, status:SUCCESS
    end
    rect rgb(230, 230, 230)
    P->>+B: Запрос на получение статуса перевода (Payments API)
    Note right of P: transactionId
    B-->>-P: Ответ на запрос получения статуса
    Note left of B: transactionId, status:SUCCESS
    end
    P->>С: Коммуникация с клиентом

Упомянутые на диаграмме сценарии см. в статьях: