Перейти до вмісту

Двостадійна оплата

Двостадійна оплата дозволяє попередньо заблокувати кошти на рахунку користувача, а потім списати їх або розблокувати.

  1. Клієнт оформлює замовлення
  2. Кошти блокуються на карті (hold)
  3. Магазин підтверджує наявність товару
  4. Списання коштів (capture) або розблокування (cancel)

Крок 1: Блокування коштів

Section titled “Крок 1: Блокування коштів”

Створіть платіж з параметром confirm: false:

Terminal window
curl -X POST https://api.rozetkapay.com/api/payments/v1/new \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"amount": 1000,
"currency": "UAH",
"external_id": "order_12345",
"mode": "hosted",
"confirm": false,
"callback_url": "https://your-site.com/callback",
"result_url": "https://your-site.com/result",
"description": "Замовлення #12345",
"customer": {
"email": "user@example.com",
"phone": "380501234567"
}
}'

При успішному блокуванні:

{
"is_success": true,
"details": {
"status": "success",
"status_code": "transaction_successful",
"status_description": "Protected transaction. Amount was successfully blocked"
}
}

Крок 2: Списання коштів (Confirm)

Section titled “Крок 2: Списання коштів (Confirm)”

Для списання заблокованих коштів:

Terminal window
curl -X POST https://api.rozetkapay.com/api/payments/v1/confirm \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"amount": 1000,
"currency": "UAH",
"callback_url": "https://your-site.com/callback"
}'
ПараметрОбов’язковийОпис
external_idТакID оригінального замовлення
amountНіСума списання (якщо не вказано — вся сума)
currencyНіВалюта (має співпадати)
callback_urlНіURL для callback
payloadНіДодаткові дані

Можна списати меншу суму, ніж була заблокована:

Terminal window
curl -X POST https://api.rozetkapay.com/api/payments/v1/confirm \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"amount": 800,
"currency": "UAH"
}'

Альтернатива: Розблокування коштів (Cancel)

Section titled “Альтернатива: Розблокування коштів (Cancel)”

Для повного розблокування коштів без списання:

Terminal window
curl -X POST https://api.rozetkapay.com/api/payments/v1/cancel \
-u "login:password" \
-H "Content-Type: application/json" \
-d '{
"external_id": "order_12345",
"callback_url": "https://your-site.com/callback"
}'
ПараметрОбов’язковийОпис
external_idТакID замовлення
amountНіСума для розблокування
currencyНіВалюта
callback_urlНіURL для callback
{
"is_success": true,
"details": {
"status": "success",
"status_code": "1009",
"status_description": "Reverse successful"
}
}
// 1. Створення замовлення з блокуванням
const createResponse = await fetch('https://api.rozetkapay.com/api/payments/v1/new', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa('login:password'),
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 1500,
currency: 'UAH',
external_id: 'order_789',
mode: 'hosted',
confirm: false,
callback_url: 'https://your-site.com/callback'
})
});
// 2. Редірект на сторінку оплати
const { action } = await createResponse.json();
window.location.href = action.value;
// 3. Після отримання callback про успішне блокування — підтвердження
const confirmResponse = await fetch('https://api.rozetkapay.com/api/payments/v1/confirm', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa('login:password'),
'Content-Type': 'application/json'
},
body: JSON.stringify({
external_id: 'order_789',
amount: 1500
})
});
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Клієнт │────▶│ Create │────▶│ Блокування │
│ │ │ confirm: │ │ коштів │
│ │ │ false │ │ │
└─────────────┘ └──────────────┘ └──────┬──────┘
┌───────────────────────────┼───────────────────────────┐
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Confirm │ │ Cancel │ │ Timeout │
│ (списання) │ │ (розблокув.) │ │ (30 днів) │
└──────────────┘ └──────────────┘ └──────────────┘