Создайте JSON-объект, содержащий threeDSServerTransID, полученный в ответе на запрос set-src-token и URL-адрес, на который ACS отправит уведомление по завершении взаимодействия с браузером держателя карты в threeDSMethodNotificationURL:
// Создание объекта данных с необходимыми значениями
let threeDSMethodData = {
threeDSServerTransID: 'TRANS ID',
threeDSMethodNotificationURL: 'URL'
}
// Получаем ссылку на форму
let form = document.getElementById('threeDSMethodForm');
// 1. Сериализация объекта threeDSMethodData в JSON
// 2. Base64-URL кодирует его
// 3. Установка значения в input формы
// Предупреждение: Значение Base64-URL не должно содержать '='
document.getElementById('threeDSMethodData').value =
base64url(JSON.stringify(threeDSMethodData));
// Отправка формы
form.action = '<threeDSMethodURL>';
form.target = 'threeDSMethodIframe'; // name of iframe
form.method = 'post';
form.submit();
AReq
Полученный в ответеaReq необходимо дополнить следующими полями:
Поле
Значение
Свойство
notificationURL
URL, на который отправляется сообщение CRes. Отправляет ACS через браузер держателя карты по завершении аутентификации.
browserIP
IP-адрес, с которого подключается браузер держателя карты.
browserAcceptHeader
Точное содержимое HTTP принимает заголовки, отправленные в 3DS Requestor из браузера держателя карты.
browserJavaEnabled
Логическое значение, которое представляет собой способность браузера держателя карты выполнять Java, обязательно если browserJavascriptEnabled=true.
navigator.javaEnabled
browserColorDepth
Битовая глубина цветовой палитры браузера пользователя, обязательно, если browserJavascriptEnabled true.
screen.colorDepth
browserScreenWidth
Общая ширина экрана держателя карты в пикселях.
screen.width
browserScreenHeight
Общая высота экрана держателя карты в пикселях.
screen.height
browserTZ
Смещение часового пояса в минутах между UTC и местным временем браузера держателя карты.
browserUserAgent
Точное содержимое заголовка HTTP user-agent.
browserLanguage
Значение, представляющее язык браузера, как определено в IETF BCP47.
navigator.language
browserJavascriptEnabled
Логическое значение, которое представляет собой способность браузера держателя карты выполнять JavaScript.
Запрос необходим, чтобы убедиться, что истинный держатель карты является частью авторизации. Challenge flow используется для предоставления способа аутентификации держателя карты, например, с помощью OTP.
Добавьте iframe в браузер держателя карты либо статически, либо с помощью JavaScript:
let displayBox = document.getElementById('displayBox');
let iframe = document.createElement('iframe');
iframe.name = "challengeIframe";
displayBox.appendChild(iframe);
Добавьте форму, содержащую необходимые элементы:
<form class="" id="challengeForm">
<input type="hidden" name="creq" id="creq"/>
<!-- Может содержать до 1024 символов в кодировке Base64-URL -->
<input type="hidden" name="threeDSSessionData" id="threeDSSessionData"/>
</form>
Заполните входные данные формы и отправьте их на URL-адрес ACS в iframe.
// Создание объекта данных с необходимыми значениями
let creq = JSON.stringify({
threeDSServerTransID: "be6e2b83-72d6-4807-a2d9-87965494a1de",
acsTransID: "28da38e3-987c-475f-b118-f2a37fae6f82",
messageVersion: "2.1.0",
messageType: "CReq",
challengeWindowSize: "01"
});
// Получаем ссылку на форму
let form = document.getElementById('challengeForm');
// Установка значения в input формы
// Предупреждение: Значение Base64-URL не должно содержать '='
document.getElementById('creq').value = base64url(creq);
// Отправка формы
form.action = '<acsURL>'; // acsURL из ARes
form.target = 'challengeIframe';
form.method = 'post';
form.submit();
CRes
На указанный в соответствующем полеnotificationURL методом POST отправляется ответ на запрос в Base64-URL: