Перейти к основному содержимому

3D-Secure

3D-Secure (Three-Domain Secure) — протокол аутентификации покупателей, обеспечивающий безопасную оплату товаров и услуг в интернете. Технология 3D-Secure (далее по тексту — 3DS) подразумевает дополнительный шаг аутентификации при совершении покупки в интернет-магазине:

  • на первом шаге на странице оплаты используются реквизиты банковской карты: номер, срок действия, имя держателя, код проверки подлинности (например, CVC2);
  • на втором — дополнительный защитный код, который вводится на веб-форме банка-эмитента.

Данная статья предназначена для компаний, осуществляющих приём платежей с помощью собственной платёжной формы и взаимодействия с платформой Empayre по API.

Обязательность 3DS-аутентификации

Согласно правилам международных платёжных систем (далее по тексту — МПС) по умолчанию все платежи, проводимые Empayre, требуют использования 3DS. Для уточнения возможности отключения 3DS (использования не-3DS терминала) обратитесь в службу поддержки. Однако в некоторых случаях при проведении платежей через не-3DS терминал банк-эмитент всё же может потребовать аутентификацию: ваше приложение должно поддерживать использование данной технологии.

Сценарий

Этап проведения платежа, на котором используется 3DS, отражён в данном сценарии.

Ниже представлена схема, описывающая детали прохождения покупателем 3DS.

к сведению

В случае использования одной из тестовых карт платформа эмулирует процесс прохождения 3DS-аутентификации.

Описание

  • После выполнения запроса на оплату выставленного счета необходимо запустить таймер и начать опрашивать Empayre на предмет появления новых событий.
Интервал и время опроса

Рекомендуется установить интервал опроса в 1 секунду и ограничение на время опроса в 60-120 секунд, либо 60-120 запросов.

  • Платформа проверит необходимость использования 3DS и вернёт нужные для этого данные в случае положительного результата: в ответе на запрос событий по инвойсу появится изменение с changeType = PaymentInteractionRequested и userInteraction.interactionType = Redirect.

    Пример ответа платформы:

{
"createdAt": "2018-03-20T10:15:26.905268Z",
"id": 3,
"changes": [
{
"changeType": "PaymentInteractionRequested",
"paymentID": "1",
"userInteraction": {
"interactionType": "Redirect",
"request": {
"requestType": "BrowserPostRequest",
"uriTemplate": "https://3ds-mock.empayre.com/mpi/acs",
"form": [
{
"key": "TermUrl",
"template": "https://wrapper.empayre.com"
},
{
"key": "PaReq",
"template": "paReq"
},
{
"key": "MD",
"template": "COM_MPI-ymJorPXs5A1"
}
]
}
}
}
]
}
  • Полученную в request структуру следует использовать для переадресации браузера покупателя на страницу банка-эмитента по указанному в ответе uriTemplate.
Переадресация на страницу 3DS-аутентификации

Тип переадресации request.requestType (GET или POST) зависит от решения банка-эквайера. Следует поддерживать оба варианта. - Значение параметра uriTemplate не подлежит изменению. - Набор параметров в form для requestType = BrowserPostRequest может меняться: его возвращает соответствующая МПС. Не следует базировать на нём логику работы приложения: например, проверять наличие определённого параметра или присутствие его значения. Количество параметров и их значения при выполнении переадресации должны оставаться неизменны.

Пример запроса средствами cURL на основании ответа платформы, представленного выше:

curl "https://3ds-mock.empayre.com/mpi/acs" --data "TermUrl=https://wrapper.empayre.com?PaReq=paReq&MD=COM_MPICOM_MPI-ymJorPXs5A1"
  • Покупатель введёт второй фактор аутентификации на странице банка-эмитента.
  • Банк-эмитент сформирует ответ об успешности прохождения аутентификации и оповестит об этом платформу.
Завершение 3DS-аутентификации

Для того чтобы узнать о завершении 3DS-аутентификации покупателя, при выполнении запроса на оплату выставленного счета необходимо передать redirectUrl: см. payersessionInfo. Браузер покупателя будет перенаправлен на указанный URL в случае как успешного, так и неуспешного завершения аутентификации.

Событие PaymentStatusChanged говорит об изменении состояния оплаты и, соответственно, о статусе прохождения 3DS (см. параметр status):

  • processed — оплату заказа можно считать успешно выполненной: денежные средства в размере суммы выставленного счета уже как минимум заблокированы на источнике денежных средств плательщика;
  • failed — оплата неуспешна.