Для осуществления электронного платежа, плательщик должен в какой-то момент ввести данные своей карты. Вводить эти данные плательщик может как на странице торговца (мерчанта), так и на странице, которую предоставляет Flexo (далее платежной странице). Если торговец сам собирает данные карт, то он должен соответствовать требованиям стандарта безопасности PCI DSS (что бывает достаточно редко). При оплате с помощью платежной страницы таких ограничений нет, к тому же большинство операций по обеспечению процедуры 3ds платежная страница берет на себя. Поэтому такой способ оплаты выглядит более предпочтительным и является основным.
Порядок взаимодействия через платежную страницу с процедурой 3ds
-
Торговец создает ссылку на платежную страницу с помощь операции
createPaymentLink. На полученную ссылку торговец переправляет плательщика. -
Плательщик открывает ссылку (в своем браузере) и попадает на платежную страницу. Он видит сумму платежа и название интернет магазина. В открывшейся форме он заполняет реквизиты карты и дополнительные поля, количество которых может варьироваться в зависимости от настроек.
-
Плательщик перенаправляется на страницу банка выпустившего карту и вводит одноразовый пароль (OTP), который он должен получить на сотовый телефон (другим способом, предусмотренный банком).
-
После успешного ввода пароля на странице банка, плательщик перенаправляется обратно на платежную страницу. Это важный шаг, если возврат не выполнен - платеж останется незавершенным. На платежной странице плательщик видит статус операции:
-
платеж проведен
-
платеж отклонен
-
платеж отклонен, но позволено ввести данные другой карты. На это обычно дается 3 попытки.
-
-
После оплаты плательщик может перейти (по кнопке) на страницу торговца (в интернет магазин). Возврат в магазин опционален и не влияет на факт оплаты.
-
После завершения оплаты торговец получает уведомление (callback) со статусом платежа.
Примеры запросов и ответов
Создание ссылки на платежную страницу (createPaymentLink)
Успешный запрос
POST /paymentpageapi/1-7/create_payment_link HTTP/1.1
x-RequestId: acc-test-a60dae46-24a6-4d46-bae5-8adab7e94df2
x-RequestId: acc-test-a60dae46-24a6-4d46-bae5-8adab7e94df2
W1-Signature: w4c2Y3t9g9wf1Jg9xVZ/Kny6P86FDRRTJFw2WzrnISOHNIpG1pYz5zgcUFQ5RtZrDwWg7GN/1JJ6lsjV0nGgf9vUTyFVtBBMClugd9eE/miIOFZTtxdtRvjdsXLRn1EDD1HnS3euSPjGR/uMj4HZNXAN21qyAX/oQPtR/zqQHCoXuWgR4fn12wUHFqA37ktNW5DNHrM13B3TogOkZbYk8BQWb7JNtVKeJDcZmADFePLgOOe/zK7xT/xuHyho5ZeTrROs01Q2MeXPPSnFhqbgqsa5S4GST8aaDnGy2QdXiRVOaqTRkGCSv9MewB6O8lSVGOdlkY6Kd4v8gvjFlyvVWQ==
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#97-1791069098736",
"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/MS03X1pYaDBJemszTFRFM09URXdOamt3T1RnM016WT1fMS03LWEtODZfWVdOakxYUmxjM1F0WVRZd1pHRmxORFl0TWpSaE5pMDBaRFEyTFdKaFpUVXRPR0ZrWVdJM1pUazBaR1l5",
"operationId" : "1-7-a-86"
}
Запрос с ошибкой валидации
POST /paymentpageapi/1-7/create_payment_link HTTP/1.1
x-RequestId: acc-test-dde7954c-37c7-4242-9a06-062f63a769c4
x-RequestId: acc-test-dde7954c-37c7-4242-9a06-062f63a769c4
W1-Signature: kYQrPY1QpK59II5v7ZXhP7agCJWGmU7qkIQlYFZLHuh1Ez0AmDTseiDga/byRqvS08nV/eGMd6xafCYY77IE1iV4JeC+IlzvMeHXvJl56XkP9Y/4WHysl+LKYEpOPQoZmsw4pCFEHLwivG5Tm6AKqmcWmm0EO2NK3WUraZpPuGT6bujfmmHAhviDtxuYq70zcNp8q6wCSB42NYfS/OfpY77VBtMnP0WC6E9ba8i2iNuL0QVSG5erf4M409BtEOPUgDuiW234DZdGCUN6QylfQLvsiW/PjB7YNJgWwf6Nf2geb9UyAZGJQ1YO1u90zLC8TPgVMu1W1pQwPio/78n9og==
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#90-1791069096959",
"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" : "AF2FEBTfjm1pTmf4i1VWOdk3IYPIJjoCNDJR2zVdppUeptoh6rr1NqktsI475alkxbfqp7XkKotw9ClBcXQ6vbF2jN4vAMkM2kxykPDSw9nC9mNxrFt7Cq5TllgLtwp3lTCTIGnrGn5dvMaDZW2djIuYYUMSawrsPG3wrjfgh1UUIzFjVB3XLozMvH682cU8tipqE4gSyY5Oa37dDNbREcgnadWEjSe28xKwHygCxDkA3B7HsmCQmGR49kn",
"customerPhoneNumber" : "not-a-phone",
"customerEmail" : "notanemail",
"customerName" : "0fINUxa7AaUpzyxNmuS4zxPCkyMbLsTdNrqOEDxzo9Len9Rz0Bbal5K7KJ7FEhOv4OznS9GRWg8xxdNXBJQNkzgQYJuigQ9ssFyUqGi8OE33mvkyZIlwx2Bl7Osqq0Jo4u8BEfaze5sREkW6KO7o7kFJvYzaMD9NfMXWXxbDffGNYMhfIwtP1BoSQ0ldyu9TkJHhwNVPaTR3WnZkHFL0flDoJ86XchpP7D8eH0hY0MppWyJSNs7yPZwDoUO",
"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",
"customerName" : "length must be between 0 and 250",
"customerId" : "length must be between 0 and 250",
"customerIp" : "Wrong format",
"customerEmail" : "Wrong format"
}
} ]
}