1. Создание файла
Сначала вам нужно создать файл для нового модуля и поместить его в следующий каталог.
/lib/common/modules/orderPayment/
Например, давайте назовем этот новый платежный модуль custom_pay.php
Скелет файла должен выглядеть следующим образом:
<?php
/**
* namespace
*/
namespace common\modules\orderPayment;
/**
* used classes
*/
use common\classes\modules\ModulePayment;
use common\classes\modules\ModuleStatus;
use common\classes\modules\ModuleSortOrder;
/**
* class declaration
*/
class custom_pay extends ModulePayment {
/**
* variables
*/
var $code, $title, $description, $enabled;
/**
* default values for translation
*/
protected $defaultTranslationArray = [
'MODULE_PAYMENT_CUSTOM_PAY_TEXT_TITLE' => 'Custom payment',
'MODULE_PAYMENT_CUSTOM_PAY_TEXT_DESCRIPTION' => 'Pay by credit balance',
'MODULE_PAYMENT_CUSTOM_PAY_ERROR' => 'There has been an error processing your credit card',
];
/**
* class constructor
*/
function __construct() {
parent::__construct();
$this->code = 'custom_pay';
$this->title = MODULE_PAYMENT_CUSTOM_PAY_TEXT_TITLE;
$this->description = MODULE_PAYMENT_CUSTOM_PAY_TEXT_DESCRIPTION;
if (!defined('MODULE_PAYMENT_CUSTOM_PAY_STATUS')) {
$this->enabled = false;
return false;
}
$this->sort_order = MODULE_PAYMENT_CUSTOM_PAY_SORT_ORDER;
$this->enabled = ((MODULE_PAYMENT_CUSTOM_PAY_STATUS == 'True') ? true : false);
$this->online = false;
if ((int) MODULE_PAYMENT_CUSTOM_PAY_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_CUSTOM_PAY_ORDER_STATUS_ID;
}
$this->update_status();
}
function update_status() {
if (($this->enabled == true) && ((int) MODULE_PAYMENT_CUSTOM_PAY_ZONE > 0)) {
$check_flag = false;
$check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_CUSTOM_PAY_ZONE . "' and zone_country_id = '" . $this->delivery['country']['id'] . "' order by zone_id");
while ($check = tep_db_fetch_array($check_query)) {
if ($check['zone_id'] < 1) {
$check_flag = true;
break;
} elseif ($check['zone_id'] == $this->delivery['zone_id']) {
$check_flag = true;
break;
}
}
if ($check_flag == false) {
$this->enabled = false;
}
}
}
function selection() {
return array('id' => $this->code,
'module' => $this->title);
}
function process_button() {
return false;
}
function before_process() {
try {
$transaction_currency = \Yii::$app->settings->get('currency');
$order = $this->manager->getOrderInstance();
//-----------------------------------------
// make your request here with credentials:
// MODULE_PAYMENT_CUSTOM_PAY_USERNAME
// MODULE_PAYMENT_CUSTOM_PAY_PASSWORD
$result = [
'success' => true,
'transaction' => '',
];
//-----------------------------------------
if (isset($result['success']) && $result['success']) {
$orderPayment = new \common\models\OrdersPayment();
$orderPayment->orders_payment_module = $this->code;
$orderPayment->orders_payment_transaction_id = $result['transaction'];
$orderPayment->orders_payment_id_parent = 0;
$orderPayment->orders_payment_order_id = 0;
$orderPayment->orders_payment_is_credit = 0;
$orderPayment->orders_payment_status = \common\helpers\OrderPayment::OPYS_PROCESSING;
$orderPayment->orders_payment_amount = $this->formatCurrencyRaw($order->info['total_inc_tax'], $transaction_currency);
$orderPayment->orders_payment_currency = trim($order->info['currency']);
$orderPayment->orders_payment_currency_rate = (float) $order->info['currency_value'];
$orderPayment->orders_payment_snapshot = json_encode(\common\helpers\OrderPayment::getOrderPaymentSnapshot($order));
$orderPayment->orders_payment_transaction_status = '';
$orderPayment->orders_payment_transaction_commentary = '';
$orderPayment->orders_payment_date_create = date('Y-m-d H:i:s');
$orderPayment->orders_payment_transaction_full = json_encode($result);
$orderPayment->save(false);
return true; // success
}
if (isset($result['data']['message'])) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode($result['data']['message']), 'SSL'));
}
} catch (\Exception $e) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode($e->getMessage()), 'SSL'));
}
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(MODULE_PAYMENT_CUSTOM_PAY_ERROR), 'SSL'));
}
function after_process() {
}
function formatCurrencyRaw($total, $currency_code = null, $currency_value = null) {
if (!isset($currency_code)) {
$currency_code = DEFAULT_CURRENCY;
}
if (!isset($currency_value) || !is_numeric($currency_value)) {
$currencies = \Yii::$container->get('currencies');
$currency_value = $currencies->currencies[$currency_code]['value'];
}
return number_format(self::round($total * $currency_value, $currencies->currencies[$currency_code]['decimal_places']), $currencies->currencies[$currency_code]['decimal_places'], '.', '');
}
function isOnline() {
return true;
}
public function configure_keys() {
return array(
'MODULE_PAYMENT_CUSTOM_PAY_STATUS' => array(
'title' => 'Enable Custom payment Module',
'value' => 'True',
'description' => 'Do you want to accept Custom payments?',
'sort_order' => '1',
'set_function' => 'tep_cfg_select_option(array(\'True\', \'False\'), ',
),
'MODULE_PAYMENT_CUSTOM_PAY_USERNAME' => array(
'title' => 'API username',
'value' => '',
'description' => 'Authorization username.',
'sort_order' => '2',
),
'MODULE_PAYMENT_CUSTOM_PAY_PASSWORD' => array(
'title' => 'API password',
'value' => '',
'description' => 'Authorization password.',
'sort_order' => '3',
),
'MODULE_PAYMENT_CUSTOM_PAY_ZONE' => array(
'title' => 'Payment Zone',
'value' => '0',
'description' => 'If a zone is selected, only enable this payment method for that zone.',
'sort_order' => '4',
'use_function' => '\\common\\helpers\\Zones::get_zone_class_title',
'set_function' => 'tep_cfg_pull_down_zone_classes(',
),
'MODULE_PAYMENT_CUSTOM_PAY_ORDER_STATUS_ID' => array(
'title' => 'Set Order Status',
'value' => '0',
'description' => 'Set the status of orders made with this payment module to this value',
'sort_order' => '5',
'set_function' => 'tep_cfg_pull_down_order_statuses(',
'use_function' => '\\common\\helpers\\Order::get_order_status_name',
),
'MODULE_PAYMENT_CUSTOM_PAY_SORT_ORDER' => array(
'title' => 'Sort order of display.',
'value' => '0',
'description' => 'Sort order of Custom payment display. Lowest is displayed first.',
'sort_order' => '6',
),
);
}
public function describe_status_key() {
return new ModuleStatus('MODULE_PAYMENT_CUSTOM_PAY_STATUS', 'True', 'False');
}
public function describe_sort_key() {
return new ModuleSortOrder('MODULE_PAYMENT_CUSTOM_PAY_SORT_ORDER');
}
}Примечание: обратите внимание на обязательные элементы:
namespace указывающее размещение класса
использовать классы модулей, используемые для создания установки
объявление класса с обязательным наследованием от ModulePayment
переменные необходимые для вашего модуля
ключи для перевода
конструктор выполняет инициализацию
функция before_process для действий
поддержка tax_class
минимальный набор полей конфигурации
функция description_status_key отвечающая за условие
Функция description_sort_key отвечающая за порядок сортировки
Не рекомендуется закрывать php tag во избежание отображения непечатаемых символов на страницах.
2. Установка модуля
После того, как вы вошли в админ-панель вашего сайта, нажмите « Модули », « Оплата», «Онлайн» и необходимые вкладки внешнего интерфейса . Включите переключатели « Показать неактивные » и «Показать не установленные », найдите свой модуль и нажмите кнопку «Установить » .
Проверьте клавиши и включен ли модуль . Выберите нужную зону оплаты и статус заказа. Если в вашей версии есть раздел Доступно для , заполните его и сохраните изменения.

