Тікелей біріктіру
- Интернет-дүкеннің тікелей өзінің веб-сайты арқылы карта деректерін жинауға арналған жеке меншікті төлем беті болады. Интернет-дүкен кейбір тауарларды әр ай сайын мерзімді жеткізіп тұрады.
- Бірінші қадам — картада қаражатты кейінге сақтап қойып, тауар бірнеше күннен кейін нақты жіберілген кезде соманы «аудару».
Егер тауар бүлінген күйде келсе, онда интернет-дүкен қаражатты ішінара қайтаруды бастайды.
Жеткізулер мерзімді түрде орындалатындықтан, интернет-дүкен карта иелері үшін жазылымдарды ұсынып, олардың карталарынан қаражатты автоматты түрде есептен шығару қызметін қоса алады (cardholder not present).
Қаражаттарды резервтеу және байлаулы картасын құру
- Клиент Интернет-дүкенде өнімді таңдап, Сатып алу түймесіне басады.
- Интернет-дүкеннің сервері сатып алуға сұратымды алып, төлем бетін ашады.
- Сатып алушы интернет-дүкеннің төлем бетінде өз картасының деректерін енгізеді.
- Интернет-дүкеннің сервері карта деректерін жинайды.
- Интернет-дүкеннің сервері
clientId
нөмірімен тапсырысты тіркейді, сосын төлем шлюзіне деректерді жібереді.
- Төлем шлюзі ACS серверіне қатынасуға рұқсат алу үшін Directory Server-мен өзара әрекет етеді. Ол ACS серверінен интернет-дүкенге қайта бағыттау үшін қажетті барлық деректерді қайтарады.
- Интернет-дүкеннің сервері төлем шлюзіне клиентті қайта бағыттайды.
- Төлем шлюзі клиентті ACS серверіне қайта бағыттайды.
- Карта иесі тапсырысты растайды, сосын ACS сервері оны төлем шлюзіне қайта бағыттайды.
- Клиент Интернет-дүкеннің бетіне қайта оралады немесе браузердің қойыншасын жабады.
- Төлем шлюзі кері қоңырау шалу туралы хабарландыруды интернет-дүкеннің серверіне бейсинхронды түрде жібереді.
- Интернет-дүкеннің сервері тапсырыстың күйін тексереді, нәтижесінде, кейінгі рекуррентті төлемдерде пайдаланылатын
bindingId
алады.
clientId тапсырысты тіркеу
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/registerPreAuth.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data amount=2000 \
--data currency=978 \
--data userName=test_user \
--data password=test_user_password \
--data returnUrl=finish.html \
--data description=my_second_order \
--data clientId=659753456 \
--data 'jsonParams={"recurringFrequency": "5", "recurringExpiry": "20240101"}' \
--data language=en
{
"orderId": "017908cc-57c6-739a-ad25-df0d00a7d8c0",
"formUrl": "https://3dsec.berekebank.kz/payment/merchants/rbs/payment_en.html?mdOrder=017908cc-57c6-739a-ad25-df0d00a7d8c0"
}
paymentOrder сұратымының әдісі
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/paymentorder.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data MDORDER=019dbf02-e9f4-7fe2-b1c2-d50500a7d8c0 \
--data '$PAN=4012001038166662' \
--data '$CVC=123' \
--data YYYY=2024 \
--data MM=12 \
--data 'TEXT=TEST CARDHOLDER' \
--data 'ip=185.230.240.201' \
--data language=en
{
"info": "Your order is proceeded, redirecting...",
"errorCode": 0,
"acsUrl": "https://web.rbsuat.com/acs/auth/start.do",
"paReq": "eJxVUtFu4jAQ/BWU92DHcSCpFle946ryAEd7FKl9OZl4gbSNA05ypP36s0NSWsmSd8br3fGO4brJ3wb/0JRZoSdeMKTeAHVaqEzvJt7j6taPvWsBq71BnP7BtDYoYI5lKXc4yNTEG48kj5KN8jfxOPH5NqZ+kiTURxYlSEMaxtvUE7C8ecCjgK6RsH2GDEgPbUWT7qWuBMj0+GO2EJyNR5QC6SDkaGZTEfGQhRzIGYGWOYpSarUpmr95VwJIS0Na1Loy72LEQyA9gNq8iX1VHa4IqbCshmmRA3EkkIuGZe2i0hZpMiUWH/en39NZs3j5xearHZ+vnk6LD7tPnyZAXAYoWaFglAWUB8mAjq/simIgLQ8yd93tefugM4CD63Hz9eQrA3bQxvrQy+8RYHMoNLo7QD5jeHDGCNgaPNZtXgTkAgC1OmdYiZwGNLB3ewpIv19e/fPO+ZBWdsYvxamWr6rcnNaqWMuQrbF+zqLlXbQ7OHfaJKcqs9NlPDjLcgCIK0M640n3Z2z07S/9Bypv08k=",
"termUrl": "https://3dsec.berekebank.kz/payment/rest/finish3ds.do?lang=en"
}
ACS серверіне қайта бағыттау
Интернет-дүкен paReq
, MD
(MDORDER
мәнімен бірдей) және termUrl
параметрлерін POST әдісімен acsUrl
серверіне жіберуі қажет.
Балама ретінде Интернет-дүкен карта иесін ACS эмитентіне дәл сондай қайта бағыттауды орындайтын acsRedirect
шлюз әдісін пайдалануы мүмкін.
https://3dsec.berekebank.kz/payment/acsRedirect.do?orderId=017908cc-57c6-739a-ad25-df0d00a7d8c0
Тапсырыс күйін алу және bindingId
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/getOrderStatusExtended.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data orderId=017908cc-57c6-739a-ad25-df0d00a7d8c0 \
--data language=en
{
"errorCode": "0",
"errorMessage": "Success",
"orderNumber": "11044",
"orderStatus": 1,
"actionCode": 0,
"actionCodeDescription": "",
"amount": 2000,
"currency": "978",
"date": 1618815949170,
"orderDescription": "my_second_order",
"ip": "185.230.240.201",
"merchantOrderParams": [
{
"name": "browser_language_param",
"value": "en"
},
{
"name": "recurringExpiry",
"value": "20240101"
},
{
"name": "recurringFrequency",
"value": "5"
},
{
"name": "browser_os_param",
"value": "UNKNOWN"
},
{
"name": "user_agent",
"value": "curl/7.75.0"
},
{
"name": "browser_name_param",
"value": "DOWNLOAD"
}
],
"transactionAttributes": [],
"attributes": [
{
"name": "mdOrder",
"value": "017908cc-57c6-739a-ad25-df0d00a7d8c0"
}
],
"cardAuthInfo": {
"maskedPan": "401200**6662",
"expiration": "202412",
"cardholderName": "TEST CARDHOLDER",
"approvalCode": "123456",
"pan": "401200**6662"
},
"bindingInfo": {
"clientId": "659753456",
"bindingId": "0162d467-bbfe-77f3-9c21-415c00a7d8c0"
},
"authDateTime": 1618816213981,
"terminalId": "123456",
"authRefNum": "012851192298",
"paymentAmountInfo": {
"paymentState": "APPROVED",
"approvedAmount": 2000,
"depositedAmount": 0,
"refundedAmount": 0
},
"bankInfo": {
"bankCountryCode": "UNKNOWN",
"bankCountryName": "<Unknown>"
}
}
Тауарлар іс жүзінде тиелген кезде қаражатты есептен шығару жүргізіледі
- Интернет-дүкеннің қызметкері интернет-дүкеннің жеке кабинетінде тапсырысты таңдайды.
- Интернет-дүкеннің басқару панелі есептен шығаруға сұратымды өзінің серверіне жібереді.
- Интернет-дүкеннің сервері
deposit.do
сұратымын жібереді.
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/deposit.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data amount=2000 \
--data orderId=017908cc-57c6-739a-ad25-df0d00a7d8c0 \
--data language=en
{
"errorCode": "0",
"errorMessage": "Success"
}
Бірнеше күннен кейін сатушы бүлінген күйінде жеткізілген тауарлар үшін қаражатты ішінара қайтаруды бастайды.
- Интернет-дүкеннің қызметкері интернет-дүкеннің жеке кабинетінде тапсырысты таңдайды.
- Интернет-дүкеннің басқару панелі қайтаруға сұратымды өзінің серверіне жібереді.
- Интернет-дүкеннің сервері
refund.do
сұратымын жібереді.
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/refund.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data orderId=017908cc-57c6-739a-ad25-df0d00a7d8c0 \
--data amount=2000 \
--data language=en
{
"errorCode": "0",
"errorMessage": "Success"
}
Сатушы ай сайынғы тұрақты төлемді іске қосады
- Интернет-дүкеннің сервері тапсырысты тіркейді, сосын
bindingId
көрсету арқылы төлемді іске қосады.
- Интернет-дүкен төлемнің күйін тексеруі немесе қол қойылған callback-хабарландыруды күтуі мүмкін.
Кейінгі рекуррентті төлемді тіркеу
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/register.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data amount=2000 \
--data currency=978 \
--data userName=test_user \
--data password=test_user_password \
--data returnUrl=finish.html \
--data clientId=259753456 \
--data description=my_first_order \
--data language=en \
--data features=AUTO_PAYMENT
{
"orderId": "01791274-d9ca-7103-b148-7dc000a7d8c0",
"formUrl": "https://3dsec.berekebank.kz/payment/merchants/rbs/payment_en.html?mdOrder=01791274-d9ca-7103-b148-7dc000a7d8c0"
}
Тапсырысты тіркеуге берген formUrl
жауабында елемеуге болады. Рекуррентті төлеу үшін ол қажет емес.
Сосын, рекуррентті төлемді аяқтау үшін өзіңіздің серверіңізден paymentOrderBinding.do
сұратымын жіберіңіз.
bindingId идентификаторымен рекуррентті төлем
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/paymentOrderBinding.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data mdOrder=01791274-d9ca-7103-b148-7dc000a7d8c0 \
--data bindingId=01491394-63a6-7d45-a88f-7bce00a7d8c0 \
--data ip=1d0d:db8:6:1::77 \
--data language=en
{
"redirect": "https://3dsec.berekebank.kz/payment/merchants/rbs/finish.html?orderId=01791274-d9ca-7103-b148-7dc000a7d8c0&lang=en",
"info": "Your order is proceeded, redirecting...",
"errorCode": 0
}
Кейінгі рекуррентті төлемнің күйін тексеру
curl --request POST \
--url https://3dsec.berekebank.kz/payment/rest/getOrderStatusExtended.do \
--header 'content-type: application/x-www-form-urlencoded' \
--data userName=test_user \
--data password=test_user_password \
--data orderId=01791274-d9ca-7103-b148-7dc000a7d8c0 \
--data language=en
{
"errorCode": "0",
"errorMessage": "Success",
"orderNumber": "11045",
"orderStatus": 2,
"actionCode": 0,
"actionCodeDescription": "",
"amount": 2000,
"currency": "978",
"date": 1618816612879,
"orderDescription": "my_first_order",
"ip": "1d0d:db8:6:1::77",
"merchantOrderParams": [
{
"name": "browser_language_param",
"value": "en"
},
{
"name": "browser_os_param",
"value": "UNKNOWN"
},
{
"name": "user_agent",
"value": "curl/7.75.0"
},
{
"name": "browser_name_param",
"value": "DOWNLOAD"
}
],
"transactionAttributes": [],
"attributes": [
{
"name": "mdOrder",
"value": "01791274-d9ca-7103-b148-7dc000a7d8c0"
}
],
"cardAuthInfo": {
"maskedPan": "555555**5599",
"expiration": "202412",
"cardholderName": "TEST CARDHOLDER",
"approvalCode": "123456",
"pan": "555555**5599"
},
"bindingInfo": {
"clientId": "259753456",
"bindingId": "01491394-63a6-7d45-a88f-7bce00a7d8c0"
},
"authDateTime": 1618816705914,
"terminalId": "123456",
"authRefNum": "947633173729",
"paymentAmountInfo": {
"paymentState": "DEPOSITED",
"approvedAmount": 2000,
"depositedAmount": 2000,
"refundedAmount": 0
},
"bankInfo": {
"bankCountryCode": "UNKNOWN",
"bankCountryName": "<Unknown>"
}
}
Прямые платежи (расширенная схема с 3DS2)
Общее описание
Платежный шлюз поддерживает аутентификацию с помощью протокола 3-D Secure v2 (3DS2), обновленной версии протокола 3-D Secure. Приведенная ниже схема содержит все возможные шаги 3DS2 аутентификации и позволяет настроить процесс интеграции максимально гибко.
Если вы используете платежную страницу на вашей стороне и хотите использовать аутентификацию клиента по протоколу 3DS2, для каждой транзакции вам необходимо отправить в платёжный шлюз следующую последовательность запросов:
- запрос оплаты, который инициирует аутентификацию по протоколу 3DS2,
- запросы 3DS-методов
threeDSMethodURLServer
и (опционально)threeDSMethodURL
, которые передают на 3DS сервер и ACS данные о браузере, в отдельном "iframe", - запрос continue.do для продолжения оплаты и получения данных для прохождения challenge на ACS,
- если клиент после аутентификации перенаправляется на страницу магазина, необходимо завершить платёж, отправив запрос finish3dsVer2Payment.do.
Детальное описание всех шагов смотрите в схеме интеграции.
Если вы собираете данные карты на своей стороне и не хотите, чтобы они присутствовали на вашем сервере, вам следует использовать seToken (Self Encrypted Token) — самоподписанный токен, используемый для безопасной передачи данных карты. Если вы используете seToken, соответствие PCI DSS не требуется.
Обратите внимание, что seToken может быть сгенерирован с помощью SDK.
Нажмите здесь, чтобы получить дополнительную информацию о seToken.
Проверка подлинности клиента на ACS
Протокол проверки подлинности 3DS2 в зависимости от настроек ACS банка-эмитента позволяет выполнить проверку подлинности без участия клиента. В этом случае от клиента не потребуется совершать действия для аутентификации, такие как ввод одноразового пароля.
Таким образом, после отправки запроса continue.do в зависимости от настроек ACS эмитента возможны два варианта развития событий:
- если клиенту не нужно аутентифицироваться на ACS, придёт ответ об оплате;
- если клиенту нужно аутентифицироваться на ACS, его браузер будет переадресован на страницу аутентификации, где он должен будет пройти проверку подлинности (схема challenge-response).
Схема интеграции
- Клиент выбирает продукт в интернет-магазине и нажимает на кнопку Купить.
- Сервер интернет-магазина получает запрос на покупку и открывает платежную страницу.
- Покупатель вводит данные своей карты на платежной странице интернет-магазина.
- Сервер интернет-магазина собирает данные карты.
-
Сервер интернет-магазина запрашивает регистрацию заказа, отправляя вызов API register.do. Этот запрос должен содержать параметр
amount
– сумму платежа в минимальных единицах валюты и параметрreturnUrl
– адрес, на который будет перенаправлен клиент после успешной оплаты на Шаге 9 (дополнительная информация о перенаправлении доступна здесь). В ответ платежный шлюз отправляетorderId
- уникальный номер заказа в системе платежного шлюза.Пример запроса на регистрацию заказа:
curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/register.do \ --header 'content-type: application/x-www-form-urlencoded' \ --data amount=2000 \ --data currency=398 \ --data userName=test_user \ --data password=test_user_password \ --data returnUrl=finish.html \ --data description=my_first_order \ --data language=ru
Пример ответа на регистрацию заказа:
{ "orderId": "0179018d-8f96-7fbe-bc2b-4b7e00a7d8c0", "formUrl": "https://3dsec.berekebank.kz/payment/merchants/pay/payment_en.html?mdOrder=0179018d-8f96-7fbe-bc2b-4b7e00a7d8c0" }
Также вы можете удерживать сумму на счете до списания средств с помощью вызова registerPreAuth.do. Чтобы узнать больше о холдировании и завершении, нажмите здесь.
-
Начало оплаты. Мерчант передает карточные данные путем отправки API запроса paymentorder.do в платежный шлюз (для оплаты также можно использовать другой платежный запрос, например, paymentOrderBinding.do, google/payment.do или google/paymentDirect.do). Запрос должен содержать параметр
MDORDER
- уникальный номер заказа в системе платежного шлюза, возвращенный в ответе на запросregister.do
.Платёжный шлюз проверяет на сервере 3DS возможность проведения аутентификации клиента по протоколу 3DSv2 и отправляет ответ. Если требуется 3DSv2 аутентификация, в ответе, в том числе, возвращаются следующие параметры, относящиеся к 3DSv2:
-
threeDSServerTransId
- идентификатор транзакции, присвоенный сервером 3DS -
threeDSMethodURLServer
- адрес сервера 3DS для сбора данных о браузере -
threeDSMethodURL
- (опционально) адрес сервера ACS для сбора данных о браузере -
threeDSMethodDataPacked
- (опционально) данные для сбора данных о браузере на ACS
Если параметры, относящиеся к 3DSv2, отсутствуют в ответе, шаги 7-9 пропускаются.
Пример запроса оплаты заказа:
curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/paymentorder.do \ --header 'content-type: application/x-www-form-urlencoded' \ --data userName=test_user \ --data password=test_user_password \ --data MDORDER=0179018d-8f96-7fbe-bc2b-4b7e00a7d8c0 \ --data '$PAN=4000001111111118' \ --data '$CVC=123' \ --data YYYY=2030 \ --data MM=12 \ --data 'TEXT=TEST CARDHOLDER' \ --data 'ip=185.230.240.201' \ --data language=ru
Пример ответа на запрос оплаты заказа:
{ "errorCode": 0, "is3DSVer2": true, "threeDSServerTransId": "c300fd79-5e7d-4882-89c7-43458e2538b6", "threeDSMethodURL": "https://example.com/acs2/acs/3dsMethod", "threeDSMethodURLServer": "example.com/3dsserver/api/v1/client/gather?threeDSServerTransID=c300fd79-5e7d-4882-89c7-43458e2538b6", "threeDSMethodDataPacked": "eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly9jb21tb24wMy50c3QucmJzdGVzdC5ydS8zZHNzZXJ2ZXIvYXBpL3YxL2Fjcy9ub3RpZmljYXRpb24_dGhyZWVEU1NlcnZlclRyYW5zSUQ9NTgwMjc0NmUtMzM5My00MGMzLTkyOWEtZGM5NjZlYmYwOGM2IiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiI1ODAyNzQ2ZS0zMzkzLTQwYzMtOTI5YS1kYzk2NmViZjA4YzYifQ" }
-
-
(Выполняется при условии) 3DS-method. Мерчант в отдельном "iframe" методом POST вызывает
threeDSMethodURLServer
, используя значение, полученное из ответа на запрос оплаты заказа. Это позволяет серверу 3DS собрать данные о браузере клиента.
Пример кода:
const iframe = document.createElement('iframe'); iframe.style.cssText = 'width: 0; height: 0; border: none;'; const html = ` <form id="threeDsMethodTo3DSServer" method="post" action="${threeDSMethodURLServer as string}"></form> `; document.body.append(iframe); if (iframe.contentWindow) { iframe.contentWindow.document.open(); iframe.contentWindow.document.write(html); (iframe.contentWindow.document.forms['threeDsMethodTo3DSServer'] as HTMLFormElement).submit(); }
-
(Выполняется при условии) 3DS-method. Если в ответе на запрос оплаты заказа пришли параметры
threeDSMethodURL
иthreeDSMethodDataPacked
, то мерчант в отдельном "iframe" методом POST вызываетthreeDSMethodURL
. В этом методе необходимо передать значение, полученное из параметраthreeDSMethodDataPacked
, полученного в ответе на запрос оплаты заказа. При этом нужно его передать в параметре, который называетсяthreeDSMethodData
. Это позволяет ACS собрать данные о браузере клиента.Пример кода:
const iframe = document.createElement('iframe'); iframe.style.cssText = 'width: 0; height: 0; border: none;'; const html = ` <form id="threeDsMethodToACS" method="post" action="${threeDSMethodURL}" > <input type="hidden" name="threeDSMethodData" value="${threeDSMethodDataPacked as string}"/> </form> `; document.body.append(iframe); if (iframe.contentWindow) { iframe.contentWindow.document.open(); iframe.contentWindow.document.write(html); (iframe.contentWindow.document.forms['threeDsMethodToACS'] as HTMLFormElement).submit(); }
-
Продолжение оплаты. Мерчант отправляет запрос continue.do, чтобы завершить оплату заказа (или осуществить перевод денежных средств). Запрос должен содержать
mdOrder
- номер заказа в платежном шлюзе.Пример запроса:
curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/3ds/continue.do \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data mdOrder=0179018d-8f96-7fbe-bc2b-4b7e00a7d8c0 \ --data userName=test-user \ --data password=test-password
Платежный шлюз взаимодействует с 3DS сервером и ACS, чтобы выяснить, требуется ли клиенту проходить аутентификацию на ACS, и отправляет ответ на запрос оплаты. Если клиенту требуется проходить аутентификацию на ACS, в ответе возвращается
acsUrl
– URL для перенаправления на ACS, а такжеpackedCReq
– упакованные данные для challenge request. Если не требуется (frictionless аутентификация) – возвращается ответ об успешном завершении оплаты.Пример ответа:
{ "info": "Your order is proceeded, redirecting...", "errorCode": 0, "acsUrl": "https://bestbank.com/acs2/acs/creq", "is3DSVer2": true, "packedCReq": "eyJ0aHJlZURTU...6IjA1In0" }
-
Если клиенту не требуется проходить аутентификацию на ACS, переходите на шаг 13.
Если клиенту требуется проходить аутентификацию на ACS, продавец перенаправляет клиента на ACS. Читайте, как это сделать здесь.
Клиент проходит проверку подлинности и ACS перенаправляет его на страницу магазина.
-
Если в запросе на оплату был передан параметр
threeDSVer2FinishUrl
, для завершения транзакции мерчант отправляет в платежный шлюз запрос finish3dsVer2Payment.do. В этом запросе нужно передать параметрthreeDSServerTransId
- идентификатор транзакции, который был создан сервером 3DS и возвращён на шаге 6.Пример запроса:
curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/finish3dsVer2Payment.do \ --header 'content-type: application/x-www-form-urlencoded' \ --data threeDSServerTransId=c300fd79-5e7d-4882-89c7-43458e2538b6 \ --data userName=test_user \ --data password=test_user_password \
Пример ответа:
{ "redirect": "http://test.com?orderId=0179018d-8f96-7fbe-bc2b-4b7e00a7d8c0&lang=en", "errorCode": 0, "is3DSVer2": true }
Платежный шлюз асинхронно отправляет уведомление обратного вызова на сервер интернет-магазина (если эта возможность включена).
-
(Необязательно) Интернет-магазин отправляет запрос getOrderStatusExtended.do платежному шлюзу, чтобы проверить статус заказа и убедиться, что заказ действительно оплачен. Запрос содержит параметр
orderId
, полученный на Шагe 5. В ответ платежный шлюз возвращает статус заказа в параметреorderStatus
. Статус2
означает успешный платеж, статус1
означает успешную предварительную авторизацию для двухэтапных платежей (в этом случае производится холдирование средств). Дополнительно возвращается параметрactionCode
- он содержит код ответа процессинга банка. См. список кодов ответа здесь.Дополнительные сведения см. в разделе Получение статуса заказа.
Дополнительные шаги при получении soft decline после frictionless аутентификации
У вас может быть включена специальная настройка выполнения повторного 3DS2 challenge при получении soft decline после frictionless аутентификации. "Soft decline" - это специальный код ответа, который процессинговый центр банка может получить от ACS и отправить в Платежный шлюз. Он означает, что для транзакции требуется более высокий уровень аутентификации.
Если эта настройка включена (обратитесь в команду поддержки, чтобы это выяснить) и Платежный шлюз получил код "soft decline" от процессингового центра банка после frictionless аутентификации, вам все же необходимо пройти полную (full) 3DS2 аутентификацию. Таким образом, необходимо выполнить следующие дополнительные шаги:
- Мерчант в отдельном iframe методом POST вызывает
threeDSMethodURLServer
, используя значение, полученное из ответа на запрос оплаты заказа. Это позволяет серверу 3DS собрать данные о браузере клиента.
- (Необязательный шаг) Если в ответе на запрос оплаты заказа пришли параметры
threeDSMethodURL
иthreeDSMethodDataPacked
, то мерчант в отдельном iframe методом POST вызываетthreeDSMethodURL
. В этом методе необходимо передать значение, полученное из параметраthreeDSMethodDataPacked
, полученного в ответе на запрос оплаты заказа. При этом нужно его передать в параметре, который называетсяthreeDSMethodData
. Это позволяет ACS собрать данные о браузере клиента.
-
Продолжение оплаты. Мерчант повторно отправляет запрос на оплату, передавая новый параметр
threeDSServerTransId
. В ответе возвращаетсяacsUrl
– URL-адрес для перенаправления на ACS и новыйpackedCReq
– упакованные данные для challenge request. Платежная страница перенаправляется наacsUrl
с параметромcreq=packedCReq
, и клиент выполняет challenge (переход на шаг 11 основной схемы интеграции).