Связки и типы транзакций
В этом разделе описываются поддерживаемые типы транзакций по связкам.
Типы связок
Платежный шлюз позволяет создавать и использовать следующий тип связок:
Обычная – для платежей, не связанных ни с каким планом или графиком. Например, когда покупатель делает новый заказ и оплачивает его, используя ранее сохраненные данные карты.
Рекуррентная – для платежей, происходящих по фиксированному графику. Например, ежемесячные платежи за коммунальные услуги.
Тип транзакций
Транзакции по связкам принадлежат к одной из двух групп в зависимости от инициатора транзакции:
-
CIT (cardholder-initiated transactions) – транзакции электронной коммерции, в которых держатель карты принимает участие в платеже. Эта группа включает следующие виды транзакций:
- C/CI – инициирующая транзакция с сохранением обычной связки для дальнейших платежей.
- RI – инициирующая транзакция с сохранением связки для рекуррентных платежей.
- F – внеплановая транзакция, совершаемая держателем карты с использованием обычной связки.
-
MIT (Merchant-initiated Transactions) – транзакции электронной коммерции, совершаемые продавцом без участия держателя карты. В эту группу входят следующие типы транзакций:
- U – внеплановая транзакция с использованием обычной связки. Например, начисление пени. Обратите внимание, что для такой операции нет CVC или 3DS-верификации, так как владелец карты не принимает в ней участия и не может вводить какие-либо данные.
- R – последующая рекуррентная транзакция с использованием рекуррентной связки.
Тип транзакции должен передаваться в параметре tii (Transaction Intitiator Indicator, Идентификатор инициатора транзации) платежных API-запросов. Возможные значения параметра tii:
Значение tii
|
Описание | Тип транзакции | Инициатор транзакции | Данные карты для транзакции | Сохранение данных карты после транзакции | Примечание |
|---|---|---|---|---|---|---|
| Пусто | Обычный | Покупатель | Вводится покупателем | Нет | Транзакция электронной коммерции без сохранения связки. | |
| CI | Инициирующий - Обычный (CIT) | Инициирующая | Покупатель | Вводится покупателем | Да | Транзакция электронной коммерции с сохранением связки. |
| F | Внеплановый платеж (CIT) | Последующая | Покупатель | Клиент выбирает карту вместо ручного ввода | Нет | Транзакция электронной коммерции, использующая ранее сохраненную обычную связку. |
| U | Внеплановый платеж (MIT) | Последующая | Продавец | Нет ручного ввода, продавец передает данные | Нет | Транзакция электронной коммерции, использующая ранее сохраненную обычную связку. Используется только для одностадийных платежей. |
| RI | Инициирующий - Рекурентные (CIT) | Инициирующая | Покупатель | Вводится покупателем | Да | Транзакция электронной коммерции с сохранением связки. |
| R | Рекуррентный платеж (MIT) | Последующая | Продавец | Нет ручного ввода, продавец передает данные | Нет | Рекуррентная операция, использующая сохраненную связку. Используется только для одностадийных платежей. |
Первоначальная транзакция, которая создает связку, может быть выполнена как в рамках прямой интеграции, так и при интеграции через редирект. Тип интеграции влияет на то, какие требования будут предъявляться в части соответствия PCI DSS. Для дальнейшей оплаты по связке соответствие PCI DSS уже не требуется, так как данные карты не передаются.
Управление связками через API
Ниже приведены примеры создания и использования разных типов связок через API с использованием собственной платежной страницы мерчанта:
Обычные связки
Создание обычной связки
Чтобы создать обычную связку, выполните следующие шаги:
-
Выполните запрос register.do с параметром
clientId, получите в ответorderIdиformUrl.Пример запроса
register.doдля создания обычной связки:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/register.do \ --header 'content-type: application/x-www-form-urlencoded' \ --data amount=123456 \ --data userName=test_user \ --data password=test_user_password \ --data orderNumber=1234567890ABCDEF \ --data returnUrl=https://mybestmerchantreturnurl.com \ --data failUrl=https://mybestmerchantfailurl.com \ --data email=test@test.com \ --data clientId=259753456 \ --data features=FORCE_CREATE_BINDING \ --data language=en{ "orderId": "01491d0b-c848-7dd6-a20d-e96900a7d8c0", "formUrl": "https://3dsec.berekebank.kz/payment/payment/merchants/ecom/payment_en.html?mdOrder=01491d0b-c848-7dd6-a20d-e96900a7d8c0" } -
Передайте полученное значение
orderIdв параметреMDORDERзапроса paymentorder.do.Пример запроса
paymentorder.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/paymentorder.do \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data '$CVC=123' \ --data '$EXPIRY=203012' \ --data '$PAN=4000001111111118' \ --data 'TEXT=TEST CARDHOLDER' \ --data MDORDER=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \ --data userName=test_user \ --data password=test_user_password{ "redirect": "https://3dsec.berekebank.kz/payment/merchants/pay/finish.html?orderId=59e00106-1f69-76a7-b893-b27c00b4f820&lang=en", "info": "Your order is proceeded, redirecting...", "errorCode": 0 }
В результате будет создана связка для клиента с изначально указанным clientId. В результате заказ будет оплачен с помощью связки с указанным bindingId.
Оплата обычной cвязкой
Для оплаты заказа созданной обычной связкой (см. процесс создания выше) выполните следующие шаги:
- Зарегистрируйте новый заказ с помощью запроса register.do с тем же параметром
clientId, получите в ответorderId. -
Получите список cвязок с помощью запроса getBindings.do с тем же значением
clientIdи cbindingType=C→ получите в ответеbindingId.Пример запроса
getBindings.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/getBindings.do \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data userName=test_user \ --data password=test_user_password \ --data clientId=259753456 \ --data bindingType=C{ "errorCode":"0", "errorMessage":"Success", "bindings": [ { "bindingId": "b83317e0-1679-7d85-b375-a63200b4f820", "maskedPan": "411111**1111", "expiryDate": "203412", "paymentWay": "TOKEN_PAY", "paymentSystem": "CARD", "displayLabel": "XXXXXXXXXXXX1111", "bindingCategory": "COMMON" } ] } -
Выполните запрос paymentOrderBinding.do. Передайте значение
orderId(полученное на Шаге 1) в параметреmdOrder, а также передайте полученныйbindingId. Доступные значенияtii:F,U.Пример запроса
paymentOrderBinding.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/paymentOrderBinding.do \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data mdOrder=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \ --data ip=127.0.0.1 \ --data cvc=123 \ --data bindingId=b83317e0-1679-7d85-b375-a63200b4f820 \ --data userName=test_user \ --data password=test_user_password \ --data language=en \ --data tii=F{ "redirect": "https://3dsec.berekebank.kz/payment/merchants/pay/finish.html?orderId=24c3d392-4c60-7f0b-9ff5-b00100b4f820&lang=en", "info": "Your order is proceeded, redirecting...", "errorCode": 0 }
В результате заказ будет оплачен с помощью связки с указанным bindingId.
Рекуррентные связки
Создание рекуррентной связки
Чтобы создать рекуррентную связку, выполните следующие шаги:
-
Выполните запрос register.do с параметром
clientId, получите в ответorderIdиformUrlПример запроса
register.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/register.do \ --header 'content-type: application/x-www-form-urlencoded' \ --data amount=123456 \ --data userName=test_user \ --data password=test_user_password \ --data orderNumber=1234567890ABCDEF \ --data returnUrl=https://mybestmerchantreturnurl.com \ --data failUrl=https://mybestmerchantfailurl.com \ --data email=test@test.com \ --data clientId=259753456 \ --data features=FORCE_CREATE_BINDING \ --data language=en \'{ "orderId": "01491d0b-c848-7dd6-a20d-e96900a7d8c0", "formUrl": "https://3dsec.berekebank.kz/payment/payment/merchants/ecom/payment_en.html?mdOrder=01491d0b-c848-7dd6-a20d-e96900a7d8c0" } -
Передайте полученное значение
orderIdв параметреMDORDERзапроса paymentorder.do. Необходимо передать дополнительные параметрыrecurringFrequencyиrecurringExpiry(верификация не проводится, но эта информация используется банком, выпустившим карту).Пример запроса
paymentorder.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/paymentorder.do \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data '$CVC=123' \ --data '$EXPIRY=203012' \ --data '$PAN=4000001111111118' \ --data 'TEXT=TEST CARDHOLDER' \ --data MDORDER=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \ --data userName=test_user \ --data password=test_user_password \ --data language=en \ --data 'jsonParams={"recurringFrequency": "1", "recurringExpiry":"20261231"}'{ "errorCode": 0, "is3DSVer2": true, "threeDSServerTransId": "efa8e3ce-a4a6-49f8-b422-df781de18119", "threeDSMethodURLServer": "https://3dsec.berekebank.kz/payment/client/gather?threeDSServerTransID=efa8e3ce-a4a6-49f8-b422-df781de18119" }
В результате будет создана связка для клиента с изначально указанным clientId.
Оплата рекуррентной cвязкой
Для оплаты заказа созданной рекуррентной связкой (см. процесс создания выше) используйте следующую последовательность запросов:
-
Получите список связок, используя запрос getBindings.do с тем же параметром
clientIdи сbindingType=R→ получите в ответеbindingId.Пример запроса
getBindings.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/rest/getBindings.do \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data userName=test_user \ --data password=test_user_password \ --data clientId=259753456 \ --data bindingType=R{ "errorCode":"0", "errorMessage":"Success", "bindings": [ { "bindingId": "44779116-41a5-7798-b072-c0a30760e2b0", "maskedPan": "411111**1111", "expiryDate": "203412", "paymentWay": "TOKEN_PAY", "paymentSystem": "CARD", "displayLabel": "XXXXXXXXXXXX1111", "bindingCategory": "RECURRENT" } ] } -
Выполните запрос recurrentPayment.do с полученным
bindingId, чтобы зарегистрировать и оплатить заказ.Пример запроса
recurrentPayment.do:curl --request POST \ --url https://3dsec.berekebank.kz/payment/recurrentPayment.do \ --header 'Content-Type: application/json' \ --data '{ "userName": "test_user", "password": "test_user_password", "orderNumber": "UAF-203974-DE-12 "language": "EN", "bindingId": "44779116-41a5-7798-b072-c0a30760e2b0", "amount": 12300, "currency": "398", "description" : "Test description", "additionalParameters": { "firstParamName": "firstParamValue", "secondParamName": "secondParamValue" } }'{ "success": true, "data": { "orderId": "9adaa8f0-3b5a-742f-80b4-172200b40dc0" }, "orderStatus": { "errorCode": "0", "orderNumber": "9003", "orderStatus": 2, "actionCode": 0, "actionCodeDescription": "", "amount": 12300, "currency": "398", "date": 1618338779501, "orderDescription": "Test description", "merchantOrderParams": [ { "name": "firstParamName", "value": "firstParamValue" }, { "name": "secondParamName", "value": "secondParamValue" } ], "transactionAttributes": [], "attributes": [ { "name": "mdOrder", "value": "9adaa8f0-3b5a-742f-80b4-172200b40dc0" } ], "cardAuthInfo": { "maskedPan": "400000**1118", "expiration": "202612", "cardholderName": "TEST CARDHOLDER", "approvalCode": "123456", "paymentSystem": "VISA", "product": "visa-product", "secureAuthInfo": { "eci": 7 }, "pan": "400000**1118" }, "bindingInfo": { "clientId": "test-client", "bindingId": "3080a436-02a0-75c2-a2ce-41be00b40dc0" }, "authDateTime": 1618338779790, "authRefNum": "111111111111", "paymentAmountInfo": { "paymentState": "DEPOSITED", "approvedAmount": 12300, "depositedAmount": 12300, "refundedAmount": 0, "totalAmount": 12300 }, "bankInfo": { "bankName": "ES TEST BANK", "bankCountryCode": "ES", "bankCountryName": "Spain" }, "chargeback": false, "operations": [ { "amount": 12300, "cardHolder": "TEST CARDHOLDER", "authCode": "123456" } ] } }В результате заказ будет оплачен с помощью связки с указанным
bindingId.