card_h2h
Интерфейс Host-to-Host позволяет мерчанту максимально гибко интегрировать прием оплат при помощи платежных карт, так как интерфейс не использует внешнюю платежную страницу и мерчант не ограничен в дизайне собственного пользовательского платежного интерфейса. Главное требование к мерчанту – наличие сертификата PCI DSS соответствующего уровня.
Для приема оплаты через интерфейс host-to-host необходимо выполнить следующие шаги:
- Отправить запрос на создание платежа card_h2h.create;
- Открыть полученную ссылку
acs_urlу себя на странице в iframe. Данную ссылку можно получить из колбека на указанный при создании платежаcallback_urlили запросив статус платежа используя метод status; - После успешного прохождения плательщиком 3DS аутентификации будет отправлен callback об успешном выполнении платежа. Если
callback_urlне указан, статус платежа можно запросить используя метод status.
Список созданных Host-to-Host платежей можно получить по запросу history.card_h2h.
card_h2h.create
Входящие параметры метода необходимые для создания Host-to-Host платежа:
| Параметр | Обязательный параметр | Тип | Пример | Описание |
|---|---|---|---|---|
| amount | да | str | "150.75" |
сумма платежа |
| card_data | да | object | {...} |
данные карты (детальное описание этого параметра представленно ниже) |
| currency | да | str | "UAH" |
трехбуквенный код валюты платежа (согласно ISO 4217) |
| externalid | да | str | "1234567890" |
уникальный идентификатор платежа |
| return_card_token | да | bool | true |
флаг, указывающий необходимо ли токенизировать карту используемую для платежа |
| browser_info | нет | dict | {...} |
Информация браузера плательщика |
| callback_url | нет | str | "https://any_money.redirect.com" |
URL-адрес, на который будет отправляться информация об изменении состояния платежа. Если данный параметр не передан, то сообщения будут отправлять на callback url указанный в разделе “Настройки” в Личном Кабинете мерчанта |
| client_email | нет | str | "[email protected]" |
адрес электронной почты плательщика |
| client_ip | нет | str | "192.168.0.0" |
IP адрес плательщика |
| failure_url | нет | str | "https://any_money.redirect.com" |
URL-адрес для перенаправления плательщика в случае неуспешного завершения оплаты |
| merchant_payfee | нет | str | "0.55" |
часть от общей суммы комиссии за платеж, которую оплачивает мерчант. Значение должно быть в интервале [0..1] c точностью до двух знаков после запятой. По умолчанию указывается "0" |
| success_url | нет | str | "https://any_money.redirect.com" |
URL-адрес для перенаправления плательщика в случае успешного завершения оплаты |
Использование success_url и failure_url
Используются для сценариев прохождения 3DS верификации платежа вне страницы мерчанта с последующим возвратом на страницу успешного завершения платежа (либо на страницу ошибки завершения платежа) на стороне мерчанта.
Данные карты передаются в параметре card_data в следующем виде:
| Параметр | Обязательный параметр | Тип | Пример | Описание |
|---|---|---|---|---|
| card_number | да | str | "5827037218673202" |
номер карты |
| expiry_month | да | str | "06" |
месяц истечения срока действия (формат MM) |
| expiry_year | да | str | "34" |
год истечения срока действия (формат YY) |
| security_code | да | str | "492" |
3-х или 4-х значный код проверки подлинности карты |
Параметры ответа на запрос создания платежа:
| Параметр | Обязательный параметр | Тип | Пример | Описание |
|---|---|---|---|---|
| account_amount | да | str | "145.50" |
сумма зачисления на счёт мерчанта в валюте платежа за вычетом комиссии |
| amount | да | str | "150.75" |
сумма платежа |
| callback_url | да | str | "https://any_money.redirect.com" |
URL-адрес, на который будет отправляться информация об изменении состояния платежа. Если данный параметр не передан, то сообщения будут отправлять на callback url указанный в разделе “Настройки” в Личном Кабинете мерчанта |
| ctime | да | bigint | 1652701264396 |
время создания платежа (timestamp) |
| currency | да | str | "UAH" |
трехбуквенный код валюты платежа (согласно ISO 4217) |
| да | str or null | "[email protected]" |
адрес электронной почты плательщика, указанный при создании платежа. Будет null если адрес не был указан при создании |
|
| externalid | да | str | "1234567890" |
уникальный идентификатор созданного платежа, заданный мерчантом |
| fee_amount | да | str | "5.25" |
сумма комиссии в валюте платежа |
| lid | да | int | 47893 |
уникальный идентификатор созданного платежа в системе AnyMoney |
| merchant_payfee | да | str | "0.55" |
часть от общей суммы комиссии за платеж, которую оплачивает мерчант. Значение в интервале [0..1] c точностью до двух знаков после запятой |
| owner | да | int | 26 |
уникальный идентификатор мерчанта, создавшего пополнение |
| status | да | enum | "new" |
текущий статус платежа (в данном случае, всегда будет new) |
Список возможных ошибок
- EStateCardPayinUnavail
- Данный метод недоступен
- EParamType
- Неверный тип данных
- EParamCurrencyInvalid
- Указана недоступная валюта платежа
- EParamInvalid
- Указано неверное значение переданного параметра
Параметры callback-ответа:
| Параметр | Обязательный параметр | Тип | Пример | Описание |
|---|---|---|---|---|
| account_amount | да | str | "145.50" |
сумма зачисления на счёт мерчанта в валюте платежа за вычетом комиссии |
| amount | да | str | "150.75" |
сумма платежа |
| ctime | да | bigint | 1652701264396 |
время создания платежа (timestamp) |
| currency | да | str | "UAH" |
трехбуквенный код валюты платежа (согласно ISO 4217) |
| да | str or null | "[email protected]" |
адрес электронной почты плательщика, указанный при создании платежа. Будет null если адрес не был указан при создании |
|
| externalid | да | str | "1234567890" |
уникальный идентификатор созданного платежа, заданный мерчантом |
| fee_amount | да | str | "5.25" |
сумма комиссии в валюте платежа |
| lid | да | int | 47893 |
уникальный идентификатор созданного платежа в системе AnyMoney |
| merchant_payfee | да | str | "0.55" |
часть от общей суммы комиссии за платеж, которую оплачивает мерчант. Значение в интервале [0..1] c точностью до двух знаков после запятой |
| owner | да | int | 26 |
уникальный идентификатор мерчанта, создавшего пополнение |
| status | да | enum | "wait" |
текущий статус платежа, один из следующих: wait, done, fail, expired |
| tp | да | str | "card_h2h" |
тип платежа (всегда будет card_h2h) |
| acs_url | нет | str | "https://any.money/form/uxcERpIwkYLicBZGHr6jczDcLnCgQQBd6yPEOQd8bV_wyrTbPo2q2YRwVaBtb_P6m4_R" |
URL-адрес, на который нужно перенаправить плательщика для прохождения 3DS аутентификации. Возвращается только для платежа в статусе wait |
| card_mask | нет | str | "582703******3202" |
замаскированный номер карты, при помощи которой выполнялся платёж. Возвращается только в случае успешного завершения платежа (статус done) |
| card_token | нет | str | "4929a4cf-c2иe-5da9-b210-161b553a03a8" |
токен карты, при помощи которой выполнялся платёж. Возвращается только в случае успешного завершения платежа (статус done) и если при создании был указан "return_card_token": true |
| ftime | нет | bigint | 1655134605974 |
время финализации платежа (timestamp). Возвращается только для финализированных платежей в статусах done, fail, expired |
iFrame
Пример реализации iframe и обработки его событий на странице-хосте:
// Call create3DSIframe
function create3DSIframe(acs_url) {
initPostMessageListener();
const containerId = 'frame-wrapper-3ds'; // is html element(wrapper) for iframe
const nodeIframe = document.createElement('iframe');
nodeIframe.src = acs_url;
document.getElementById(containerId).appendChild(nodeIframe);
}
function handlePaymentSuccess() {
// Add success handler
// For example: show success notification, close modal, display final payment status
}
function handlePaymentError() {
// Add error handler
// For example: show error notification, display payment form
}
// Event listener that handles final payment status
function postMessageListener(event) {
const typeMessage = event.data.func;
const status = event.data.args[0];
if (typeMessage === 'finalPayment') { // check for final status only
if (status === 'success') {
handlePaymentSuccess();
} else if (status === 'fail') {
handlePaymentError();
}
removePostMessageListener();
}
}
function initPostMessageListener() {
window.addEventListener('message', postMessageListener);
}
function removePostMessageListener() {
window.removeEventListener('message', postMessageListener);
}