Для платёжной формы
Метод запроса
POST
URL запроса
/v2/merchant/orders
Параметры запроса
extId
string
Идентификатор транзакции клиента
paymentMethods
string[]
Платежные методы доступные на форме ( Card, Sbp, SberPay, TPay, CrossBorder )
currency
string(3-4)
Код валюты ISO 4217 (RUB, UZS и т.д.)
amount (опционально)
decimal
Сумма
callbackUrl
(опционально)
string(1-255)
Адрес колбэка для транзакции
successUrl (опционально)
string(1-255)
Ссылка для редиректа после успешной оплаты ордера
failureUrl (опционально)
string(1-255)
Ссылка для редиректа в случае отмены ордера
Пример запроса
curl --request POST \
--url https://{{domain}}/v2/merchant/orders \
--header 'Authorization: Bearer {{your_api_token}}' \
--header 'X-Signature: {{sign}}' \
-d '{
"extId": "123456789",
"callbackUrl": "https://webhook.site/#!/view/151a4e3c",
"currency": "RUB",
"successUrl": "https://example.com/success",
"failureUrl": "https://example.com/failure",
"paymentMethods": [ "Card", "SBP", "SberPay", "TPay", "CrossBorder"]
}'
Параметры ответа
orderId
string(1-255)
Идентификатор ордера
paymentPageUrl
string(1-255)
Ссылка на платёжную форму
expiresAt
string(1-255)
Срок действия ссылки на платёжную форму
Пример ответа
{
"orderId": "39f2af5d-8666-4a94-b28f-104a46a3d5f3",
"paymentPageUrl": "https://example.com",
"expiresAt": "2024-07-19T09:00:33"
}
Платёжная форма в iframe
Вместо открытия платёжной формы в новой вкладке, вы можете открывать её поверх вашего сайта с помощью iframe. Для этого:
Создайте iframe во весь экран
Дождитесь события
message
сevent.data === "ready"
Чтобы открыть форму, отправьте
"open"
черезpostMessage
и поставьте стильpointer-events: auto
Чтобы закрыть форму, отправьте
"close"
черезpostMessage
и поставьте стильpointer-events: none
При событии
message
сevent.data === "requestClose"
закрывайте форму
Пример
<body>
<button onclick="openPaymentDialog()">
Открыть платёжную форму
</button>
<script>
const paymentPageUrl = "https://[...]"; // должно быть получено из /v2/merchant/orders
const paymentPageOrigin = new URL(paymentPageUrl).origin;
// Создаём iframe
const iframe = document.createElement("iframe");
iframe.style.position = "fixed";
iframe.style.top = "0";
iframe.style.left = "0";
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.border = "none";
iframe.style.pointerEvents = "none";
iframe.src = paymentPageUrl;
document.body.append(iframe);
function openPaymentDialog() {
iframe.contentWindow.postMessage("open", paymentPageOrigin);
iframe.style.pointerEvents = "auto";
}
function closePaymentDialog() {
iframe.contentWindow.postMessage("close", paymentPageOrigin);
iframe.style.pointerEvents = "none";
}
window.addEventListener("message", (event) => {
// Смотрим сообщения только от платёжной страницы
if (event.origin !== paymentPageOrigin) {
return;
}
if (event.data === "ready") {
// Как только форма готова, открываем её
openPaymentDialog();
} else if (event.data === "requestClose") {
// По сигналу из формы закрываем её (например, если нажат крестик, фон или клавиша Esc)
closePaymentDialog();
}
});
</script>
</body>
Last updated