1.25. Mobile Device Transfer

Introduction

Mobile device transfer can be performed with cardholder data of sender and receiver of funds or with card reference, previously made with card verification process or in previous transfer/sale transactions.

See terms definitions in Glossary.

Transfer Flow

@startuml
autonumber
title Мобильное приложение - \nПеревод стредств с карты 3-DS
skinparam ParticipantPadding 70
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Payneteasy" 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) To perform authentication of Consumer in Connecting Party’s app, Connecting Party can use any method which fits best to their needs. As a result, Connecting Party’s server generates {accessToken} and provides it to Connecting Party’s app. This parameter will be used to start and continue session.
(4,5) To initiate funds transfer, Connecting Party’s app sends {accessToken} with transaction amount and other device parameters to Connecting Party’s server, which are used to start a session with unique random {nonce} and encrypted {signature}. To initiate transfer request see Initiate Transfer.
(6,7) On this stage Connecting Party’s app sends cardholder, device, session data and other parameters straight to Payneteasy to perform funds transfer from card to card. To implement perform transfer request see Perform Transfer.
(8,9) Check transfer is used for security purposes and allows Payneteasy to compare the data sent by Connecting Party’s app with the data stored on Connecting Party’s server. To implement check transfer request see Check Transfer.
(11,12,21,22) Funds transfer status request is made by Connecting Party’s app to Payneteasy to get the status of transfer transaction. To implement transfer status request see Status Transfer.
(19,20) Payneteasy sends Transfer card mapping notification request to Connecting Party’s server/proxy with created on its side card reference - {serverCardId}. To implement transfer card mapping notification request see Transfer card mapping notification.
(23,24) Connecting Party specified a callback URL, Payment Gateway sends message to the callback URL whenever transaction reaches final status, no matter if the result is approved, declined or other final status. See more Callbacks.

Repeat Transfer Flow

After successful Card mapping procedure, new transfers with the same cardholder data can be done easier for Consumer.
Connecting Party’s app makes new transfer requests using {clientCardId} instead of source and/or destination cardholder data. Payneteasy sends these {clientCardId} to Connecting Party’s server in “Check transfer request” and gets mapped to it {serverCardId} in “Check transfer response” from Connecting Party’s server. These {serverCardId} are used to continue the processing of transfer transaction.
Transaction flow remains the same: Initiate Transfer -> Perform Transfer -> Check Transfer.
If there is no need to change Consumer’s data (such as address, phone, etc.), “Perform transfer request” for Repeat transfer may be sent without any optional parameters and with card references for sender and receiver instead of cardholder data. If Consumer’s data has to be changed, new source card reference must be created.
If source and/or destination {clientCardId} are used in “Perform transfer request”, source and/or destination {serverCardId} must be included in “Transfer check response” and signature.
If source {clientCardId} was mapped to {serverCardId} in transaction with included {consumer.email} value, new “Perform transfer request” and “Check signature response” with this {clientCardId} must also contain the same {consumer.email} value.

For Repeat Transfer Flow use the following source of funds parameters in Perform Transfer request:

  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}

For destination of funds use {destinationOfFunds.reference.clientCardId} instead of {destinationOfFunds.card.number}.

@startuml
autonumber
title Мобильное Устройство - \nСсылка на карту для повторного перевода средств
participant "Мобильное приложение" as mobile
participant "Сервер \nПрисоединяющейся Стороны" as party
participant "Payneteasy" 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) Payneteasy sends Transfer card mapping notification request to Connecting Party’s server/proxy with created on its side card reference - {serverCardId}. To implement transfer card mapping notification request see Transfer card mapping notification.
(5,6) To initiate funds transfer, Connecting Party’s app sends {accessToken} with transaction amount and other device parameters to Connecting Party’s server, which are used to start a session with unique random {nonce} and encrypted {signature}. To initiate transfer transfer request see Initiate Transfer.
(7,8) On this stage Connecting Party’s app sends cardholder, device, session data and other parameters straight to Payneteasy to perform funds transfer from card to card. To implement perform transfer request see Perform Transfer.
(9,10) Check transfer is used for security purposes and allows Payneteasy to compare the data sent by Connecting Party’s app with the data stored on Connecting Party’s server. To implement check transfer request see Check Transfer.

Consumer Defined Transfer Rates Flow

Consumer defined transfer rates is an optional feature which allows the sender to choose the most suitable commission amount for his transfer transaction between several available payment provider gates.
The possibility of such feature depends on the integration. Please ask support manager for details.
When such feature is enabled, the Transfer Flow extends:
  1. If Check transfer has been successful, Payneteasy pauses the processing, includes the list of possible commissions to next Transfer status response and awaits for confirmation from the Consumer.

  2. Consumer selects the most suitable commission from the list in the Connecting Party’s app.

  3. Connecting Party’s app sends the selected gate (using its assignedId aliased name) in Complete transfer request to Payneteasy.

  4. Payneteasy continues to process the transaction on the selected gate.

@startuml
autonumber
title Тарифы на перевод средств, утверждённые Клиентом
participant "Клиент" as client
participant "Мобильное приложение" as mobile
participant "Payneteasy" 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) Funds transfer status request is made by Connecting Party’s app to Payneteasy to get the status of transfer transaction. To implement transfer status request see Status Transfer. Transfer status response includes the state parameter with TRANSFER_FEE_REQUEST value and the transferFeeList object with a list of commissions for possible processing gates. Each processing gate is represented by it’s own aliased name in assignedId parameter. TRANSFER_FEE_REQUEST value in state parameter exists only in “Consumer defined transfer rates” flow. The mentioned parameters may not be presented in first Transfer status response, so Connecting Party’s app should continue polling the transaction status. When the transaction reaches TRANSFER_FEE_REQUEST state, the processing will remain paused until Complete transfer request is sent.
(6,7) To implement Complete transfer request see Complete transfer.