1.25. Mobile Device Transfer

Введение

Перевод с мобильного устройства может выполняться с данными держателя карты отправителя и получателя средств или со ссылкой на карту, ранее созданной в процессе проверки карты либо в предыдущих транзакциях Transfer/Sale.

Значение терминов см. в Глоссарии.

Сценарий Переводов

@startuml
autonumber
title Мобильное приложение - \nПеревод стредств с карты 3-DS
skinparam ParticipantPadding 70
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "SBC" as company
client <-> mobile: Аутентификация
mobile -> party: Запрос \nтокена доступа
mobile <-- party: Ответ с \nтокеном доступа
note right
accessToken
end note
mobile -> party: Запрос инициации \nперевода средств
mobile <-- party: Ответ инициации \nперевода средств
mobile -> company: Обработка запроса \nперевода средств
mobile <-- company: Обработка ответа \nперевода средств
note right
session token
end note
party <- company : Проверка запроса \nперевода средств
party --> company : Проверка ответа \nперевода средств
company -> company: Начало обработки
mobile -> company: Запрос статуса \nперевода средств
note left
session token
end note
mobile <-- company: Ответ статуса \nперевода средств
note right
state = REDIRECT_REQUEST
end note
mobile -> mobile: Открытие браузера и \nпредоставлние redirectUrl \nдля перенаправления \nна страницу 3DS
activate mobile
client <-- mobile: Предоставление redirectUrl
client -> mobile: Предоставлние \nдержателем карты \nданных аутентификации
mobile -> company: Обновление статуса \nперевода средств
company --> mobile: Запрос на закрытие браузера
destroy mobile
company -> company: Обработка перевода средств
    party <- company: Запрос уведомления \nперевода средств \nсравнения карты
note right
server card id
end note
    party --> company: Ответ уведомления \nперевода средств \nсравнения карты
mobile -> company: Запрос статуса перевода средств
note left
session token
end note
mobile <-- company: Ответ статуса перевода средств
note right
bankorder id
state = APPROVED|DECLINED
end note
party <- company: Запрос обратного вызова \nс финальным статусом
party --> company: Ответ обратного вызова \nс финальным статусом
@enduml

(1,2,3) Для выполнения аутентификации Потребителя в приложении Присоединяющейся стороны Присоединяющаяся сторона может использовать любой метод, наиболее соответствующий её потребностям. В результате сервер Присоединяющейся стороны генерирует {accessToken} и предоставляет его приложению Присоединяющейся стороны. Этот параметр будет использоваться для начала и продолжения сеанса.
(4,5) Чтобы инициировать перевод средств, приложение Присоединяющейся стороны отправляет {accessToken} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для начала сессии с уникальными случайными {nonce} и зашифрованной {signature}. Для инициирования запроса Transfer см. Initiate Transfer.
(6,7) На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сеанса и другие параметры напрямую в SBC для перевода средств с карты на карту. См. Perform Transfer.
(8,9) Check transfer используется в целях безопасности и позволяет SBC сравнить данные приложения Присоединяющейся стороны с данными на сервере Присоединяющейся стороны. О реализации запроса см. Check Transfer.
(11,12,21,22) Приложение Присоединяющейся стороны отправляет запрос статуса перевода в SBC для получения статуса транзакции Transfer. Для реализации запроса см. статус Transfer.
(19,20) SBC отправляет на сервер/прокси Присоединяющейся стороны уведомление сопоставления карты Transfer с созданной на её стороне ссылкой на карту — {serverCardId}. Для реализации запроса уведомления сопоставления карты Transfer см. Уведомление сопоставления карты Transfer.
(23,24) Присоединяющаяся сторона указала URL обратного вызова; Платёжный Шлюз отправляет сообщение на URL обратного вызова каждый раз, когда транзакция достигает финального статуса, независимо от того, является ли результат approved, declined или имеет другой финальный статус. Подробнее см. в Callbacks.

Repeat Сценарий Переводов

После успешной процедуры Card mapping новые переводы с теми же данными держателя карты можно выполнять проще для Покупателя.
Приложение Присоединяющейся стороны создаёт новые запросы Transfer, используя {clientCardId} вместо данных держателя исходной и/или целевой карты. SBC отправляет эти {clientCardId} на сервер Присоединяющейся стороны в «Check transfer request» и получает сопоставленные с ними {serverCardId} в «Check transfer response». Эти {serverCardId} используются для продолжения обработки транзакции Transfer.
Поток транзакции остаётся тем же: Инициация перевода -> Выполнение перевода -> Проверка перевода.
Если нет необходимости изменять данные Потребителя (например, адрес, телефон и т. д.), «Perform transfer request» для Repeat transfer можно отправить без необязательных параметров и со ссылками на карты отправителя и получателя вместо данных держателя карты. Если данные Потребителя требуется изменить, необходимо создать новую ссылку на исходную карту.
Если источник и/или назначение {clientCardId} используются в «запросе выполнения перевода», источник и/или назначение {serverCardId} должны быть включены в «ответ проверки Transfer» и подпись.
Если исходный {clientCardId} был сопоставлен с {serverCardId} в транзакции со значением {consumer.email}, новый «запрос на выполнение перевода» и «ответ проверки подписи» с этим {clientCardId} также должны содержать то же значение {consumer.email}.

Для процесса Repeat Transfer используйте следующие параметры источника средств в запросе Perform Transfer:

  1. {sourceOfFunds.reference.clientCardId}

  2. {sourceOfFunds.reference.securityCode}

Instead of:

  1. {sourceOfFunds.card.expiry.month}

  2. {sourceOfFunds.card.expiry.year}

  3. {sourceOfFunds.card.holder}

  4. {sourceOfFunds.card.holder.firstName}

  5. {sourceOfFunds.card.holder.lastName}

  6. {sourceOfFunds.card.number}

  7. {sourceOfFunds.card.securityCode}

Для получателя средств используйте {destinationOfFunds.reference.clientCardId} вместо {destinationOfFunds.card.number}.

@startuml
autonumber
title Мобильное Устройство - \nСсылка на карту для повторного перевода средств
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "SBC" as company
skinparam ParticipantPadding 80
== Последняя стадия верификации карты \nили перевода средств ==
party <- company: Запрос на уведомление \nсравнения карты
note right
serverCardId
end note
party --> company: Ответ уведомления \nсравнения карты
party --> party: Создание clientCardId для serverCardId
party -> mobile: Хранение ссылки в приложении \nили отправка по запросу
note right
clientCardId
end note
== Новый перевод средств ==
mobile -> party: Запрос на инициацию \nперевода средств
mobile <-- party: Ответ на инициацию \nперевода средств
mobile -> company: Обработка перевода средств
note left
clientCardId
end note
mobile <-- company: Ответ обработки \nперевода средств
party <- company: Проверка запроса \nна перевод средств
note right
clientCardId
end note
party --> company: Проверка ответа \nперевода средств
note left
serverCardId
end note
company -> company: Обработка перевода средств
@enduml

(1,2) SBC отправляет на сервер/прокси Присоединяющейся стороны уведомление сопоставления карты Transfer с созданной на её стороне ссылкой на карту — {serverCardId}. Для реализации запроса уведомления сопоставления карты Transfer см. Уведомление сопоставления карты Transfer.
(5,6) Чтобы инициировать перевод средств, приложение Присоединяющейся стороны отправляет {accessToken} с суммой транзакции и другими параметрами устройства на сервер Присоединяющейся стороны; они используются для начала сессии с уникальными случайными {nonce} и зашифрованной {signature}. Для инициирования запроса Transfer см. Initiate Transfer.
(7,8) На этом этапе приложение Присоединяющейся стороны отправляет данные держателя карты, устройства, сеанса и другие параметры напрямую в SBC для перевода средств с карты на карту. См. Perform Transfer.
(9,10) Check transfer используется в целях безопасности и позволяет SBC сравнить данные приложения Присоединяющейся стороны с данными на сервере Присоединяющейся стороны. О реализации запроса см. Check Transfer.

Consumer Defined Transfer Rates Flow

Тарифы Transfer, заданные потребителем, — необязательная функция, позволяющая отправителю выбрать наиболее подходящую сумму комиссии для транзакции Transfer из нескольких доступных шлюзов поставщиков платежей.
Возможность такой функции зависит от интеграции. Пожалуйста, уточните детали у менеджера поддержки.
При включении этой функции поток Transfer расширяется:
  1. Если Check transfer выполнен успешно, SBC приостанавливает обработку, включает список возможных комиссий в следующий ответ статуса Transfer и ожидает подтверждения от потребителя.

  2. Клиент выбирает наиболее подходящую комиссию из списка в приложении Присоединяющейся стороны.

  3. Приложение Присоединяющейся стороны отправляет выбранный шлюз (используя его алиас-имя assignedId) в запросе Complete transfer к SBC.

  4. SBC продолжает обрабатывать транзакцию на выбранном шлюзе.

@startuml
autonumber
title Тарифы на перевод средств, утверждённые Клиентом
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "SBC" as company
== Перевод средств успешно проверен ==
company -> company : Остановка транзакции
loop пока окончательный перевод средств не отправлен
mobile -> company: Запрос статуса \nперевода средств
note left
session token
end note
mobile <-- company: Ответ статуса \nперевода средств
note right
state=TRANSFER_FEE_REQUEST
transferFeeList
end note
end
mobile -> client: Запрос на выбор комиссии
mobile <-- client: Комиссия выбрана
mobile -> company: Запрос на завершение \nперевода средств
    note left
    assignedId
    end note
mobile <-- company: Ответ на завершение \nперевода средств
company -> company: Продолжение обработки
@enduml

(2,3) Запрос статуса перевода выполняется приложением Присоединяющейся стороны к SBC для получения статуса транзакции Transfer. Чтобы реализовать запрос статуса перевода, см. Статус Transfer. Ответ статуса Transfer включает параметр state со значением TRANSFER_FEE_REQUEST и объект transferFeeList со списком комиссий для возможных шлюзов обработки. Каждый шлюз обработки представлен собственным псевдонимом в параметре assignedId. Значение TRANSFER_FEE_REQUEST в параметре state существует только в потоке «Тарифы Transfer, заданные потребителем». Указанные параметры могут отсутствовать в первом ответе статуса Transfer, поэтому приложение Присоединяющейся стороны должно продолжать опрос статуса транзакции. Когда транзакция достигнет состояния TRANSFER_FEE_REQUEST, обработка останется приостановленной до отправки запроса завершения перевода.
(6,7) Для реализации запроса Complete transfer см. Complete transfer.