Покупка Частинами
Огляд
API Покупки Частинами Монобанку дозволяє магазинам пропонувати клієнтам оплату товарів та послуг у ПЧ. Цей сервіс надає клієнтам можливість розділити покупку на кілька платежів без відсотків, роблячи товари доступнішими, а магазини отримують оплату миттєво.
Ключові можливості
- Миттєве схвалення - кредитне рішення за 20 секунд
- Без відсотків для клієнтів (комісію сплачує магазин)
- Гнучка Покупка Частинами - від 3 до 25 платежів
- Сповіщення в реальному часі через callback або polling
- Детальна звітність та аналітика
- Ідемпотентні операції для запобігання дублювання замовлень
Схема інтеграції
Типова інтеграція відбувається за наступною схемою:
- Клієнт обирає товари та вибирає оплату через Покупку Частинами
- Магазин створює замовлення через
/api/order/create - Клієнт отримує push-сповіщення в застосунку Монобанку
- Клієнт підтверджує договір ПЧ
- Магазин отримує callback зі статусом
WAITING_FOR_STORE_CONFIRM - Магазин видає товар та викликає
/api/order/confirm - Покупка Частинами стає активною і з клієнта списується перший платіж
Діаграма процесу
Відкрити Mermaid діаграму
sequenceDiagram
actor Client as Клієнт
participant Store as Магазин Backend
participant Mono as Monobank Backend
participant App as Мобільний застосунок
autonumber
Client->>Store: Оформлює замовлення
Store->>Mono: POST /api/order/create<br>(опційно: result_callback)
Mono->>App: Push на підтвердження
Client->>App: Підтверджує ПЧ
App->>Mono: Approve
note over Mono: Статус → IN_PROCESS / WAITING_FOR_STORE_CONFIRM
alt Варіант А: result_callback передано
Mono-->>Store: POST result_callback
else Варіант Б: Самостійний запит
loop Polling статусу
Store->>Mono: POST /api/order/state
end
end
alt Варіант А: Товар видано
Store->>Mono: POST /api/order/confirm
Store->>Client: Видача товару
else Варіант Б: Відмова у видачі
Store->>Mono: POST /api/order/reject
end
Автентифікація та безпека
Всі API запити повинні містити два обов’язкові заголовки:
store-id- Ваш унікальний ідентифікатор магазинуsignature- HMAC-SHA256 підпис тіла запиту
Розрахунок підпису
Підпис захищає від атак типу “man in the middle” та забезпечує цілісність запиту.
Формула:
signature = Base64(HMAC-SHA256(request_body_bytes, store_secret))
Приклади реалізації
Java
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class SignatureCalculator {
public static String calculateSignature(String storeSecret, String requestBody) {
try {
Mac mac = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKey = new SecretKeySpec(
storeSecret.getBytes(StandardCharsets.UTF_8),
"HmacSHA256"
);
mac.init(secretKey);
byte[] hash = mac.doFinal(requestBody.getBytes(StandardCharsets.UTF_8));
return Base64.getEncoder().encodeToString(hash);
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
throw new RuntimeException("Помилка розрахунку підпису", e);
}
}
}
PHP
<?php
function calculateSignature($storeSecret, $requestBody) {
return base64_encode(hash_hmac('sha256', $requestBody, $storeSecret, true));
}
// Приклад використання
$requestBody = '{"store_order_id":"ORD-001","client_phone":"+380501234567","total_sum":1500.00}';
$signature = calculateSignature('your_store_secret', $requestBody);
$headers = [
'Content-Type: application/json',
'store-id: your_store_id',
'signature: ' . $signature
];
?>
Postman Pre-request скрипт
// Отримати змінні колекції: key, storeId
const key = pm.collectionVariables.get("key");
const storeId = pm.collectionVariables.get("storeId");
// Отримати тіло запиту
let body = "";
if (pm.request.body && pm.request.body.raw) {
body = pm.request.body.raw;
}
// Розрахувати підпис
const keyUtf8 = CryptoJS.enc.Utf8.parse(key);
const hash = CryptoJS.HmacSHA256(body, keyUtf8);
const signature = CryptoJS.enc.Base64.stringify(hash);
// Встановити заголовки
pm.request.headers.upsert({key: "signature", value: signature});
pm.request.headers.upsert({key: "store-id", value: storeId});
Callback сповіщення
Callback надають оновлення статусу замовлення в реальному часі.
Коли ви вказуєте result_callback при створенні замовлення, Монобанк надсилатиме POST запити на ваш endpoint.
Коли надсилається callback
Важливо: Callback надсилається тільки у двох випадках:
- При переході в статус
IN_PROCESS/WAITING_FOR_STORE_CONFIRM(клієнт підтвердив ПЧ) - При переході в будь-який статус
FAIL/*(відмова з будь-якої причини)
Для інших статусів (наприклад, IN_PROCESS/WAITING_FOR_CLIENT) callback не надсилається - використовуйте polling через
/api/order/state.
Формат Callback
{
"order_id": "fa4a8249-336e-4e6d-9b85-79bc8be62377",
"state": "IN_PROCESS",
"order_sub_state": "WAITING_FOR_STORE_CONFIRM"
}
Безпека Callback
Перевіряйте автентичність callback:
- Розрахуйте підпис тим же методом, що й для запитів
- Порівняйте з заголовком
signatureз callback запиту - Обробляйте тільки якщо підписи збігаються
Альтернатива: Опитування статусу
Якщо callback не підходить або необхідно отримувати проміжні статуси, використовуйте /api/order/state для ручної
перевірки статусу замовлення.
Довідник статусів замовлень
Розуміння статусів замовлень критично важливе для правильної інтеграції:
| Статус | Підстатус | Опис | Необхідні дії |
|---|---|---|---|
| SUCCESS | ACTIVE | Замовлення завершено, товар видано, ПЧ активна | Немає - фінальний статус |
| SUCCESS | DONE | ПЧ повністю сплачена клієнтом | Немає - фінальний статус |
| SUCCESS | RETURNED | Товар повернено, гроші повернуто клієнту | Немає - фінальний статус |
| IN_PROCESS | WAITING_FOR_CLIENT | Очікування підтвердження клієнта в застосунку Монобанку | Чекати дії клієнта |
| IN_PROCESS | WAITING_FOR_STORE_CONFIRM | Клієнт підтвердив - можна видавати товар | Видати товар та викликати /api/order/confirm |
| FAIL | CLIENT_NOT_FOUND | Клієнта не знайдено або він не є клієнтом Монобанку | Перевірити формат номера телефону |
| FAIL | EXCEEDED_SUM_LIMIT | Клієнт перевищив ліміт на ПЧ | Зменшити суму замовлення або використати інший спосіб оплати |
| FAIL | EXISTS_OTHER_OPEN_ORDER | У клієнта є інше незавершене замовлення в ПЧ | Почекати 15 хвилин або попросити клієнта скасувати існуюче замовлення |
| FAIL | NOT_ENOUGH_MONEY_FOR_INIT_DEBIT | Недостатньо коштів для першого платежу | Клієнт повинен поповнити картку |
| FAIL | REJECTED_BY_CLIENT | Клієнт відхилив ПЧ | Спробувати пізніше або використати інший спосіб оплати |
| FAIL | PAY_PARTS_ARE_NOT_ACCEPTABLE | Неприйнятна кількість платежів зі сторони магазину | Зв’язатися з підтримкою для деталей |
| FAIL | FRAUD_REJECTED | Замовлення відхилено системою запобігання шахрайству | Зв’язатися з підтримкою для деталей |
| FAIL | RESTRICTED_BY_RISKS | Обмеження системи управління ризиками | Зв’язатися з підтримкою для деталей |
| FAIL | CLIENT_PUSH_TIMEOUT | Клієнт не відповів протягом 15 хвилин | Зв’язатися з клієнтом або повторити спробу |
| FAIL | REJECTED_BY_STORE | Магазин скасував замовлення | Немає - замовлення скасовано |
| FAIL | FAIL | Внутрішня помилка банку | Повторити через 5 хвилин |
Ключовий статус: WAITING_FOR_STORE_CONFIRM
Це найважливіший статус - він означає, що клієнт схвалив кредит і ви можете безпечно видавати товар.
Завжди викликайте /api/order/confirm після видачі товару для активації ПЧ.
Середовища
Тестове середовище (Пісочниця)
Ідеально підходить для початкової інтеграції та тестування різних сценаріїв.
Дані для доступу:
- URL: https://u2-demo-ext.mono.st4g3.com
- Store ID:
test_store_with_confirm - Секретний ключ:
secret_98765432--123-123
Тестові сценарії: Використовуйте різні закінчення номерів телефонів для імітації різних результатів:
| Закінчення телефону | Сценарій | Час callback |
|---|---|---|
...1 |
✅ Успішне схвалення | 5 секунд |
...2 |
⏳ Очікування клієнта | Без callback |
...3 |
❌ Недостатній ліміт | 5 секунд |
...4 |
✅ Схвалено, очікування підтвердження магазину | 5 секунд |
Приклад: +380501234561 імітує успішне схвалення.
Stage середовище (Передпродакшн)
Реальна інтеграція з застосунком Монобанку для комплексного тестування.
Дані для доступу:
- URL: https://u2-ext.mono.st4g3.com
- Store ID:
COMFY - Секретний ключ:
sign_key
Використовуйте це середовище після успішного тестування в пісочниці для перевірки взаємодії з реальним застосунком.
Production середовище
URL: https://u2.monobank.com.ua
Використовуйте ваші продакшн дані, надані Монобанком після успішного тестування та схвалення.
Обробка помилок
Використовувані HTTP статус коди
200- Успіх201- Замовлення успішно створено400- Поганий запит (помилки валідації)401- Підпис не передано або не валідний403- Заборонено (магазин не має права створювати замовлення)404- Замовлення не знайдено429- Перевищено ліміт запитів500- Внутрішня помилка сервісу
Формат відповіді з помилкою
{
"message": "Котик перегриз кабель до сервера. Спробуйте ще раз через хвилинку 🐱"
}
Найкращі практики
Створення замовлень
- Валідуйте дані клієнта перед надсиланням запитів
- Використовуйте унікальний
store_order_idдля запобігання дублікатів - Завжди вказуйте
result_callbackдля оновлень в реальному часі - Обробляйте ідемпотентність - дублікат запиту з однаковим
store_order_idповертає ідентифікатор замовлення що вже існує, замість створення нового
Моніторинг статусу
- Обробляйте
WAITING_FOR_STORE_CONFIRMнегайно - Налаштуйте правильну обробку callback з перевіркою підпису
- Реалізуйте резервне опитування (polling), якщо callback не працюють
- Логуйте всі зміни статусу для налагодження
Відновлення після помилок
- Повторюйте при тимчасових збоях (5xx помилки)
- Не повторюйте помилки валідації (4xx помилки)
- Реалізуйте експоненційну затримку для повторів
Підтримка та усунення неполадок
AI Асистент
Отримайте миттєву допомогу з питань інтеграції: 🤖 Помічник API Монобанку
Запланувати сесію тестування
Тестування на передпроді проходить у текстовому форматі.
Забронювати тайм-слот для проведення тестування: 📅 Запланувати тестування
Технічна підтримка
При зверненні до підтримки завжди включайте:
- Trace-Id заголовок з API відповідей
- Store ID та Order ID
- Приклади запитів/відповідей
- Повідомлення про помилки та часові мітки
Заголовок Trace-Id включається в усі API відповіді та допомагає нашій команді підтримки швидко знайти ваші запити в
логах.
Поширені проблеми
Помилка валідації підпису
- Перевірте кодування тіла запиту (UTF-8)
- Перевірте правильність секретного ключа
- Переконайтеся, що немає зайвих пробілів у заголовках
Клієнта не знайдено
- Перевірте формат номера телефону (+380XXXXXXXXX)
- Переконайтеся, що клієнт є клієнтом Монобанку
- Перевірте, чи це фінансовий номер телефону
Помилка створення замовлення
- Валідуйте всі обов’язкові поля
- Перевірте ліміти сум (мінімум 1 грн)
- Переконайтеся, що у клієнта немає активних замовлень
Швидкий старт - чек-лист
- Отримати тестові дані від Монобанку
- Реалізувати розрахунок підпису
- Протестувати створення замовлення в пісочниці
- Налаштувати callback endpoint
- Протестувати всі статуси замовлень
- Реалізувати обробку помилок
- Протестувати в stage середовищі
- Отримати продакшн дані
- Розгорнути в продакшн
- Моніторити та підтримувати
Готові до інтеграції? Почніть з пісочниці та слідуйте нашій покроковій документації API🐾