.. meta:: :description: Одноранговый перевод сервер—сервер в API SBC: перевод средств между двумя картами через API с аутентификацией источника 3DS и проверкой получателя. .. _server_to_server_transfer: Прямой перевод средств ######################### .. role:: ex .. role:: code Введение ------------ .. _possible_transfer_use_cases: | Перевод - это тип комплексной оплаты, которая позволяет перечислять средства между банковскими картами (:ref:`PAN`), карточными токенами (:ref:`RPI`) и банковским аккаунтом Присоединяющейся Стороны (:ref:`Депозит`). | | См. определения терминов (Присоединяющаяся Сторона, 3DS Method и т.д.) в :ref:`Глоссарии`. | | Возможные сценарии переводов: .. list-table:: :widths: 25, 75 :header-rows: 0 :class: longtable * - PAN to PAN - Перевод PAN to PAN происходит при перечислении средств с одной банковской карты на другую с указанием карточных номеров (не ссылочных идентификаторов). * - PAN to RPI - Перевод PAN to RPI происходит при перечислении средств с банковской карты с указанным номером карты на другую банковскую карту с указанным ссылочным идентификатором. * - RPI to PAN - Перевод RPI to PAN происходит при перечислении средств с банковской карты с указанным ссылочным идентификатором на другую банковскую карту с указанным номером карты. * - RPI to RPI - Перевод RPI to RPI происходит при перечислении средств с одной банковской карты на другую с указанием ссылочных идентификаторов карт (не номеров). * - Описание: deposit to PAN - Перевод Описание: deposit to PAN происходит при перечислении средств с аккаунта Присоединяющейся Стороны на банковскую карту с указанием номера карты. * - Описание: deposit to PRI - Перевод Описание: deposit to PRI происходит при перечислении средств с аккаунта Присоединяющейся Стороны на банковскую карту с указанием ссылочного идентификатора карты. .. _transfer_definitions: Сценарий Переводов ------------------ .. uml:: :align: center skinparam roundcorner 20 skinparam sequenceArrowThickness 2 skinparam ParticipantPadding 30 autonumber actor Отправитель as Payer participant "Присоединяющаяся Сторона" as A participant "Платёжный Шлюз" as B Payer -> A: Инициализация activate A == Запрос на перевод средств == A -> B: api/v4/transfer activate B B --> A: ИД транзакции B -> B: Обработка платежа hnote over Payer,B : См. Схема прохождения 3DS group Получение финального статуса == Получение обратного вызова \nПрисоединяющейся Стороны == A <- B: Обратного вызов с конечным статусом B <-- A: HTTP 200 deactivate B == Запрос статуса == A -> B: Получение статуса по ИД транзакции activate B B --> A: Конечный статус deactivate B end A --> Payer: Показ результата deactivate A | (1) Перевод между картами инициируется Отправителем. Перевод с Присоединяющейся Стороны (депозиты) инициируется Получателем по тому же сценарию. | (2) Для имплементации запроса на перевод см. :ref:`/api/v4/transfer/`. По умолчанию 3DS инициируется и выполняется платежным шлюзом через :ref:`Упрощенную схему аутентификации`. См. :ref:`Схему принятия решения по 3DS<3ds_server_to_server_transfer_reference>`. Для случаев Deposit to PAN и Deposit to RPI 3DS не инициируется (используется сценарий :ref:`Сценарий оплаты без 3DS`). | (5) Для имплементации обратного вызова с обработкой финального статуса см. :ref:`Обратный вызов Присоединяющейся Стороны`. | (7) Для имплементации запроса статуса, см. :ref:`/api/v2/status/`. Статус должен запрашиваться несколько раз с интервалами в 3-5 секунд до получения финального статуса в ответе. .. _3ds_server_to_server_transfer_reference: Схема прохождения 3DS -------------------------------------------------- .. uml:: :align: center title Схема прохождения 3DS start : (1) Send **/api/v2/status** request\nwith orderid=**paynet-order-id**\nProcess **/api/v2/status** response; while ((2) Check If **status** response field equals\nto finished status values\n**status** == approved\nOR **status** == declined\nOR **status** == error\nOR **status** == unknown\nOR **status** == filtered) is (NO); switch ((3) **html** and **redirect-to** field is present) case (YES) #Plum :(4) Create Wait HTML Page\nwhich redirects to result page\n(3DS 2.x or 1.0.2 to be applied)\n\nSee Simplified authentication flow; case (NO) endswitch backward:(5) Send new\n**/api/v2/status** request\nProcess\n**/api/v2/status** response; endwhile (YES) :(6) Show result page to the Payer; stop legend left =Legend | Color | Implementation responsibility | |<#Turquoise>| Connecting party | |<#Plum>| Connecting and other party | | | Other Party | endlegend Присоединяющаяся сторона должна реализовать все шаги, отмеченные зелёным и фиолетовым цветом. Ниже приведены описания шагов со ссылками на API-команды в соответствии с номером шага. | (1) Для реализации запроса статуса заказа см. :ref:`/api/v2/status/`. Статус следует запрашивать несколько раз с интервалом 3-5 секунд до получения финального статуса в ответе. | (4) Если ячейки html и redirect-to присутствуют, см. :ref:`Упрощённый сценарий аутентификации с html страницей` | (5) То же, что и пункт (1). .. note:: «:ref:`Схема принятия решения по 3DS<3ds_server_to_server_transfer_reference>` демонстрирует процесс инициирования и выполнения 3DS платежным шлюзом. Для ознакомления с другими сценариями реализации 3DS, пожалуйста, изучите :ref:`Обзор 3DS<3ds_implementation_scenarios>` и свяжитесь с менеджером поддержки». .. _Non3D_Transfer: Сценарий без 3DS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Оплата считается проведённой без прохождения 3DS (без 3DS аутентификации) при нижеприведённых условиях: | 1. Соблюдены шаги 1-2-(5)-6 :ref:`Схемы Прохождения 3DS<3ds_server_to_server_sale_reference>`. | 2. Отсутствие параметров :code:`tds_status`, :code:`html` и :code:`redirect-to`. | 3. Транзакция получила финальный статус (подтверждено, отклонено, ошибка, отфильтровано). .. note:: Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. :ref:`Статусы`. .. _transfer_simplified_authentication_flow: Упрощённый процесс аутентификации ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. uml:: :align: center title Упрощённый процесс аутентификации start #Turquoise:(1) Send **/api/v2/status/** API request; #Turquoise:(2) Process **/api/v2/status/** response. Gather: **html** parameter; fork #Turquoise:(3)Gather **html** parameter; #Turquoise:(4) Return content from **html** parameter to the Payer's browser as is; forkagain #Turquoise:(5)Gather **redirect-to** parameter; #Turquoise:(6)Redirect Payer to redirect URL; endfork :(7) Payer's browser gets redirected to ACS and Payer passes either 3DS 1.0.2 or 3DS 2.X flow.; :(8) Payer's browser gets redirected back to **redirect_url** provided in the initial **api/v2/sale/** request.; #Turquoise:(9) Process Payer's Browser final redirect to **redirect_url**.; #Turquoise:(10) Return Wait HTML Page to the Payer's browser; fork note left **Wait HTML Page** lifecycle end note repeat #Turquoise: (11) Request Connecting Party Server on the status of the transaction; #Turquoise: (12) Process transaction status; repeat while ((13) Received finished status\n(approved, declined, error, filtered or unknown)?) is (no) -> (yes); #Turquoise:(14) Redirect Payer's browser to the result page; fork again note left **Connecting Party Server** lifecycle end note #Turquoise:(15) Send **/api/v2/status/** API request; #Turquoise:(16) Process **/api/v2/status/** response \nand follow **Схема прохождения 3DS** to analyze status response; end fork stop legend left =Legend | Color | Implementation responsibility | |<#Turquoise>| Connecting party | | | Other Party | endlegend | (1) и (2). Для имплементации запроса статуса заказа, см. :ref:`/api/v2/status/`. | (9) Для инициации финального перенаправления см. :ref:`Финальное перенаправление`. | (10) HTML-страница ожидания в контуре Присоединяющейся Стороны может иметь произвольный дизайн и должна взаимодействовать с сервером Присоединяющейся Стороны в соответствии с диаграммой. | (15) и (16) то же, что и (1) и (2). .. ifconfig:: "doc.payneteasy.com" in site_link ---- .. admonition:: See also :class: related-cross-link `Card-to-card transfers for fintech apps → `_ .. ifconfig:: "doc.payneteasy.ru" in site_link ---- .. admonition:: См. также :class: related-cross-link `Финтех-решения: переводы карта-карта → `_