Checkout¶
Checkout — решение, которое позволяет встроить готовую платёжную форму на ваш веб-сайт.
Варианты реализации¶
Использование инвойса¶
Сценарий описан в данной статье (см. случай, когда оплата производится с платёжной формы XPAY).
Ниже приведены:
- список возможных атрибутов для управления внешним видом и поведением платёжной формы;
- пример встраивания Checkout для HTML/JS;
HTML и JS¶
В данной таблице содержится список атрибутов, которые можно использовать как для HTML, так и для JS.
data-* атрибут HTML | Свойство конфигурации JS | Описание | Обязательность | Возможные значения |
---|---|---|---|---|
data-invoice-id | invoiceID | Идентификатор инвойса | + | oVU2LzUCbQ |
data-invoice-access-token | invoiceAccessToken | Ключ доступа к инвойсу | + | eyJhbGciOiJSUzI1N… |
data-name | name | Наименование компании или сайта | - | Company name |
data-description | description | Описание продукта или сервиса | ||
data-email | email покупателя, будет предзаполнен на форме | - | example@mail.com | |
data-obscure-card-cvv | obscureCardCvv | Затенять карточный CVV-код | - | true/false |
data-require-card-holder | requireCardHolder | Требовать от покупателя заполнять поле «card holder» | - | true/false |
data-locale | locale | Настройка локализации платёжной формы | - | auto/ru/en |
data-popup-mode | popupMode | Открывать Checkout в новой вкладке браузера | - | true/false |
data-recurring | recurring | Признак рекуррентного платежа | - | true/false |
HTML¶
В данной таблице содержится список атрибутов, которые можно использовать только для HTML.
data-* атрибут | Описание | Обязательность | Возможные значения |
---|---|---|---|
data-label | Текст кнопки открытия формы | - | Pay with XPAY |
<form action="https://<your-server-side>" method="GET">
<script src="https://checkout.xpay.by/checkout.js" class="xPay-checkout"
data-invoice-id="string"
data-invoice-access-token="string"
data-name="Company name"
data-description="Some product"
data-label="Pay with XPAY">
</script>
</form>
С помощью form
можно задать url для callback’a об успешном проведении платежа.
JS¶
В данной таблице содержится список атрибутов, которые можно использовать только для JS.
Свойство конфигурации | Описание | Обязательность | Возможные значения |
---|---|---|---|
opened | callback’a об открытии окна Checkout | - | function |
closed | callback о закрытии окна Checkout | - | function |
finished | callback об успешном проведении платежа | - | function |
const checkout = xPayCheckout.configure({
invoiceID: 'string',
invoiceAccessToken: 'string',
name: 'Company name',
description: 'Some product',
opened: function () {
console.log('Checkout opened');
},
closed: function () {
console.log('Checkout closed');
},
finished: function () {
console.log('Payment successful finished');
}
});
document.getElementById('customButton').addEventListener('click', function () {
checkout.open();
});
window.addEventListener('popstate', function () {
checkout.close();
});
Использование шаблона инвойса¶
Шаблон инвойса позволяет совершать произвольное количество платежей с идентичными параметрами без необходимости создавать счёт для каждого из них.
Сценарий использования Checkout в данном случае аналогичен тому, что описан для создания инвойса. Однако, вместо метода createInvoice используется createInvoiceTemplate.
Список возможных атрибутов немного отличается от приведённого в данном разделе. Различия описаны таблицами ниже. В остальном наборы атрибутов идентичны.
При оплате шаблона инвойса покупатель может самостоятельно указать сумму. Возможность указания произвольной суммы задается при вызове createInvoiceTemplate: см. price
→ costType
для templateType:InvoiceTemplateSingleLine
.
Сумму также допускается предзаполнить (без возможности ее редактирования на форме оплаты).
HTML¶
Данная таблица отражает различия в использовании атрибутов для HTML.
data-* атрибут (инвойс) | data-* атрибут (шаблон инвойса) |
---|---|
data-invoice-id | data-invoice-template-id |
data-invoice-access-token | data-invoice-template-access-token |
JS¶
Данная таблица отражает различия в использовании атрибутов для JS.
data-* атрибут (инвойс) | data-* атрибут (шаблон инвойса) |
---|---|
invoiceID | invoiceTemplateID |
invoiceAccessToken | invoiceTemplateAccessToken |
HTML и JS¶
Для того чтобы предзаполнить сумму оплаты для покупателя, необходимо передать нижеописанный параметр.
data-* атрибут HTML | Свойство конфигурации JS | Описание | Тип |
---|---|---|---|
data-amount | amount | Сумма к оплате в минорных денежных единицах, например в копейках (в случае указания белорусских рублей в качестве валюты) | integer |
Рекуррентный платеж¶
Описание рекуррентных платежей и сценарии их использования отражены в данной статье.
Список возможных атрибутов при создании подобного платежа немного отличается от приведённого в данном разделе: требуется передать идентификатор плательщика и ключ доступа к операциям с использованием принадлежащего ему источника денежных средств. Различия описаны таблицами ниже. В остальном наборы атрибутов идентичны.
HTML¶
Данная таблица отражает различия в использовании атрибутов для HTML.
data-* атрибут (инвойс) | data-* атрибут (шаблон инвойса) |
---|---|
data-invoice-id | data-customer-id |
data-invoice-access-token | data-customer-access-token |
JS¶
Данная таблица отражает различия в использовании атрибутов для JS.
data-* атрибут (инвойс) | data-* атрибут (шаблон инвойса) |
---|---|
invoiceID | customerID |
invoiceAccessToken | customerAccessToken |
HTML и JS¶
Для того чтобы обозначить платеж в качестве родительского, необходимо передать нижеописанный параметр.
data-* атрибут HTML | Свойство конфигурации JS | Описание | Возможные значения | Значение по умолчанию |
---|---|---|---|---|
recurring | data-recurring | Признак выполнения рекуррентного платежа | true/false | false |
Платеж с удержанием (холдированием) денежных средств¶
Вышеописанные варианты реализации подразумевают одноэтапный или двухэтапный процесс проведения платежа при оплате инвойса/шаблона инвойса.
Одноэтапное проведение говорит о немедленном списании денежных средств с покупателя. Двухэтапное — об их временном удержании (холдировании) до момента подтверждения покупки мерчантом: подробности см. в описании раздела «Подтвердить или отменить оплату заказа» данного руководства пользователя.
Для проведения платежа с удержанием средств необходимо:
- передать соответствующий атрибут со значением
true
; - выбрать политику, которая будет применена по истечении срока удержания денежных средств:
В остальном список возможных атрибутов не отличается от приведённых в разделе «Использование инвойса»/«Использование шаблона инвойса»/«Рекуррентный платеж» (в зависимости от выбранного вида оплаты).
HTML и JS¶
Для того чтобы захолдировать денежные средства покупателя, необходимо передать нижеописанные атрибуты.
data-* атрибут HTML | Свойство конфигурации JS | Описание | Возможные значения |
---|---|---|---|
data-payment-flow-hold | paymentFlowHold | Признак холдирования средств | true/false |
data-hold-expiration | holdExpiration | Политика управления захолдированными средствами | cancel/capture |
Ограничения¶
- Checkout позволяет получить callback только об успешном завершении платежа: callback о других состояниях платежа не поддерживается.
- В случае неуспешной попытки проведения платежа покупателю будет предложено вновь совершить оплату. Количество попыток не ограничено в рамках действия времени жизни инвойса/шаблона инвойса.
Частые ошибки¶
Блокировка функции открытия Сheckout¶
Не вызывайте функцию открытия Сheckout в callback. Большинство мобильных браузеров блокируют подобное поведение. Открытие нового окна должно происходить в результате действия пользователя.
// Будет работать:
document.getElementById("button").addEventListener("click", function() {
checkout.open();
});
// Не будет работать:
document.getElementById("button").addEventListener("click", function() {
someFunction().then(function() {
checkout.open();
});
});
«xPayCheckout is not defined»¶
При некорректном встраивании Checkout в код страницы оплаты может возникать ошибка «xPayCheckout is not defined». Она связана с тем, что вы вызываете функцию xPayCheckout.configure()
до полной инициализации DOM. Используйте подходящие вам практики, для того чтобы обеспечить вызов платежной формы после полной инициализации модели документа.
Частный случай решения этой задачи с использованием jquery
, указывающий направление ее решения, может выглядеть так:
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script type="text/javascript" src="https://checkout.xpay.by/checkout.js"></script>
</head>
<body>
<script>
$(function() {
$('#xPay-checkout').on('click', function(e) {
e.preventDefault();
const checkout = initCheckout('{INVOICE_ID}', '{INVOICE_ACCESS_TOKEN}');
checkout.open();
});
function initCheckout(invoiceID, invoiceAccessToken) {
return xPayCheckout.configure({
invoiceID: invoiceID,
invoiceAccessToken: invoiceAccessToken,
name: 'Product name',
description: 'Product description',
email: 'example@example.com',
finished: function() {
console.log('Payment successful finished');
},
opened: function() {
console.log('Checkout opened');
},
closed: function() {
console.log('Checkout closed');
}
});
}
});
</script>
<button id="xPay-checkout">Pay with xPay</button>
</body>
</html>