Платежные модули лежат в папке: /payment/ В /payment/IntellectMoney/ находятся всего 4 файла: - IntellectMoney.php - отправка запроса с информацией о заказе в платежную систему (в т.ч. и фискальных данных)
- callback.php - обработка ответа платежной системы, проверка приходящих данных, отправка писем пользователю и админку, а также смена статуса заказа на оплачен
- settings.xml - настройки для вывода полей для заполнения в админке и настройки для использования в платежном модуле типа секретного ключа, url-ов и т.п.
- TinkoffMerchantAPI.php - необязательный класс взаимодействия с API платежной системы, зачастую разработчики ограничиваются первыми тремя файлами
ДОБАВЛЕНИЕ НОВОЙ ПЛАТЕЖНОЙ СИСТЕМЫ:Для создания нового платежного модуля достаточно: 1) Создать копию одного из уже имеющихся платежных модулей и переименовать название папки системы онлайн-оплаты, 2) По полученному образцу переделать обмен данными с API согласно документации платежной системы Взаимодействие с CMS: require_once('api/Fivecms.php'); - Получение информации о заказе:
$order = $this->orders->get_order(intval(OrderId)); $payment_method = $this->payment->get_payment_method($order->payment_method_id); $payment_currency = $this->money->get_currency(intval($payment_method->currency_id)); - Настройки платежного модуля:
$settings = $this->payment->get_payment_settings($payment_method->id); - Сумма заказа с конвертацией в нужную валюту:
$amount = $this->money->convert($order->total_price, $payment_method->currency_id, false); - Получение массива товаров в заказе:
$purchases = $this->orders->get_purchases(array('order_id' => intval($order->id))) * для версий CMS начиная с v22-3-4 рекомендуем использовать вместо него следующий код с уже нормализованными ценами: $purchases = $this->payment->normalize((int)$order->id); для более старых версий нужно добавить функцию нормализации цены в одноименный класс API. - Если заказ успешно оплачен:
// Ставим статус оплачен и начисляем баллы $this->orders->set_pay(intval($order->id));
// Спишем товары со склада $this->orders->close(intval($order->id));
// Отправляем уведомление администратору $this->notify->email_order_admin(intval($order->id)); // Отправляем уведомление пользователю $this->notify->email_order_user(intval($order->id)); 3) Не забудьте передать в фискальные данные информацию о доставке (если у доставки не стоит метки "оплачивается отдельно/separate_delivery" и она > 0) if($order->delivery_id && !$order->separate_delivery && $order->delivery_price > 0) { $delivery = $this->delivery->get_delivery($order->delivery_id); ... } 4) Для передачи фискальных данных обязательно реализуйте нормализацию цен товаров (если этого функционала нет внутри вашей платежной системы): $purchases = $this->payment->normalize((int)$order_id); 5) Необходимо обеспечить поддержку ключевых версий PHP 7.4 и 8.1 6) Затем залить в директорию /payment/ После этого новый способ оплаты станет доступен в: Админка > Настройки > Оплата : Добавить способ оплаты |