Просмотр Исходного

{toc}

В личном кабинете есть возможность изменять стандартные модули, а также создавать свои. Модули работают в пространстве имён _carbon\modules_.

h3. Как работают модули в ЛК?

Модули располагаются в рабочем каталоге:
{code}
/app/asr_cabinet/usr/local/lib/cabinet_modules/modules/
{code}
Так же есть каталог хранения:
{code}
/app/asr_cabinet/var/cabinet_modules/
{code}
При обновлении биллинга происходит копирование файлов из каталога хранения в рабочий каталог. Одноимённые файлы из каталога хранения затирают более старые в рабочем каталоге.
Например, более свежий файл Payment.php из каталога хранения перепишет более старый файл Payment.php из рабочего каталога.
{code:title=Будет скопирован в рабочий каталог}
ls -l /app/asr_cabinet/var/cabinet_modules/Payment.php
-rw-r--r-- 1 root root 126174 Июл 18 09:56 /app/asr_cabinet/var/cabinet_modules/Payment.php
{code}
{code:title=Будет переписан}
ls -l /app/asr_cabinet/usr/local/lib/cabinet_modules/modules/Payment.php
-rw-r--r-- 1 root root 126016 Фев 6 08:33 /app/asr_cabinet/usr/local/lib/cabinet_modules/modules/Payment.php
{code}

h3. Как создать свой модуль?

# Разместите модуль в рабочем каталоге, при этом он сразу будет доступен в личном кабинете.
{code}
/app/asr_cabinet/usr/local/lib/cabinet_modules/modules/
{code}
{note}
Если в модуле будет ошибка, то полностью перестанет работать личный кабинет. Вы можете установить [сервер Billing Slave|Дочерний сервер Billing Slave] и проводить разработку модулей на нём, чтобы не мешать работе абонентов.
{note}
# Когда модуль будет готов, скопируйте его в каталог хранения:
{code}
/app/asr_cabinet/var/cabinet_modules/
{code}
Так пользовательский модуль не исчезнет во время обновления, а также попадёт в резервную копию личного кабинета.

h3. Примеры

Необходимо заменить описание для автоплатежей Paymaster.

# Перейдём в контейнер личного кабинета
{code}
chroot /app/asr_cabinet/
{code}
# Cкопируем стандартный модуль, все изменения будут происходить в новом файле.
{code}
cp -p /usr/local/lib/cabinet_modules/modules/AutopayPayment.php /usr/local/lib/cabinet_modules/modules/AutopayPaymentPaymaster.php
{code}
# Найдём блок с нужным нам кодом и вносим необходимые изения
{code}
# находим блок public function processPOST_paymaster($POST)

$params = Array(
'LMI_MERCHANT_ID' => $login,
'LMI_PAYMENT_AMOUNT' => $sum,
'LMI_CURRENCY' => "RUB",
'LMI_PAYMENT_DESC_BASE64' => base64_encode('Подключение автоплатежей'),
'LMI_PAYMENT_NO' => $order_id,
'LMI_CREATE_TOKEN' => 'True',
'LMI_PAYMENT_METHOD' => 'BankCard'
);

# нас интересует параметр 'LMI_PAYMENT_DESC_BASE64' => base64_encode('Подключение автоплатежей'),
# Мы хотим передавать в этом параметре номер договора
# $contract_number = $this->user_info()->contract_number;
# получаем номер договора перед $params
# заменяем на 'LMI_PAYMENT_DESC_BASE64' => base64_encode("МОЙ ТЕКСТ " . $contract_number),


$login = $this->fiscal_config->paymaster["login"][0];
$sum = $payResult->summa_in;
$order_id = $payResult->operation_id_out;
$contract_number = $this->user_info()->contract_number;

$params = Array(
'LMI_MERCHANT_ID' => $login,
'LMI_PAYMENT_AMOUNT' => $sum,
'LMI_CURRENCY' => "RUB",
'LMI_PAYMENT_DESC_BASE64' => base64_encode("МОЙ ТЕКСТ " . $contract_number),
'LMI_PAYMENT_NO' => $order_id,
'LMI_CREATE_TOKEN' => 'True',
'LMI_PAYMENT_METHOD' => 'BankCard'
);
{code}
# Cкопируем новый модуль в каталог хранения
{code}
cp -p /usr/local/lib/cabinet_modules/modules/AutopayPaymentPaymaster.php /var/cabinet_modules/AutopayPaymentPaymaster.php
{code}
# В личном кабинете для вызова этого модуля будет использоваться следующий код
{code}
[cabinet_autopay_payment_paymaster operator="paymaster"]
{code}