.. meta:: :description: Server-to-server Preauth, Capture и Cancel в API SBC: блокировка, списание или разблокировка средств напрямую через API с полной поддержкой 3DS Challenge. .. _3DS_server_to_server_Preauth_Capture_and_Cancel: Предавторизация, Capture и Cancel сервер-сервер ============================================ .. role:: ex .. role:: code Введение ------------ | Preauth (предавторизация) — это тип транзакции, при котором банк блокирует указанную сумму на карточном счёте Плательщика и не позволяет держателю карты использовать заблокированные средства. Важно отметить, что блокировка сохраняется в течение определённого периода времени, зависящего от типа карты — дебетовая или кредитная (обычно максимальный срок блокировки составляет 7 дней для дебетовых карт и 28 дней для кредитных). В сценарии Server-to-server Preauth данные карты передаются непосредственно в инициирующем запросе. | | См. определения терминов (Присоединяющаяся Сторона, 3DS Method и т.д.) в :ref:`Глоссарии`. | | :ref:`Capture` — транзакция, следующая за Preauth, которая списывает заблокированную сумму с карты Плательщика. | :ref:`Cancel` — операция, обратная Capture, которая отменяет списание и возвращает заблокированную сумму на карту Плательщика. .. _3DS Сценарий Preauth: Сценарий Preauth ------------ .. uml:: :align: center skinparam roundcorner 20 skinparam sequenceArrowThickness 1 skinparam maxmessagesize 1200 skinparam sequenceParticipant underline actor Плательщик participant "Присоединяющаяся Сторона" as A participant SBC as B autonumber Плательщик -> A: Инициализация activate A A -> B: /api/v2/preauth/ activate B B --> A: ИД транзакции B -> B: Обработка\nпреавторизации hnote over Плательщик,B : См. Схема прохождения 3DS group Получение финального статуса == Получение обратного вызова Присоединяющейся Стороны == A <- B: Обратный вызов с финальным статусом A --> B: HTTP 200 deactivate B == Запрос статуса == A -> B: Получение статуса по ИД транзакции activate B B --> A: Конечный статус deactivate B end A --> Плательщик: Конечный статус deactivate Плательщик deactivate A | (2) Для реализации запроса на преавторизацию см. :ref:`/api/v2/preauth/`. По умолчанию 3DS инициируется и выполняется платежным шлюзом через :ref:`Упрощенную схему аутентификации`. См. :ref:`Схему принятия решения по 3DS<3ds_server_to_server_preauth_reference>`. | (5) Для реализации обратного вызова с обработкой финального статуса см. :ref:`Обратный вызов Присоединяющейся Стороны`. | (7) Для реализации запроса статуса заказа см. :ref:`/api/v2/status/`. Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус. .. _3ds_server_to_server_preauth_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:`Simplified authentication flow with html page`. | (5) То же, что и пункт (1). .. note:: «:ref:`Схема принятия решения по 3DS<3ds_server_to_server_preauth_reference>` демонстрирует процесс инициирования и выполнения 3DS платежным шлюзом. Для ознакомления с другими сценариями реализации 3DS, пожалуйста, изучите :ref:`Обзор 3DS<3ds_implementation_scenarios>` и свяжитесь с менеджером поддержки». .. _Non3D_Preauth: Сценарий без 3DS ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Оплата считается проведённой без прохождения 3DS (без 3DS аутентификации) при нижеприведённых условиях: | 1. были выполнены шаги 1-2-(5)-6 из :ref:`3DS decision making schema<3ds_server_to_server_sale_reference>`. | 2. Отсутствие параметров :code:`tds_status`, :code:`html` и :code:`redirect-to`. | 3. Транзакция получила финальный статус (approved, declined, error, filtered). .. note:: Транзакции со статусом «unknown» могут показываться как транзакции, прошедшие 3DS, так и как транзакции без прохождения 3DS. Детальнее о статусах транзакций см. :ref:`Статусы`. .. _simplified_authentication_flow_preauth: Упрощённый процесс аутентификации ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. 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). .. _Capture_server: Сценарий списания ------------- .. uml:: :align: center skinparam roundcorner 20 skinparam sequenceArrowThickness 1 skinparam maxmessagesize 100 skinparam sequenceParticipant underline actor Плательщик participant "Присоединяющаяся Сторона" as A participant "Платёжный Шлюз" as B hnote over Плательщик,B : Успешная транзакция преавторизации autonumber == Списание == group Опционально Плательщик -> A: Инициация списания activate Плательщик activate A end A -> B: api/v2/capture activate B B --> A: ИД транзакции B -> B: Обработка списания group Получение финального статуса == Получение обратного вызова == A <- B: Обратный вызов с финальным статусом A --> B: HTTP 200 deactivate B == Запрос статуса == A -> B: Получение статуса по ИД транзакции api/v2/status activate B B --> A: Ответ со статусом, Order-stage deactivate B end group Опционально A --> Плательщик: Конечный статус deactivate Плательщик deactivate A end | (1) Списание может быть инициировано Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика. | (2) Для имплементации запроса на списание см. :ref:`/api/v2/capture/`. | (5) Обратный вызов по списанию будет отправлен только в случае, если :ex:`notify_url` был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для списаний на уровне терминала. Если в запросе предавторизации был предоставлен :ex:`server_callback_url`, обратный вызов по списанию не будет отправлен. Для обработки обратных вызовов см. :ref:`Обратный вызов Присоединяющейся Стороны`. | (7) Для реализации запроса статуса заказа см. :ref:`/api/v2/status/`. Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус. | (9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика. .. _Cancel_server: Сценарий отмены ------------ .. uml:: :align: center skinparam roundcorner 20 skinparam sequenceArrowThickness 1 skinparam maxmessagesize 100 skinparam sequenceParticipant underline actor Плательщик participant "Присоединяющаяся Сторона" as A participant "Платёжный Шлюз" as B hnote over Плательщик,B : Успешная транзакция преавторизации autonumber == Отмена == group Опционально Payer -> A: Инициация отмены activate Плательщик activate A end A -> B: api/v2/return activate B B --> A: ИД транзакции B -> B: Обработка отмены group Получение финального статуса == Получение обратного вызова == A <- B: Обратный вызов с финальным статусом A --> B: HTTP 200 deactivate B == Запрос статуса == A -> B: Получение статуса по ИД транзакции api/v2/status activate B B --> A: Ответ со статусом, Order-stage deactivate B end group Опционально A --> Плательщик: Конечный статус deactivate Плательщик deactivate A end | (1) Отмена предавторизации может быть вызвана Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика. | (2) Для имплементации запроса на отмену см. :ref:`/api/v2/return/`. | (5) Обратный вызов по отмене будет отправлен только в случае, если :ex:`notify_url` был предоставлен в инициирующем запросе предавторизации или дополнительный обратный вызов установлен на предоставленный URL для отмен на уровне терминала. Если в запросе предавторизации был предоставлен :ex:`server_callback_url`, обратный вызов по отмене не будет отправлен. Для обработки обратных вызовов см. :ref:`Обратный вызов Присоединяющейся Стороны`. | (7) Для реализации запроса статуса заказа см. :ref:`/api/v2/status/`. Статус следует запрашивать несколько раз с интервалом 3-5 секунд, пока в ответе не будет получен финальный статус. | (9) Конечный статус может быть предоставлен Присоединяющейся Стороной в соответствии с бизнес-моделью или по запросу Плательщика. .. ifconfig:: "doc.payneteasy.com" in site_link ---- .. admonition:: See also :class: related-cross-link `Authorize-and-capture flows on the Payneteasy gateway → `_ .. ifconfig:: "doc.payneteasy.ru" in site_link ---- .. admonition:: См. также :class: related-cross-link `Авторизация и подтверждение платежей через шлюз → `_