Использование технологии 3-D Secure версии 2
Применяется при подключении Продавцом механизма 3-D Secure аутентификации.
Порядок выполнения - аутентификация держателя карты на стороне банка-эмитента и сообщение результатов сервису шлюза.
Пример для двустадийной оплаты.
При передаче запроса на блокировку средств Продавцу необходимо сформировать дополнительный объект threeds_ver2
:
Название |
Описание |
Формат |
term_url |
URL для получения CRes при прохождении challenge-flow сценария |
Строка |
browser_info |
Объект содержащий информацию и браузере Пользователя |
JSON объект |
├─ accept_header |
Содержимое HTTP-заголовков, отправленных в систему интернет-эквайринга из браузера клиента. Максимальное значение – 2048 символов. Например, application/json,application/jose;charset=utf-8 |
Строка |
├─ color_depth |
Значение, представляющее битовую глубину цветовой палитры для отображения изображений, в битах на пиксель. Например, 24 (screen.colorDepth) |
Строка (максимальная длина - 2 символа) |
├─ java_enabled |
Возможность выполнять java в браузере (novigator.javaEnabled) |
true/false |
├─ javascript_enabled |
Признак возможности выполнения JavaScript в браузере держателя карты |
true/false |
├─ language |
Язык браузера, указанный по стандарту IETF BCP47. Например, ru-RU |
Строка (максимальная длина - 8 символов) |
├─ height |
Общая высота (в пикселях) экрана, отображаемого держателю карты. Максимальное значение – 6 символов. Например, 1080 (screen.height) |
Строка |
├─ width |
Общая ширина (в пикселях) экрана, отображаемого держателю карты. Максимальное значение – 6 символов. Например, 1920 (screen.width) |
Строка |
├─ timezone |
Разница во времени между временем по UTC и местным временем (браузера) пользователя в минутах. Например, если UTC -5, то необходимо указать +300, а если UTC +5, то необходимо указать -300 |
Строка (максимальная длина - 5 символов) |
├─ useragent |
Содержимое HTTP-заголовка User-Agent. Например: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 |
Строка (максимальная длина - 2048 символов) |
├─ window_height |
Высота окна в браузере (в пикселях), в котором будет отображаться страница для ввода аутентификационных данных (например, страница ввода одноразового пароля). Оптимальное значение для десктопного браузера – 500. |
Строка |
├─ window_width |
Ширина окна в браузере (в пикселях), в котором будет отображаться страница для ввода аутентификационных данных (например, страница ввода одноразового пароля). Оптимальное значение для десктопного браузера – 600. |
Строка |
Название |
Описание |
Формат |
term_url |
URL для получения CRes при прохождении challenge-flow сценария |
Строка |
browser_info |
Объект содержащий информацию и браузере Пользователя |
JSON объект |
├─ accept_header |
Содержимое HTTP-заголовков, отправленных в систему интернет-эквайринга из браузера клиента. Максимальное значение – 2048 символов. Например, application/json,application/jose;charset=utf-8 |
Строка |
├─ color_depth |
Значение, представляющее битовую глубину цветовой палитры для отображения изображений, в битах на пиксель. Например, 24 (screen.colorDepth) |
Строка (максимальная длина - 2 символа) |
├─ java_enabled |
Возможность выполнять java в браузере (novigator.javaEnabled) |
true/false |
├─ javascript_enabled |
Признак возможности выполнения JavaScript в браузере держателя карты |
true/false |
├─ language |
Язык браузера, указанный по стандарту IETF BCP47. Например, ru-RU |
Строка (максимальная длина - 8 символов) |
├─ height |
Общая высота (в пикселях) экрана, отображаемого держателю карты. Максимальное значение – 6 символов. Например, 1080 (screen.height) |
Строка |
├─ width |
Общая ширина (в пикселях) экрана, отображаемого держателю карты. Максимальное значение – 6 символов. Например, 1920 (screen.width) |
Строка |
├─ timezone |
Разница во времени между временем по UTC и местным временем (браузера) пользователя в минутах. Например, если UTC -5, то необходимо указать +300, а если UTC +5, то необходимо указать -300 |
Строка (максимальная длина - 5 символов) |
├─ useragent |
Содержимое HTTP-заголовка User-Agent. Например: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 |
Строка (максимальная длина - 2048 символов) |
├─ window_height |
Высота окна в браузере (в пикселях), в котором будет отображаться страница для ввода аутентификационных данных (например, страница ввода одноразового пароля). Оптимальное значение для десктопного браузера – 500. |
Строка |
├─ window_width |
Ширина окна в браузере (в пикселях), в котором будет отображаться страница для ввода аутентификационных данных (например, страница ввода одноразового пароля). Оптимальное значение для десктопного браузера – 600. |
Строка |
Сформированный объект необходимо закодировать в base64
и передать в параметр ThreedsVer2MerchantData
.
"threeds_ver2": {
"term_url": "https://cres-listener.ru/",
"browser_info": {
"accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"color_depth": "24",
"java_enabled": true,
"javascript_enabled": true,
"language": "ru-RU",
"height": "1080",
"width": "1920",
"timezone": "-180",
"useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 YaBrowser/20.8.3.115 Yowser/2.5 Safari/537.36",
"window_height": "600",
"window_width": "500"
}
}
1.
{"term_url":"https://cres-listener.ru/","browser_info":{"accept_header":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","color_depth":"24","java_enabled":true,"javascript_enabled":true,"language":"ru-RU","height":"1080","width":"1920","timezone":"-180","useragent":"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/84.0.4147.135YaBrowser/20.8.3.115Yowser/2.5Safari/537.36","window_height":"600","window_width":"500"}}
2.
eyJ0ZXJtX3VybCI6Imh0dHBzOi8vY3Jlcy1saXN0ZW5lci5ydS8iLCJicm93c2VyX2luZm8iOnsiYWNjZXB0X2hlYWRlciI6InRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjkiLCJjb2xvcl9kZXB0aCI6IjI0IiwiamF2YV9lbmFibGVkIjp0cnVlLCJqYXZhc2NyaXB0X2VuYWJsZWQiOnRydWUsImxhbmd1YWdlIjoicnUtUlUiLCJoZWlnaHQiOiIxMDgwIiwid2lkdGgiOiIxOTIwIiwidGltZXpvbmUiOiItMTgwIiwidXNlcmFnZW50IjoiTW96aWxsYS81LjAoV2luZG93c05UMTAuMDtXaW42NDt4NjQpQXBwbGVXZWJLaXQvNTM3LjM2KEtIVE1MLGxpa2VHZWNrbylDaHJvbWUvODQuMC40MTQ3LjEzNVlhQnJvd3Nlci8yMC44LjMuMTE1WW93c2VyLzIuNVNhZmFyaS81MzcuMzYiLCJ3aW5kb3dfaGVpZ2h0IjoiNjAwIiwid2luZG93X3dpZHRoIjoiNTAwIn19Cg==
3.
ThreedsVer2MerchantData=eyJ0ZXJtX3VybCI6Imh0dHBzOi8vY3Jlcy1saXN0ZW5lci5ydS8iLCJicm93c2VyX2luZm8iOnsiYWNjZXB0X2hlYWRlciI6InRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LGltYWdlL3dlYnAsaW1hZ2UvYXBuZywqLyo7cT0wLjgsYXBwbGljYXRpb24vc2lnbmVkLWV4Y2hhbmdlO3Y9YjM7cT0wLjkiLCJjb2xvcl9kZXB0aCI6IjI0IiwiamF2YV9lbmFibGVkIjp0cnVlLCJqYXZhc2NyaXB0X2VuYWJsZWQiOnRydWUsImxhbmd1YWdlIjoicnUtUlUiLCJoZWlnaHQiOiIxMDgwIiwid2lkdGgiOiIxOTIwIiwidGltZXpvbmUiOiItMTgwIiwidXNlcmFnZW50IjoiTW96aWxsYS81LjAoV2luZG93c05UMTAuMDtXaW42NDt4NjQpQXBwbGVXZWJLaXQvNTM3LjM2KEtIVE1MLGxpa2VHZWNrbylDaHJvbWUvODQuMC40MTQ3LjEzNVlhQnJvd3Nlci8yMC44LjMuMTE1WW93c2VyLzIuNVNhZmFyaS81MzcuMzYiLCJ3aW5kb3dfaGVpZ2h0IjoiNjAwIiwid2luZG93X3dpZHRoIjoiNTAwIn19Cg==
При получении запроса на блокировку средств шлюз проверяет факт участия карты в 3-D Secure аутентификации.
Если карта Пользователя вовлечена в технологию 3-D Secure версии 2, то в ответе так же присутствуют атрибуты ThreedsMethodURL, Is3DSVer2 и ThreedsMethodURLData.
Название |
Описание |
Формат |
eCom |
ThreedsMethodURL |
Адрес (URL/URI) сервера аутентификации 3-D Secure для сбора информации о браузере клиента |
Строка |
|
ThreedsMethodURLData |
Зашифрованная base64 строка |
Строка |
|
Is3DSVer2 |
Флаг проведения операции с использованием технологии 3DS версии 2 |
true/false |
|
После получения ответа от шлюза Продаец отправляет запрос через скрытый iframe
в браузере Пользователя, состав запроса:
- POST
ThreedsMethodURL
- Content-Type: application/x-www-form-urlencoded
- Параметр
threeDSMethodData
со значением ThreedsMethodURLData
, полученным в ответе
После получения ответа на ThreedsMethodURL
произойдёт перенаправление на URL
шлюза, для подтверждения прохождения сценария сбора данных о браузере Пользователя сервером ACS.
При завершении сценария скрытый фрейм отправит в родительское окно событие postMessage со следующем объектом: {type: "event", message: "3ds20 hidden frame complete", code: 202}
При получении кода ответа 202
после перенаправления на URL
шлюза Продавец посылает запрос на Block3DS:
Название |
Описание |
Формат |
eCom |
key |
Идентификатор Продавца. Выдается с параметрами тестового/боевого доступа |
Строка |
|
merchant_order_id |
Идентификатор платежа в системе theMAP |
Строка (максимум 50 символов) |
|
Название |
Описание |
Формат |
eCom |
Key |
Идентификатор Продавца. Выдается Продавцу с параметрами тестового/боевого доступа |
Строка |
|
OrderId |
Идентификатор платежа в системе Продавца |
Строка (максимум 50 символов) |
|
Пример запроса POST:
Content-Type: application/json
{{endpoint}}/Block3DS
{
"key":"TestTerminal",
"merchant_order_id":"TestOrder123"
}
Пример реализации запроса:
curl -X POST {{endpoint}}/Block3DS -H 'Content-Type: application/json' -d '{"key":"TestTerminal","merchant_order_id":"TestOrder123"}'
Пример запроса POST:
Content-Type: application/x-www-form-urlencoded
{{endpoint}}/Block3DS
Key=TestTerminal
OrderId=TestOrder123
Пример реализации запроса:
curl -X POST {{endpoint}}/Block3DS -H 'Content-Type: application/x-www-form-urlencoded' -d 'Key=TestTerminal&OrderId=TestOrder123'
Название |
Описание |
Формат |
eCom |
Success |
Флаг успешности операции |
true/false |
|
ACSUrl |
Адрес (URL/URI) сервера аутентификации 3-D Secure при прохождении сценария challenge-flow |
Строка |
1 |
CReq |
Запрос на аутентификацию 3-D Secure при прохождении сценария challenge-flow |
Строка |
1 |
OrderId |
Идентификатор платежа в системе Продавца |
Соответствует переданному в запросе |
|
Amount |
Заблокированная сумма |
Соответствует переданному в запросе |
1 |
AuthCode |
Код авторизации |
Строка (максимум 6 символов) |
|
ErrCode |
Описание ошибки |
см. коды ошибок |
2 |
ErrMessage |
Опциональный параметр. Дополнительное описание ошибки |
Строка |
|
CardUId |
Идентификатор карты в системе theМАР. Передается в ответе на метод StoreCard3DS |
GUID |
|
PANMask |
Маскированный номер карты в формате 123456xxxxxx1234 |
Строка |
|
Status |
Статус карты. Передается в ответе на метод StoreCard3DS |
isActive – карта активна и может быть использована для списаний |
|
CustomParams |
Список дополнительных параметров операции |
Соответствует Params, переданному в запросе |
|
FeePercent |
Ставка комиссии за эквайринг |
Число |
|
TerminalID |
ID терминала в системе MAP, по которому фактически выполнена операция |
Число |
|
1 Параметр обязателен при необходимости прохождения сценария challenge-flow
Название |
Описание |
Формат |
ACSUrl |
Адрес (URL/URI) сервера аутентификации 3-D Secure |
Строка |
PaReq |
Запрос на аутентификацию 3-D Secure |
Строка |
ThreeDSKey |
Уникальный идентификатор транзакции |
Строка |
1 Передаётся, если в ответе Success=true
2 Передаётся, если в ответе Success=false
Пример ответа на успешный запрос:
{
"Success": true,
"OrderId": "TestOrder123",
"Amount": 300,
"ErrCode": ""
}
Пример ответа на не успешный запрос:
{
"Success": false,
"OrderId": "TestOrder123",
"ErrCode": "AMOUNT_EXCEED"
}
Аутентификация 3-D Secure версии 2 проходит по одному из двух сценариев: frictionless-flow
, либо challenge-flow
. Cценарий прохождения аутентификации, зависит он наличия параметров ACSUrl
, CReq
в ответе на запрос Block3DS
.
- При отсутствии параметров
ACSUrl
, CReq
сценарий считается frictionless-flow
и не требует дополнительных действий для аутентификации
- При наличии параметров
ACSUrl
, CReq
сценарий считается challenge-flow
и требует дополнительных действий для аутентификации
В случае прохождения аутентификации по сценарю frictionless-flow
, данный Block3DS
считается финальным.
Сценарий прохождения challenge-flow
:
После получения ответа от шлюза Продавец перенаправляет держателя карты на сайт банка-эмитента для дополнительной аутентификации. Для этого используется POST запрос по адресу, указанному в значении атрибута ACSUrl
, состав запроса:
- POST
ACSUrl
- Content-Type: application/x-www-form-urlencoded
- Параметр
creq
со значением CReq
, полученным в ответе
После прохождения авторизации на сайте банка-эмитента происходит возврат пользователя HTTPS POST запросом по адресу, указанному в параметре term_url
запроса Block
с параметром указанным ниже.
Название |
Описание |
Формат |
cres |
Шифрованная строка, содержащая результаты 3-D Secure аутентификации |
Строка |
После получения параметра cres
Продавец посылает запрос на Block3DS для завершения сценария challenge-flow
:
Название |
Описание |
Формат |
eCom |
key |
Идентификатор Продавца. Выдается с параметрами тестового/боевого доступа |
Строка |
|
merchant_order_id |
Идентификатор платежа в системе theMAP |
Строка (максимум 50 символов) |
|
cres |
Шифрованная строка, содержащая результаты 3-D Secure аутентификации |
Строка: cоответствует ответу от ACS |
1 |
1 Параметр обязателен при прохождении challenge-flow
Название |
Описание |
Формат |
eCom |
Key |
Идентификатор Продавца. Выдается Продавцу с параметрами тестового/боевого доступа |
Строка |
|
OrderId |
Идентификатор платежа в системе Продавца |
Строка (максимум 50 символов) |
|
CRes |
Шифрованная строка, содержащая результаты 3-D Secure аутентификации |
Строка: cоответствует ответу от ACS |
1 |
1 Параметр обязателен при прохождении challenge-flow
Пример запроса POST:
Content-Type: application/json
https://{domain}/Block3DS
{
"key":"TestTerminal",
"merchant_order_id":"TestOrder123",
"cres":"JQpr1kEIAQSIEYhdkxiEJOY4esfujenl5b9rPtt2l"
}
Пример реализации запроса в программном коде:
curl -X POST {{endpoint}}/Block3DS -H 'Content-Type: application/json' -d '{"key":"TestTerminal","merchant_order_id":"TestOrder123", "cres":"JQpr1kEIAQSIEYhdkxiEJOY4esfujenl5b9rPtt2l"}'
Пример запроса POST:
Content-Type: application/x-www-form-urlencoded
https://{domain}/Block3DS
Key:TestTerminal
OrderId:TestOrder123
CRes:JQpr1kEIAQSIEYhdkxiEJOY4esfujenl5b9rPtt2l
Пример реализации запроса в программном коде:
curl -X POST {{endpoint}}/Block3DS -H 'Content-Type: application/x-www-form-urlencoded' -d 'Key=TestTerminal&OrderId=TestOrder123&CRes=JQpr1kEIAQSIEYhdkxiEJOY4esfujenl5b9rPtt2l'
Название |
Описание |
Формат |
eCom |
Success |
Флаг успешности операции |
true/false |
|
OrderId |
Идентификатор платежа в системе Продавца |
Соответствует переданному в запросе |
|
Amount |
Заблокированная сумма |
Соответствует переданному в запросе |
1 |
AuthCode |
Код авторизации |
Строка (максимум 6 символов) |
|
ErrCode |
Описание ошибки |
см. коды ошибок |
2 |
ErrMessage |
Опциональный параметр. Дополнительное описание ошибки |
Строка |
|
CardUId |
Идентификатор карты в системе theМАР. Передается в ответе на метод StoreCard3DS |
GUID |
|
PANMask |
Маскированный номер карты в формате 123456xxxxxx1234 |
Строка |
|
Status |
Статус карты. Передается в ответе на метод StoreCard3DS |
isActive – карта активна и может быть использована для списаний |
|
CustomParams |
Список дополнительных параметров операции |
Соответствует Params, переданному в запросе |
|
FeePercent |
Ставка комиссии за эквайринг |
Число |
|
TerminalID |
ID терминала в системе MAP, по которому фактически выполнена операция |
Число |
|
1 Передаётся, если в ответе Success=true
2 Передаётся, если в ответе Success=false
Пример ответа на успешный запрос:
{
"Success": true,
"OrderId": "TestOrder123",
"Amount": 300,
"ErrCode": ""
}
Пример ответа на не успешный запрос:
{
"Success": false,
"OrderId": "TestOrder123",
"ErrCode": "AMOUNT_EXCEED"
}
При одностадийной оплате (в случае использования метода Pay), необходимо вместо метода Block3DS для завершения операции 3-DS использовать метод Pay3DS.
При сохранении карты, вовлеченной в технологию 3-D Secure, для завершения операции, и получения в ответе идентификатора карты, необходимо использовать метод StoreCard3DS.
Параметры запроса, ответа и составы полей методов Pay3DS и StoreCard3DS аналогичны методу Block3DS.