Навигация
Присоединяйтесь к нашему Telegram-каналу!☝

Будьте в курсе последних новинок и фишек e-commerce: советы, полезные инструменты и эксклюзивные материалы.

Блог Rss rss_feed

Разработка Модуля Оплаты для PrestaShop: Структура и Основные Методы

Разработка Модуля Оплаты для PrestaShop: Структура и Основные Методы

Создание модуля оплаты для PrestaShop — важный шаг для расширения функционала интернет-магазина и предоставления клиентам удобных способов оплаты. В этой статье мы рассмотрим создание базового каркаса модуля, его архитектуру и разберём ключевые методы, которые необходимо реализовать для корректной работы. Мы также добавим пример контроллера для перенаправления на платёжный шлюз.

Начало Разработки: Генерация Каркаса Модуля

Для начала процесса разработки рекомендуется использовать официальный инструмент PrestaShop Module Generator. Этот сервис автоматически создаст базовый каркас модуля, включая необходимые файлы и папки, что значительно ускорит процесс и минимизирует ошибки.

Основные Требования

Для создания модуля оплаты необходимо соблюдать следующие правила:

  • Модуль должен наследовать класс PaymentModule.
  • Обязательная реализация методов hookPaymentOptions() и hookPaymentReturn().
  • Модуль должен регистрировать хуки paymentOptions и paymentReturn.
  • Отсутствие кнопок отправки формы внутри HTML-кода модуля — они генерируются автоматически.

Архитектура Модуля Оплаты

PrestaShop использует модульную архитектуру и событийную модель, что позволяет легко интегрировать дополнительные функции. Платёжные модули разработаны на основе паттерна Observer, где модули подписываются на определённые события и обрабатывают их.

Регистрация Хуков

public function install() { return parent::install() && $this->registerHook('paymentOptions') && $this->registerHook('paymentReturn'); }

Реализация hookPaymentOptions

public function hookPaymentOptions($params) { $paymentOption = new PrestaShop\PrestaShop\Core\Payment\PaymentOption(); $paymentOption->setCallToActionText($this->l('Оплатить через наш шлюз')) ->setAction($this->context->link->getModuleLink($this->name, 'validation', [], true)) ->setLogo(Media::getMediaPath(_PS_MODULE_DIR_ . $this->name . '/logo.png')); return [$paymentOption]; }

Реализация hookPaymentReturn

public function hookPaymentReturn($params) { if ($this->active == false) { return; } return $this->context->smarty->fetch('module:' . $this->name . '/views/templates/hook/payment_return.tpl'); }

Пример Контроллера для Перенаправления на Платёжный Шлюз

Контроллер отвечает за проверку данных корзины и перенаправление клиента на платёжный шлюз. Пример контроллера:

class Ps_CheckpaymentValidationModuleFrontController extends ModuleFrontController { public function postProcess() { if (!($this->module instanceof Ps_Checkpayment)) { Tools::redirect('index.php?controller=order&step=1'); return; } $cart = $this->context->cart; if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active) { Tools::redirect('index.php?controller=order&step=1'); return; } $authorized = false; foreach (Module::getPaymentModules() as $module) { if ($module['name'] == 'ps_checkpayment') { $authorized = true; break; } } if (!$authorized) { exit($this->trans('This payment method is not available.', [], 'Modules.Checkpayment.Shop')); } $customer = new Customer($cart->id_customer); if (!Validate::isLoadedObject($customer)) { Tools::redirect('index.php?controller=order&step=1'); return; } $currency = $this->context->currency; $total = (float) $cart->getOrderTotal(true, Cart::BOTH); $mailVars = [ '{check_name}' => Configuration::get('CHEQUE_NAME'), '{check_address}' => Configuration::get('CHEQUE_ADDRESS'), '{check_address_html}' => str_replace("\n", '<br />', Configuration::get('CHEQUE_ADDRESS')), ]; // Подтверждение заказа $this->module->validateOrder( (int) $cart->id, (int) Configuration::get('PS_OS_CHEQUE'), $total, $this->module->displayName, null, $mailVars, (int) $currency->id, false, $customer->secure_key ); // Перенаправление на платёжный шлюз $paymentUrl = 'https://example-payment-gateway.com/checkout'; Tools::redirect($paymentUrl); } }

Пояснение:

  • Проверка корзины и клиента: Проверяет корректность данных до перенаправления.
  • Создание заказа: Сохраняет заказ в системе с помощью метода validateOrder().
  • Перенаправление на платёжный шлюз: URL генерируется в зависимости от платёжной системы.

Создание модуля оплаты для PrestaShop требует глубокого понимания архитектуры платформы и внимательного подхода к каждой детали. Грамотное использование инструментов и хуков поможет создать надёжный и безопасный модуль.


Какие платёжные системы вы предпочитаете использовать для своих клиентов? Поделитесь вашим опытом в комментариях!

Был ли этот пост полезен для вас?

    
👈 Присоединяйтесь к нашему Telegram-каналу!

Будьте в курсе последних новинок и фишек e-commerce: советы, полезные инструменты и эксклюзивные материалы.

👈 Присоединяйтесь к нашему Telegram-каналу!

Будьте в курсе последних новинок и фишек e-commerce: советы, полезные инструменты и эксклюзивные материалы.

На данный момент комментариев нет
close

Checkout

close

Избранное