Перейти к основному содержимому

Виджет платежной формы

Виджет платежной формы позволяет провести оплату.

Добавьте виджет на страницу, и дальше пользователь взаимодействует с виджетом.

Как провести платеж через форму оплаты

Как добавить виджет на страницу

1. Подключите скрипты и стили

<!-- На тестовой среде -->
<link href="https://widget-demo.zetplat.com/payment-widget.css" rel="stylesheet" />
<script src="https://widget-demo.zetplat.com/payment-widget.js" defer></script>
<!-- Для реальных платежей -->
<link href="https://widget.zetplat.com/payment-widget.css" rel="stylesheet" />
<script src="https://widget.zetplat.com/payment-widget.js" defer></script>

2. Добавьте контейнер с виджетом

<div id="zetplat-payment-form"></div>

3. Создайте экземпляр виджета

После подключения скрипта к странице в глобальной области видимости появится класс ZetplatPaymentForm. Для создания платежной формы передайте в конструктор публичный токен, полученный для работы с этим виджетом.

const paymentForm = new ZetplatPaymentForm('public token');

Для отображения платежной формы вызовите метод render():

paymentForm.render();

API виджета

ZetplatPaymentForm

Конструктор класса платежной формы.

const paymentForm = new ZetplatPaymentForm(publicToken[, options])
ПараметрТипОписание
publicTokenstringПубличный токен (обязательный)
optionsobjectДополнительные настройки
options.containerHTMLElementКонтейнер, в который будет вставлена форма.
Значение по умолчанию:
<div id="zetplat-payment-form"></div>

Метод paymentForm.render()

Метод отображает форму на странице, в контейнере, определенном параметром options.container.

paymentForm.render([options])
ПараметрТипОписание
optionsobjectДополнительные настройки
options.containerHTMLElementКонтейнер, в который будет вставлена форма.
Значение по умолчанию:
<div id="zetplat-payment-form"></div>

Обработчик события paymentForm.onReady

Обработчик события готовности формы к работе.

paymentForm.onReady = function () { /* обработчик */ }

Обработчик события paymentForm.onPaymentStart

Обработчик события при старте процесса оплаты.

paymentForm.onPaymentStart = function () { /* обработчик */ }

Обработчик события paymentForm.onPaymentSuccess

Обработчик события при успешном завершении процесса оплаты.

paymentForm.onPaymentSuccess = function () {
/* обработчик */
};

Обработчик события paymentForm.onPaymentFail

Обработчик события при неуспешном завершении процесса оплаты.

paymentForm.onPaymentFail = function (error) { /* обработчик */ }

Обработчик события paymentForm.onDestroy

Обработчик события закрытия формы.

paymentForm.onDestroy = () => {
/* обработчик */
}

Настройка виджета

Маскировка кода CVV/CVC при вводе

Вы можете настроить поле ввода кода CVV/CVC таким образом, чтобы пользователь при вводе видел только последнюю введенную цифру, а остальные введенные цифры отображались как *. Для этого добавьте в конструктор класса платежной формы флаг isCvcMasked:

const paymentForm = new ZetplatPaymentForm('publicToken', {
isCvcMasked: true,
});

Управление открытием окна 3DS

Вы можете открыть окно 3DS для пользователя несколькими способами с помощью параметра target объекта customerInteractionRedirect:

  • _blank - в новой вкладке,
  • _self - в том же фрейме,
  • _parent - во фрейме выше уровнем, если фреймы вложены один в другой,
  • _top - поверх всех фреймов.
    Значение по умолчанию: _top.

Обратите внимание:

  • Мы не рекомендуем использовать значение _self из соображений безопасности.
  • Если вы используете значение _blank, пользователю будет нужно разрешить всплывающие окна в браузере или перейти по ссылке из окна виджета.

Скрытие поля имени владельца карты

Чтобы скрыть поле Cardholder, передайте параметр hideCardHolderField: true. По умолчанию поле отображается.

Внешний вид

Подключив собственные стили после стилей библиотеки, вы можете таким образом переопределить их.

<link href="https://widget.zetplat.com/payment-widget.css" rel="stylesheet" />
<link href="custom-styles.css" rel="stylesheet" />

Настроить внешний вид значений, которые вводятся в форму внутри iframe, пока нельзя. Позже такая возможность появится.

Также есть возможность отредактировать текстовое содержимое различных элементов виджета оплаты. Можно поменять:

  • метки полей ввода,
  • тексты плейсхолдеров,
  • тексты ошибок,
  • тексты подписей под полями ввода,
  • метки кнопок,
  • текст футера.

Для этого надо передать объект options с параметрами элементов виджета в конструкторе класса платежной формы ZetplatPaymentForm.

Элемент виджетаПараметрТипЗначение по умолчанию
Настройка текстов виджетаtextsobject
Экран неуспешной оплатыfailedPaymentScreenstringError
Форма оплатыpaymentFormobject
Кнопка оплатыbuttonPayLabelstringPay
Метка поля держателя картыcardholderLabelstringCardholder
Подсказка к полю держателя картыcardholderNotestringотсутствует
Плейсхолдер поля держателя картыcardholderPlaceholderstringFull name
Метка поля номера картыcardNumberLabelstringCard number
Подсказка к полю номера картыcardNumberNotestringотсутствует
Плейсхолдер поля номера картыcardNumberPlaceholderstring0000 0000 0000 0000
Метка поля секретного кода картыcvvLabelstringCVC
Подсказка к полю секретного кода картыcvvNotestringотсутствует
Плейсхолдер поля секретного кода картыcvvPlaceholderstringCVC
Метка поля срока действия картыexpireDateLabelstringExpiration date
Подсказка к полю срока действия картыexpireDateNotestringAs stated on the card
Плейсхолдер поля срока действия картыexpireDatePlaceholderstringMM/YY
Метка чекбокса согласия на автоплатежиrecurrentLabelstringI agree to recurring payments
Согласие с условиями
Текст предупреждения о согласии с условиями.
Разметка {{#link}}{{/link}} обязательна, ей выделяется часть фразы, которая будет преобразована в ссылку на соглашение.
termsAgreementstringBy pressing Pay, you accept the terms of our {{#link}}user agreement{{/link}}
Ошибки валидации полейvalidationErrorsobject
Ошибка в номере карточного номераinvalidCardNumberstringInvalid card number
Ошибка в секретном коде картыinvalidCvvstringCVV/CVC has 3 digits
Ошибка в сроке действия картыinvalidExpiryDatestringInvalid date
Не заполнено обязательное полеisRequiredstringRequired field
Экран процесса оплатыpaymentProcessScreenobject
Описание экрана процесса оплатыdescriptionstringJust a moment
Заголовок экрана процесса оплатыtitlestringPayment processing...
Экран перенаправления на страницу банка (3D Secure)redirectionScreenobject
Предложение перейти по ссылке, если автоматического перенаправления не произошло.
Разметка {{#link}}{{/link}} обязательна, ей выделяется часть фразы, которая будет преобразована в ссылку.
followTheLinkstringIf you haven't been redirected automatically, use {{#link}}this link.{{/link}}
Заголовок экрана процесса оплатыtitlestringPayment processing...
Предупреждение об автоматическом перенаправлении с обратным отсчетом от 3-х секунд.
Переменная {{countdown}} обязательна, вместо нее подставляется отсчет обратного времени.
Разметкой {{#strong}}{{/strong}} можно выделить жирным шрифтом счетчик времени
waitForRedirectToBanksPagestringYou will be redirected to the issuer bank's page in {{#strong}}{{countdown}} seconds.{{/strong}}
Экран успешной оплатыsuccessPaymentScreenobject
Заголовок экрана успешной оплатыtitlestringPayment success
Информация о транзакцииtransactionDataobject
Метка суммыamountLabelstringAmount
Метка информации о способе оплаты (тип и маскированный номер карты)creditCardLabelstringCard
Метка ID транзакцииtransactionIdLabelstringTransaction ID
Неизвестная ошибкаunknownErrorstringSomething went wrong...

Пример кода для изменения текстов:

const paymentForm = new ZetplatPaymentForm('<public token>', {
isCvcMasked: true,

texts: {
failedPaymentScreen: {
title: 'Error',
},

paymentForm: {
buttonPayLabel: 'Pay',

cardholderLabel: 'Cardholder',
cardholderNote: '',
cardholderPlaceholder: 'Full name',

cardNumberLabel: 'Card number',
cardNumberNote: '',
cardNumberPlaceholder: '0000 0000 0000 0000',

cvvLabel: 'CVC',
cvvNote: '',
cvvPlaceholder: 'CVC',

expireDateLabel: 'Expiration date',
expireDateNote: '',
expireDatePlaceholder: 'As stated on the card',

recurrentLabel: 'I agree to recurring payments',

termsAgreement:
'By pressing Pay, you accept the terms of our {{#link}}user agreement{{/link}}',

validationErrors: {
invalidCardNumber: 'Invalid card number',
invalidCvv: 'CVV/CVC has 3 digits',
invalidExpiryDate: 'Invalid date',
isRequired: 'Required field',
},
},

paymentProcessScreen: {
description: 'Just a moment',
title: 'Payment processing...',
},

redirectionScreen: {
followTheLink:
'If you haven`t been redirected automatically, use {{#link}}this link.{{/link}}',
title: 'Payment processing...',
waitForRedirectToBanksPage:
'You will be redirected to the issuer bank`s page in {{#strong}}{{countdown}} seconds.{{/strong}}',
},

successPaymentScreen: {
title: 'Payment success',
},

transactionData: {
amountLabel: 'Amount',
creditCardLabel: 'Card',
transactionIdLabel: 'Transaction ID',
},

unknownError: 'Something went wrong...',
},
});

Ошибки для конечных пользователей

При взаимодействии с виджетом, конечные пользователи могут получать ошибки, описанные ниже.

Код ошибкиОписание ошибки
3DS_errorПроблемы с прохождением 3DS
activity_count_exceededДостигнут лимит по сумме или количеству операций для карты/кошелька
bank_card_expiredКарта просрочена
declined_by_issuer_bankБанк, выпустивший карту, отклонил операцию
insufficient_fundsНедостаточно средств на карте