Для осуществления электронного платежа, плательщик должен в какой-то момент ввести данные своей карты. Вводить эти данные плательщик может как на странице торговца (мерчанта), так и на странице, которую предоставляет Flexo (далее платежной странице). Если торговец сам собирает данные карт, то он должен соответствовать требованиям стандарта безопасности PCI DSS (что бывает достаточно редко). При оплате с помощью платежной страницы таких ограничений нет, к тому же большинство операций по обеспечению процедуры 3ds платежная страница берет на себя. Поэтому такой способ оплаты выглядит более предпочтительным и является основным.
Порядок взаимодействия через платежную страницу с процедурой 3ds
-
Торговец создает ссылку на платежную страницу с помощь операции
createPaymentLink. На полученную ссылку торговец переправляет плательщика. -
Плательщик открывает ссылку (в своем браузере) и попадает на платежную страницу. Он видит сумму платежа и название интернет магазина. В открывшейся форме он заполняет реквизиты карты и дополнительные поля, количество которых может варьироваться в зависимости от настроек.
-
Плательщик перенаправляется на страницу банка выпустившего карту и вводит одноразовый пароль (OTP), который он должен получить на сотовый телефон (другим способом, предусмотренный банком).
-
После успешного ввода пароля на странице банка, плательщик перенаправляется обратно на платежную страницу. Это важный шаг, если возврат не выполнен - платеж останется незавершенным. На платежной странице плательщик видит статус операции:
-
платеж проведен
-
платеж отклонен
-
платеж отклонен, но позволено ввести данные другой карты. На это обычно дается 3 попытки.
-
-
После оплаты плательщик может перейти (по кнопке) на страницу торговца (в интернет магазин). Возврат в магазин опционален и не влияет на факт оплаты.
-
После завершения оплаты торговец получает уведомление (callback) со статусом платежа.
Примеры запросов и ответов
Создание ссылки на платежную страницу (createPaymentLink)
Успешный запрос
POST /paymentpageapi/1-7/create_payment_link HTTP/1.1
W1-Signature: tKHEIuqvuw1PqzXDddf+P02BoSBBmjmCfzQSzww+pLSoJeT2m4nKxWcA0dyqndq+71QoHMkIsQI6uzHEOqa3BrCKh56SqF/Rri2AVsSZqs9wiHkU1gM8EZOTP71f8LVYp25IpAg+rMJGNcfwt6P4oRkqNLghU6XzjXskBHkgx1chaClbgXm6Kj7Ra2UjnTZjpaNKZ4gSod7wk0F1x9f64kbkwNQWEvvmDZ38uL/qEfq/m9AJhCSyK6s7FOvTWHhrxcRy6gYsdd3RrnYdBbeirkxIoNpC2g6YdMKQvwhfUk3QbZyBWnPP/S1K1Mab3iDwOTEYfuL+4yNOrxeqmVhrWQ==
Content-Type: application/json
Host: payment.flexo.systems
Content-Length: 728
{
"notification" : {
"url" : "http://127.0.0.1:8080/test/callback/default/",
"version" : 1
},
"externalId" : "ext#92-1779575579546",
"amount" : {
"amount" : 10.55,
"currency" : "USD"
},
"registerRecurring" : false,
"action" : "purchase",
"merchantParameters" : {
"param1" : "anything you want for callback",
"param2" : null,
"param3" : null
},
"pageParameters" : {
"urlOnSuccess" : "http://localhost:3333/url_success",
"urlOnDecline" : "http://localhost:3333/url_decline",
"description" : "description"
},
"customerId" : null,
"customerPhoneNumber" : "9001235577",
"customerEmail" : "john@doe.com",
"customerName" : "John Doe",
"customerIp" : "127.0.0.1"
}
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 188
{
"url" : "http://localhost:9080/MS03X1pYaDBJemt5TFRFM056azFOelUxTnprMU5EWT1fMS03LWEtNzlfTWpnd05HSXdOR1l0WVdRelpTMDBNekUxTFRnMU9UY3RPVFE0TlRVM1ptUmxNRFF4",
"operationId" : "1-7-a-79"
}
Запрос с ошибкой валидации
POST /paymentpageapi/1-7/create_payment_link HTTP/1.1
W1-Signature: zHhotHNN/g2yRVvyTFqL0cohB/5AF6qKU990/pXFQKT8qEP+g864YuXYZzftIIZ8bK1RhK+u3n0hsM1tCRyfR9ftkBJpjiv9TTnU1YFxKsgElG+Xn1L3g0CblLRbNIS29fkc1+iBpbrR1uUuI6UsTx4bxJjhp6Q4uc9Xo0Xlt6KEodGsXnalD+SrtWhHMPU9lto5SL4FLgLJCB0SRcXrCG+nqm14+WTcxVJb43Oro9HSrp/fQwD9LUKhIHRNfEDnAxrqaYv4zC9ivSOmBh25A3bOQDAYMhsG7jfL/ZSZ5lU++doA/t7ip4GAPcqN0fVF+dNzljsbDIYyolvNZV2zIA==
Content-Type: application/json
Host: payment.flexo.systems
Content-Length: 1220
{
"notification" : {
"url" : "http://127.0.0.1:8080/test/callback/default/",
"version" : 1
},
"externalId" : "ext#86-1779575570393",
"amount" : {
"amount" : 10.55,
"currency" : "USD"
},
"registerRecurring" : false,
"action" : "purchase",
"merchantParameters" : {
"param1" : "anything you want for callback",
"param2" : null,
"param3" : null
},
"pageParameters" : {
"urlOnSuccess" : "http://localhost:3333/url_success",
"urlOnDecline" : "http://localhost:3333/url_decline",
"description" : "description"
},
"customerId" : "DoahI0XlvqB1N0XkCYLlVdshVgbDPDnuPxLrYjRObznQrlYe1z8gKggWjl9bBJuJM6t2PcfWEzF5C64pkVzxZglyyWYBQhRy3wlnmjgVhJXNn7LgPYeevEdGTdzKEA0fNhqai4yhg1TwbQv7VNENn0I0T9bEekeYoiMkCzYI8ESvRAV7pVkIp7xiXoNc5KwAJeAptLXZnWftdbCKJiTnrRotButG0WUtDSgQOERSmyeqzo03M08mXVz1hK0",
"customerPhoneNumber" : "not-a-phone",
"customerEmail" : "notanemail",
"customerName" : "sScULMrBkBhBrdAGLPQ6B5FrK05fj9N2EmrIDpLfIdyPlV3sKYwXwRy6eOASJ9lTq397eWi0DJNgcKVAZPS2wsevP7Y8LjB6TT4B8r7K8imIESot4DuxoBMiIvdMX55d8xaisXnIeEzSP7Uhw1X3gTTjVv32hGb0SvYeAQtUlfJj39jC9kU4FIeAVUiMyNCS3K4Yd7t8Avi4fd037kUmHC30lLHkNcv7951PR2Hftlf5hZGxEvfAfPQkva1",
"customerIp" : "not-an-ip!"
}
HTTP/1.1 400 Bad Request
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Content-Type: application/json
Content-Length: 340
{
"errors" : [ {
"code" : 400,
"description" : "Path error",
"details" : {
"customerEmail" : "Wrong format",
"customerPhoneNumber" : "Wrong format",
"customerName" : "length must be between 0 and 250",
"customerId" : "length must be between 0 and 250",
"customerIp" : "Wrong format"
}
} ]
}