Аутентификация по инициативе платежной системы

Общая информация

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

Эта аутентификация заменяет аутентификацию 3‑D Secure, и в ней также используются одноразовые проверочные коды (One Time PIN, OTP), которые пользователь получает в сообщениях. Однако в отличие от 3‑D Secure такие коды пользователь вводит не на стороне эмитента, а в веб-сервисе мерчанта.

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

Схема работы

С технической точки зрения платеж с аутентификацией по инициативе платежной системы осуществляется через процедуру дополнения информации о платеже. После обработки начального запроса платежная система отправляет в веб-сервис оповещение с информацией о необходимости предоставить проверочный код. При получении такого оповещения ваш веб-сервис должен получить проверочный код от пользователя и отправить его в платформу в составе запроса на продолжение платежа.

Время ожидания запроса на продолжение платежа зависит от используемого платежного метода и измеряется с момента выявления необходимости дополнить данные и до получения запроса от веб-сервиса. Если до истечения времени ожидания запрос в платформу не поступит, платеж будет автоматически отклонен. Как только в платежную платформу поступают все запрашиваемые данные, проведение платежа продолжается.

Таким образом, в процессе взаимодействия с платежной платформой для аутентификации пользователя по инициативе платежной системы ваш веб-сервис должен:

  1. Принять оповещение о необходимости указать проверочный код.
  2. Получить проверочный код от пользователя.
  3. Отправить запрос о продолжении платежа с полученным кодом.

В некоторых регионах платежная платформа предоставляет возможность запросить повторную отправку сообщения с проверочным кодом. Подробнее об этой функциональности см. Повторная отправка проверочного кода далее. Подробнее о доступности этой функциональности уточняйте у своего курирующего менеджера.

Подробнее о процедуре дополнения информации о платеже см. Дополнение информации о платеже. Примеры данных из оповещения и запроса для аутентификации пользователя по инициативе платежной системы представлены далее в этом разделе.

Форматы данных

Форматы оповещения и запроса, используемых при аутентификации по инициативе платежной системы, аналогичны форматам оповещения и запроса при дополнении информации о платеже за исключением некоторых параметров, которые описаны далее.

Тело оповещения о необходимости передать проверочный код содержит следующие дополнительные элементы:

  • provider_extra_fields — объект, содержащий сведения об отправке проверочного кода:
    • new_attempt_time — момент времени в формате "Unix-время", до которого в платформу должен поступить проверочный код.

Чтобы обеспечить своевременное подтверждение платежа, отправить запрос с кодом подтверждения надо до наступления срока, указанного в параметре new_attempt_time. Запрос с кодом подтверждения отправляется по механизму дополнения информации о платеже. После получения кода проведение платежа продолжится на стороне платежной платформы и сервиса провайдера, а в веб-сервис будет отправлено итоговое оповещение.

Рис. 1. Пример тела оповещения о необходимости передать проверочный код
{
        "provider_extra_fields": {
            "new_attempt_time": 1681736775
        },
        "clarification_fields": [
            "confirm_code"
        ],
        "customer": {
            "id": "123456"
        },
        "account": {
            "number": "123456******1234",
            "type": "uzcard",
            "card_holder": "John Dow",
            "expiry_month": "05",
            "expiry_year": "2025"
        },
        "project_id": 100992,
        "payment": {
            "id": "payment_12",
            "type": "purchase",
            "status": "awaiting clarification",
            "date": "2023-04-19T12:12:40+0000",
            "method": "card",
            "sum": {
                "amount": 204000,
                "currency": "UZS"
            },
            "description": ""
        },
        "operation": {
            "sum_initial": {
                "amount": 204000,
                "currency": "UZS"
            },
            "sum_converted": {
                "amount": 204000,
                "currency": "UZS"
            },
            "code": "19999",
            "message": "Awaiting processing",
            "provider": {
                "id": 11131,
                "payment_id": "",
                "auth_code": "",
                "endpoint_id": 11131
            },
            "id": 42737010081577,
            "type": "sale",
            "status": "awaiting clarification",
            "date": "2023-04-19T12:12:40+0000",
            "created_date": "2023-04-19T12:12:38+0000",
            "request_id": "d8ce5b71...0-00042738"
        },
        "signature": "bBw5bW5hVs...oQUXQfxnuhP5RvN/+YEEZe1t6gS10Uw=="
    }
Рис. 2. Пример тела запроса с проверочным кодом
{
  "general": {
    "project_id": 11,
    "payment_id": "pID-14",
    "signature": "v7KNMpfog...=="
  },
  "additional_data": {
    "confirm_code":"123456"
  }
}

Повторная отправка проверочного кода

Возможны ситуации, когда пользователь не получает сообщение с проверочным кодом, поэтому в некоторых регионах платежная платформа предоставляет возможность запросить повторную отправку сообщения с проверочным кодом. Подробнее о доступности этой функциональности уточняйте у своего курирующего менеджера. Далее в этом разделе описан порядок применения и формат запроса о повторной отправке и приведены примеры оповещения и запроса о повторной отправке проверочного кода.

Если оповещение с информацией о необходимости предоставить проверочный код содержит объект resend, то в текущем платеже возможна повторная отправка проверочного кода. Объект resend содержит следующие параметры:

  • new_attempt_time — момент времени в формате "Unix-время", до которого в платформу должен поступить проверочный код. Запросить повторную отправку проверочного кода можно только после истечения срока, указанного в этом параметре.
  • available_attempts_number — количество оставшихся попыток повторной отправки проверочного кода. Этот параметр определяет, сколько еще раз можно отправить запрос на повторную отправку проверочного кода.

Вот пример оповещения с объектом resend, информирующем о том, что есть еще одна попытка запроса повторной отправки проверочного кода.

Рис. 3. Пример тела оповещения о передаче проверочного кода с возможностью его повторной отправки
{
	"provider_extra_fields": {
		"available_customer_actions": {
			"resend": {
				"new_attempt_time": 1681736775,
				"available_attempts_number": 1
			}
		}
	},
	"clarification_fields": [
		"confirm_code"
	],
	"customer": {
		"id": "1"
	},
	"account": {
		"number": "12345678******1234",
		"type": "humo",
		"card_holder": "JACK ONEAL",
		"expiry_month": "08",
		"expiry_year": "2027"
	},
	"project_id": 29781,
	"payment": {
		"id": "PAYMENT_123456",
		"type": "purchase",
		"status": "awaiting clarification",
		"date": "2023-04-17T13:05:14+0000",
		"method": "card",
		"sum": {
			"amount": 1000,
			"currency": "UZS"
		},
		"description": "PAYMENT_1234"
	},
	"operation": {
		"sum_initial": {
			"amount": 0,
			"currency": ""
		},
		"sum_converted": {
			"amount": 0,
			"currency": ""
		},
		"code": "0",
		"message": "Success",
		"provider": {
			"id": 12345,
			"payment_id": "",
			"auth_code": "",
			"endpoint_id": 12345
		},
		"id": 123456789,
		"type": "customer action",
		"status": "success",
		"date": "2023-04-17T13:05:15+0000",
		"created_date": "2023-04-17T13:05:14+0000",
		"request_id": "05027333"
	},
	"signature": "MiMeZogWjdhqoO3rPGFmDxf...w0UHQ=="
}

В обычных условиях веб-сервис получает от пользователя проверочный код и отправляет его в платежную платформу до истечения срока, указанного в параметре new_attempt_time. Но далее мы будем рассматривать только порядок действий в ситуации, когда пользователь не предоставляет проверочный код в отведенный срок и веб-сервис задействует механизм повторной отправки проверочного кода.

В приведенном ниже сценарии получения проверочного кода предполагается, что параметр available_attempts_number в последнем оповещении о передаче проверочного кода больше нуля, иначе говоря платформа предоставляет как минимум одну попытку повторной отправки проверочного кода.

  1. Веб-сервис ожидает от пользователя предоставления проверочного кода в срок, указанный в параметре new_attempt_time.

    На время ожидания ввода проверочного кода настоятельно рекомендуется закрыть пользователю возможность повторной отправки проверочного кода (например, отключить соответствующую кнопку).

  2. Веб-сервис не получает от пользователя проверочный код в отведенный срок.

    По истечении срока ввода проверочного кода рекомендуется закрыть пользователю возможность ввода проверочного кода (например, сделать неактивным соответствующее поле ввода) и открыть возможность запроса нового проверочного кода (например, активировать соответствующую кнопку).

  3. Если пользователь запрашивает новый проверочный код, веб-сервис отправляет в конечную точку /v2/customer/action/resend запрос на повторную отправку проверочного кода.

    Формат запроса описан далее в этом разделе.

    ОСТОРОЖНО: Запрос на повторную отправку проверочного кода следует направлять строго после истечения срока отправки проверочного кода в платежную платформу.
  4. В ответ платформа направляет пользователю новое сообщение с проверочным кодом, а также отправляет в веб-сервис еще одно оповещение о необходимости предоставления проверочного кода.

    Объект resend в этом оповещении содержит новый срок предоставления проверочного кода в параметре new_attempt_time, а также число оставшихся попыток повторной отправки проверочного кода в параметре available_attempts_number.

  5. Далее возможны два варианта:
    • Пользователь вводит проверочный код в веб-сервисе и веб-сервис отправляет этот код в конечную точку /v2/payment/clarification в соответствии с процедурой дополнения информации о платеже.

      После того, как веб-сервис направит запрос с проверочным кодом в платежную платформу, повторная отправка проверочного кода становится невозможной.

    • Пользователь не предоставляет веб-сервису проверочный код в отведенный срок.

      В таком случае веб-сервис может повторно запросить проверочный код, выполнив пп. 2–4, но только при условии, что в последнем оповещении о необходимости предоставления проверочного кода значение параметра available_attempts_number больше нуля.

Такой порядок повторной отправки проверочного кода применяется только в некоторых регионах. Подробнее о доступности этой функциональности уточняйте у своего курирующего менеджера.

Формат запроса о повторной отправке проверочного кода

Запрос о повторной отправке кода подтверждения пользователю отправляется методом POST в конечную точку /v2/customer/action/resend, относящейся к группе /v2/customer/action/{action_name}, и должен содержать следующие объекты и параметры:

  • general — объект, содержащий основные сведения о запросе:
    • project_id — идентификатор проекта, полученный от PSPHost при интеграции;
    • payment_id — идентификатор платежа, уникальный в рамках проекта;
    • signature — подпись, составленная после указания целевых параметров (подробнее — в разделе Подписывание и проверка подписи);
  • customer — объект, содержащий сведения о пользователе:
    • ip_address — IP-адрес устройства пользователя.

Вот пример данных из запроса на повторную отправку кода подтверждения.

Рис. 4. Пример данных из запроса на повторную отправку кода подтверждения пользователю
{
    "general": {
        "project_id": 1234,
        "payment_id": "payment_47",
        "signature": "PJkV8ej...9MTO8yJA=="
    },
    "customer": {
        "ip_address": "198.51.100.47"
    }
}