Использование технологии 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.