Нічого не знайдено

Спробуйте інший пошуковий запит

Популярні запити:

Додати в кошик

Кошик

У вас поки немає покупок

Переглянути маркетплейс

Інтеграція платіжних систем в OpenCart

Як інтегрувати популярні платіжні системи в OpenCart: LiqPay, Stripe, PayPal. Практичні приклади та код.

11 хв читання
4,326
5
1
8
Інтеграція платіжних систем в OpenCart

Платіжна система — критично важливий компонент інтернет-магазину. У цій статті розглянемо інтеграцію популярних платіжних провайдерів в OpenCart.

Загальна архітектура платіжного модуля

Кожен платіжний модуль в OpenCart 4 складається з:

  • Admin Controller — налаштування модуля
  • Catalog Controller — обробка платежу
  • Model — взаємодія з БД
  • Twig шаблони — форма оплати

LiqPay інтеграція

LiqPay — популярна платіжна система в Україні:

<?php
// catalog/controller/extension/payment/liqpay.php
namespace Opencart\Catalog\Controller\Extension\Payment;

class Liqpay extends \Opencart\System\Engine\Controller {

    public function index(): string {
        $this->load->language('extension/payment/liqpay');

        $order_id = $this->session->data['order_id'];
        $this->load->model('checkout/order');
        $order = $this->model_checkout_order->getOrder($order_id);

        $data = base64_encode(json_encode([
            'version' => 3,
            'public_key' => $this->config->get('payment_liqpay_public_key'),
            'action' => 'pay',
            'amount' => $order['total'],
            'currency' => $order['currency_code'],
            'description' => 'Order #' . $order_id,
            'order_id' => $order_id,
            'result_url' => $this->url->link('checkout/success'),
            'server_url' => $this->url->link('extension/payment/liqpay|callback')
        ]));

        $signature = base64_encode(sha1(
            $this->config->get('payment_liqpay_private_key') .
            $data .
            $this->config->get('payment_liqpay_private_key'),
            true
        ));

        return $this->load->view('extension/payment/liqpay', [
            'data' => $data,
            'signature' => $signature
        ]);
    }

    public function callback(): void {
        $data = json_decode(base64_decode($_POST['data']), true);

        // Верифікація підпису
        $signature = base64_encode(sha1(
            $this->config->get('payment_liqpay_private_key') .
            $_POST['data'] .
            $this->config->get('payment_liqpay_private_key'),
            true
        ));

        if ($signature !== $_POST['signature']) {
            die('Invalid signature');
        }

        if ($data['status'] === 'success') {
            $this->load->model('checkout/order');
            $this->model_checkout_order->addHistory(
                $data['order_id'],
                $this->config->get('payment_liqpay_order_status_id'),
                'LiqPay payment successful'
            );
        }
    }
}
Безпека: Завжди перевіряйте підпис callback запитів. Ніколи не довіряйте даним без верифікації!

Stripe інтеграція

// Використання Stripe PHP SDK
require_once DIR_SYSTEM . 'library/stripe/autoload.php';

\Stripe\Stripe::setApiKey($this->config->get('payment_stripe_secret_key'));

$paymentIntent = \Stripe\PaymentIntent::create([
    'amount' => $order['total'] * 100, // в центах
    'currency' => strtolower($order['currency_code']),
    'metadata' => [
        'order_id' => $order_id
    ]
]);

// Webhook обробка
$payload = file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];

$event = \Stripe\Webhook::constructEvent(
    $payload,
    $sig_header,
    $this->config->get('payment_stripe_webhook_secret')
);

if ($event->type === 'payment_intent.succeeded') {
    $order_id = $event->data->object->metadata->order_id;
    // Оновити статус замовлення
}

Використовуйте webhooks для підтвердження платежів замість redirect. Клієнт може закрити браузер до редіректу.

— Best Practice

PayPal Checkout

// Frontend: PayPal JavaScript SDK
paypal.Buttons({
    createOrder: function(data, actions) {
        return fetch('/index.php?route=extension/payment/paypal|createOrder', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({order_id: orderId})
        })
        .then(res => res.json())
        .then(data => data.paypal_order_id);
    },
    onApprove: function(data, actions) {
        return fetch('/index.php?route=extension/payment/paypal|captureOrder', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({paypal_order_id: data.orderID})
        })
        .then(res => res.json())
        .then(data => {
            if (data.success) {
                window.location.href = '/checkout/success';
            }
        });
    }
}).render('#paypal-button-container');

Тестування платежів

  • LiqPay: sandbox режим в налаштуваннях
  • Stripe: тестові ключі + карта 4242424242424242
  • PayPal: sandbox акаунти
Порада: Завжди тестуйте всі сценарії: успішний платіж, відхилений, таймаут, refund.

Логування та моніторинг

// Логування платежів
$this->log->write('Payment: Order #' . $order_id . ' - Status: ' . $status);

// Структура логу
[
    'timestamp' => date('Y-m-d H:i:s'),
    'order_id' => $order_id,
    'payment_method' => 'liqpay',
    'amount' => $amount,
    'status' => $status,
    'transaction_id' => $transaction_id
]

Висновок

Правильна інтеграція платіжної системи забезпечує безпеку та зручність для клієнтів. Не забувайте про webhook підтвердження, логування та тестування всіх сценаріїв.

DEV Тестовий

DEV Тестовий

Привіт! Я досвідчений розробник з OpenCart екосистеми з понад 10 роками практики. Технічний стек включає PHP (core мова для OpenCart), MySQL/MariaDB для баз даних, JavaScript/jQuery для фронтенду, HTML5/CSS3/Bootstrap для верстки. Маю глибокий досвід роботи з архітектурою OpenCart (MVC, Event System, OCMOD), інтеграцією платіжних систем та API, оптимізацією продуктивності магазинів. Окрім розробки, займаюся серверним адмініструванням — Linux (Ubuntu/Debian), Apache/Nginx, налаштування VPS/Dedicated серверів, DNS менеджмент, SSL сертифікати, email. Обслуговую понад 5000 інтернет-магазинів по всьому світу, надаючи комплексні рішення від розробки до технічної підтримки.

статей
12
переглядів
53,909
вподобань
63
підписники
3

Схожі статті

Email маркетинг для e-commerce Маркетинг

Email маркетинг для e-commerce

Як побудувати ефективну email стратегію для інтернет-магазину: автоматизація, сегментація та найкращі практики.

Email-маркетинг E-commerce Конверсія
6,604 6 19 хв
15 січ 2026

Коментарі (8)

Відповідь для

Увійдіть, щоб залишити коментар

Увійти
o
Як правильно тестувати webhook-и локально?
DEV Тестовий
Радий, що стаття була корисною.
a
Stripe працює в Україні?
a
Дякую за приклади коду - дуже допомогло!
m
How do you handle refunds automatically?
OCTemplates
What about Fondy payment integration?

Ми використовуємо cookies

Ми використовуємо cookies та схожі технології для покращення вашого досвіду, аналізу трафіку та показу персоналізованої реклами. Детальніше — у нашій Політиці cookies.