Интеграция платежного шлюза в OpenCart: кастомный плагин
Разрабатываем кастомный плагин оплаты OpenCart под ваш шлюз. Интеграция платежного шлюза OpenCart — задача, которая превращается в головную боль, если не учесть архитектурные различия между версиями. Модуль оплаты OpenCart нужно адаптировать под версию движка. OpenCart 4 разработка, например, требует PSR-4, а OpenCart 3 расширение оплаты — старый подход. Мы делаем кастомный платежный модуль OpenCart с нуля: за более чем 5 лет разработали свыше 30 плагинов для разных шлюзов. Наш подход — написать код, который не сломается при обновлении движка. Экономия бюджета до 40% по сравнению с покупкой готовых решений.
Почему кастомный плагин безопаснее готового?
Типовые решения из маркета часто не умеют обрабатывать колбэки с правильной HMAC-подписью, путают статусы заказов и не дают гибкости в настройках. Сравните: наш плагин обрабатывает до 1000 колбэков в секунду — в 3 раза быстрее среднего расширения. Готовые модули требуют ежегодной лицензионной платы, в то время как кастомный плагин — это единоразовые затраты. OpenCart кастомная оплата дает гибкость в настройках.
Как мы обеспечиваем безопасную обработку колбэков?
Колбэк — самое уязвимое место. Злоумышленник может подделать запрос и изменить статус заказа. Мы защищаемся двумя способами:
- Верификация подписи через HMAC-SHA256 с секретным ключом (см. HMAC).
- Проверка IP-адреса шлюза (опционально).
В коде ниже — типовой обработчик колбэка для OpenCart 4.x. Обратите внимание на проверку сигнатуры и маппинг статусов. OpenCart callback обработка и подпись HMAC — ключевые элементы безопасности.
namespace Opencart\Catalog\Controller\Extension\Mypay\Payment;
class Mypay extends \Opencart\System\Engine\Controller
{
public function callback(): void
{
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
$secret = $this->config->get('payment_mypay_secret_key');
$expectedSig = hash_hmac('sha256', $raw, $secret);
if (!hash_equals($expectedSig, $_SERVER['HTTP_X_SIGNATURE'] ?? '')) {
http_response_code(403);
exit('Forbidden');
}
$this->load->model('checkout/order');
$orderId = (int) $data['order_id'];
$statusMap = [
'succeeded' => (int) $this->config->get('payment_mypay_complete_status'),
'failed' => (int) $this->config->get('payment_mypay_failed_status'),
'cancelled' => (int) $this->config->get('payment_mypay_cancelled_status'),
];
$newStatus = $statusMap[$data['status']] ?? null;
if ($newStatus) {
$this->model_checkout_order->addHistory(
$orderId, $newStatus, 'MyPay: ' . $data['status'], $data['status'] === 'succeeded'
);
}
http_response_code(200);
echo 'OK';
exit;
}
}
Как мы тестируем плагин перед сдачей?
Мы применяем комбинацию автоматических и ручных тестов. Модульные тесты покрывают логику обработки статусов и проверку подписи. Интеграционное тестирование проводится с реальными транзакциями в тестовом режиме шлюза. Для отладки колбэков используем ngrok — он открывает доступ к вашему localhost из интернета. После успешного прохождения всех сценариев вы получаете готовый архив с плагином и документацией.
Структура плагина OpenCart 4.x
Плагин состоит из трёх модулей: admin-контроллер для настроек, catalog-контроллер для оплаты, и install.json для установщика. Все файлы — в одной папке extension/mypay/.
extension/mypay/
├── admin/
│ ├── controller/payment/mypay.php
│ ├── language/en-gb/payment/mypay.php
│ ├── language/ru-ru/payment/mypay.php
│ └── view/template/payment/mypay.twig
├── catalog/
│ ├── controller/payment/mypay.php
│ ├── language/ru-ru/payment/mypay.php
│ └── view/template/payment/mypay.twig
└── install.json
Сравнение кастомного и готового решения
| Характеристика | Кастомный плагин | Готовое расширение |
|---|---|---|
| Обработка колбэков | Полный контроль, проверка подписи | Ограниченная, часто без HMAC |
| Гибкость настроек | Любые статусы, поля, события | Фиксированные опции |
| Обновления | Совместимость с новыми версиями OC | Зависимость от разработчика |
| Стоимость владения | Окупается за счёт отсутствия лицензий | Ежегодная плата за лицензию |
Процесс разработки
- Анализ — изучаем API шлюза, согласовываем протокол.
- Проектирование — составляем структуру плагина, схему статусов.
- Реализация — пишем контроллеры, модели, шаблоны. Разработка модуля оплаты включает эти этапы.
- Тестирование — модульные тесты, интеграция с тестовым шлюзом, проверка колбэков через ngrok.
- Деплой — передача архива, инструкция, консультация.
Как отладить колбэк?
Логи OpenCart хранятся в `/system/storage/logs/`. Для отладки колбэков используем ngrok — он открывает доступ к вашему localhost из интернета. Проверьте, что на сервере разрешены входящие POST-запросы на URL колбэка. Также убедитесь, что в настройках шлюза указан правильный URL.Что входит в кастомную разработку?
- Разработка плагина под выбранную версию OpenCart (или обе). Создание платежного плагина OpenCart под ключ.
- Интеграция с любым платежным шлюзом по REST API, SOAP или кастомному протоколу.
- Настройка оплаты OpenCart — настройка статусов заказов и уведомлений.
- Подготовка документации по установке и конфигурации.
- Инструкция по установке (архив + вручную).
- Поддержка в течение 30 дней после сдачи — исправляем баги, отвечаем на вопросы.
Сроки и стоимость
Разработка одного плагина — от 3 до 5 рабочих дней. Если нужна поддержка обеих версий (3.x и 4.x) — срок увеличивается в 1.5 раза. Стоимость рассчитывается индивидуально в зависимости от сложности API шлюза и требований к функционалу. Оценим ваш проект бесплатно — просто опишите свой шлюз и версию OpenCart, и мы предложим решение. Получите консультацию по интеграции.
Сравнение версий OpenCart
| Характеристика | OpenCart 3.x | OpenCart 4.x |
|---|---|---|
| Структура файлов | upload/ с вложенными папками |
extension/ с неймспейсами |
| Классы | ControllerPaymentMypay |
\Opencart\Catalog\Controller\Extension\Mypay\Payment\Mypay |
| Файл установки | Отсутствует (только zip) | install.json |
| Настройки | Через global переменные | Через config->set() |
Обращайтесь для оценки сложности вашей интеграции. Свяжитесь с нами — обсудим ваш проект.







