</>
maximorum.com

Monobank Acquiring API: як підключити онлайн-платежі на Laravel та WooCommerce

D

Платіжний шлях — це останній крок перед конверсією. Якщо він складний або незнайомий покупцю — ви втрачаєте продаж. Monobank Acquiring набирає популярність серед українських онлайн-магазинів: знайомий інтерфейс для мільйонів користувачів застосунку monobank, низька комісія та зрозуміле API роблять інтеграцію вигідним рішенням для малого та середнього бізнесу.

Розробник інтегрує Monobank Acquiring API у Laravel — код webhook-обробника на моніторі

Що дає Monobank Acquiring

  • Оплата карткою Visa/Mastercard, Apple Pay та Google Pay
  • Рекурентні платежі — підписки та регулярні списання
  • Webhook-сповіщення про статус транзакції в реальному часі
  • Інтерфейс оплати українською — довіра покупця вища
  • Комісія від 1,4% залежно від обсягу

Як працює інтеграція: базовий флоу

Monobank Acquiring використовує просте REST API. Для WordPress (WooCommerce) ми реалізуємо кастомний payment gateway, для Laravel — окремий сервіс-клас.

Крок 1 — Створення інвойсу (Laravel)

Надсилаємо POST-запит з сумою, валютою та URL для webhook і редіректу. У відповідь отримуємо pageUrl — сторінку оплати monobank.

$response = Http::withToken(config('monobank.token'))
    ->post('https://api.monobank.ua/api/merchant/invoice/create', [
        'amount'      => $order->total * 100, // у копійках
        'ccy'         => 980,                 // UAH
        'merchantPaymInfo' => [
            'reference'   => $order->id,
            'destination' => 'Оплата замовлення #' . $order->id,
        ],
        'redirectUrl' => route('checkout.success'),
        'webHookUrl'  => route('monobank.webhook'),
    ]);

$invoiceUrl = $response->json('pageUrl');
return redirect($invoiceUrl);

Крок 2 — Обробка webhook

Після оплати monobank надсилає POST-запит на webHookUrl зі статусом транзакції. Завжди верифікуйте підпис через HMAC-SHA256 — без цього фейковий webhook може підтвердити несплачене замовлення.

public function handle(Request $request): Response
{
    // Верифікація підпису
    $signature = hash_hmac(
        'sha256',
        $request->getContent(),
        config('monobank.secret')
    );
    abort_if($signature !== $request->header('X-Sign'), 403);

    $payload = $request->json()->all();

    if ($payload['status'] === 'success') {
        Order::where('id', $payload['reference'])
             ->update(['status' => 'paid']);
        // тригер відправки, email-сповіщення тощо
    }

    return response()->noContent();
}

Крок 3 — Інтеграція з WooCommerce

Для WordPress-магазинів розробляємо кастомний клас-спадкоємець WC_Payment_Gateway. Він обробляє process_payment(), handle_webhook() та відображає статус у адмін-панелі WooCommerce. Такий підхід усуває залежність від сторонніх плагінів, які можуть мати вразливості або несумісності після оновлень.

Що важливо врахувати

  • Верифікуйте підпис кожного webhook — не покладайтесь лише на IP-адресу
  • Зберігайте invoiceId та reference у БД перед редіректом — захист від дублювання при повторних webhook
  • Реалізуйте idempotency-ключі для повторних спроб оплати
  • Тестуйте в sandbox-режимі до виходу в production

Результат для бізнесу

Правильно інтегрований Monobank Acquiring скорочує тертя на останньому кроці конверсії, зменшує кількість кинутих кошиків і не потребує щомісячного обслуговування, характерного для деяких агрегаторів. Ми реалізували Monobank Acquiring на Laravel та WooCommerce для інтернет-магазинів різних вертикалей — від косметики до будівельних матеріалів.

Замовте інтеграцію на maximorum.com