Для осуществления электронного платежа, плательщик должен в какой-то момент ввести данные своей карты. Вводить эти данные плательщик может как на странице торговца (мерчанта), так и на странице, которую предоставляет Flexo (далее платежной странице). Если торговец сам собирает данные карт, то он должен соответствовать требованиям стандарта безопасности PCI DSS (что бывает достаточно редко). При оплате с помощью платежной страницы таких ограничений нет, к тому же большинство операций по обеспечению процедуры 3ds платежная страница берет на себя. Поэтому такой способ оплаты выглядит более предпочтительным и является основным.
Порядок взаимодействия через платежную страницу с процедурой 3ds
-
Торговец создает ссылку на платежную страницу с помощь операции
createPaymentLink. На полученную ссылку торговец переправляет плательщика. -
Плательщик открывает ссылку (в своем браузере) и попадает на платежную страницу. Он видит сумму платежа и название интернет магазина. В открывшейся форме он заполняет реквизиты карты и дополнительные поля, количество которых может варьироваться в зависимости от настроек.
-
Плательщик перенаправляется на страницу банка выпустившего карту и вводит одноразовый пароль (OTP), который он должен получить на сотовый телефон (другим способом, предусмотренный банком).
-
После успешного ввода пароля на странице банка, плательщик перенаправляется обратно на платежную страницу. Это важный шаг, если возврат не выполнен - платеж останется незавершенным. На платежной странице плательщик видит статус операции:
-
платеж проведен
-
платеж отклонен
-
платеж отклонен, но позволено ввести данные другой карты. На это обычно дается 3 попытки.
-
-
После оплаты плательщик может перейти (по кнопке) на страницу торговца (в интернет магазин). Возврат в магазин опционален и не влияет на факт оплаты.
-
После завершения оплаты торговец получает уведомление (callback) со статусом платежа.
Примеры запросов и ответов
Создание ссылки на платежную страницу (createPaymentLink)
Успешный запрос
POST /paymentpageapi/1-7/create_payment_link HTTP/1.1
x-RequestId: acc-test-ec864088-9ef7-4daa-8896-961f51b5e97b
x-RequestId: acc-test-ec864088-9ef7-4daa-8896-961f51b5e97b
W1-Signature: cgX6DcgFIUdF/8haa8dgVsal6ZRtIrJEAwxOXhI4yFINSW3KVKgYHUxw1aahc2bUqMKijOi+FV8CknGRd/m4LYmEVjCPnXr/qg1kD5GMbUVYbZTxeWraORUCkCDJdImQY9cJ1NbfM48fwjpelam54pJ1m8xb3kozyokos00cOKy8otIfsPQBox5HQMS2IfvXPjJnIw5WrOGmR0MeIaaveauCDYnnHJrvxhG5yNnUaba/tzP6Fsxkli5ToOLAatrkDDvXVTABqnRwJue9kZqZZMBZrdWbKAKY/SYTpoVINnTFlDtCcgWWJpIRi6IDJuMOQo3uo/bIAd+7qYIO6gSz2w==
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#95-1788979734351",
"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: 204
{
"url" : "http://localhost:9080/MS03X1pYaDBJemsxTFRFM09EZzVOemszTXpRek5URT1fMS03LWEtODJfWVdOakxYUmxjM1F0WldNNE5qUXdPRGd0T1dWbU55MDBaR0ZoTFRnNE9UWXRPVFl4WmpVeFlqVmxPVGRp",
"operationId" : "1-7-a-82"
}
Запрос с ошибкой валидации
POST /paymentpageapi/1-7/create_payment_link HTTP/1.1
x-RequestId: acc-test-b9d7515b-6e8e-4f08-913b-ca9cf216fc5c
x-RequestId: acc-test-b9d7515b-6e8e-4f08-913b-ca9cf216fc5c
W1-Signature: uwHwn1MfUMNUHLTdfsgZ64vBuSPciAqwWbFeH96+yWDMplSZdP6ctyZnf/wpQ+jRHyg4+aBsRfgJuUWfQnEXemEiogs3Nw3bldMtoNuiBMd2+5boadsps05z3QrvQqewWlAxzkx2COQIscbMK3VkeoHWFCeVez5u+f/YHSfZUE6YmrPy9VWVZGKQYwCQ7k9AqafKqOe8NHu1WiQskE56bl+FZpGNMt7mP7QAdqVz45tGCRU/ymx27u2BDXfaW8afw/DT7T/FCEGBeb4yYb3CKvVGUCQoURsMiY5GV+hB0Cc6GejwsOZBpwMkyzM1O/2dqeGEeGBOA0g3P+8vFS2B5Q==
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#88-1788979733065",
"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" : "FXYcKN3McFaHZyBk5vH6bJIYje28UTyRPu7G3F5kWORWC0P2FZqwiigmzN39pVH8r6dLi1miNR0jgRsDg4nmAcRjf2iuOFj50pPNWK8YdgPlyo1FmwqwPQqayyXAR4hFepd6geEXt2x73ZOwDhkqzF8k7u6CIcP2NW1SViltQKOoq7fa9juT2tM8zaeBAt4hX4pJZ4byji07V5vwDixDKeCYexhjpn45001Rv7LZsVLNZ5K4k1hxgYMeZf5",
"customerPhoneNumber" : "not-a-phone",
"customerEmail" : "notanemail",
"customerName" : "xTYMmLTuDcbkeBXigIpYEBnNstDPOVsrAstNOsUvFZMdV9DWqiXcsLEb0aAg9i06eAxA5cFSz1HcaxuRkTZ67cGCwU0ZmpEi50CWfuZMc50D23bIxK913ydBWdCoPJJetFKq5vG1V7jXENKydPYgg5nzhuCRJGQqrFh386kmJl8JkVLfSpMFNR310sSQznH42Fd0bqV1kM9J1XjLmavZa1gjPMLVlYrWTImJCLpCSu0jLJALDUgqPlV145h",
"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" : {
"customerPhoneNumber" : "Wrong format",
"customerEmail" : "Wrong format",
"customerIp" : "Wrong format",
"customerId" : "length must be between 0 and 250",
"customerName" : "length must be between 0 and 250"
}
} ]
}