Вспомогательные скрипты и утилиты

Материал из ExpertBilling
Версия от 15:59, 22 сентября 2011; Admin (обсуждение | вклад) (Страница-заглушка)

Перейти к: навигация, поиск

Скрипт рассылки сообщений о состоянии баланса

Для рассылки информации о балансе используется скрипт /opt/ebs/data/sendmail.py. Скрипт использует шаблон "Информационное письмо" сообщения о балансе, вид которого можно изменить в интерфейсе администратора. По-умочланию шаблон выглядит так:

---------------------------------------------------
 Это сообщение сгенерировано биллинговой системой!
---------------------------------------------------

Здравствуйте, ${account.username}.
Уведомляем, что актуальный баланс Вашего лицевого счета составляет ${"%.2f" % account.ballance} руб. Размер кредита ${account.credit}.
Пожалуйста, пополните баланс во избежание блокировки.
---
${operator.organization}

Параметры работы скрипта настраиваются в конфиг-файле ebs_config.ini

[sendmail]
log_type = logging
log_file = log/sendmail_log
log_level= 0
log_ident= ebs_sendmail
subject = Provider information - тема письма
use_tls = False - использовать TLS
send_if_less = 5000 - пороговое значение баланса, ниже которого пользователь получит письмо
host = smtp.gmail.com - адрес SMTP сервера
host_user = SMTP имя пользователя
host_password = пароль SMTP пользователя
port = 25 SMTP порт сервера
email_from = info@provider.com - с этого адреса будут слаться письма
fail_silently = False - в случае ошибки продолжать отправку

Для того, чтобы рассылать уведомления в 00:00:00 каждого дня, нужно добавить в crontab следующую строку:

0 0 * * * /usr/bin/env python /opt/ebs/data/sendmail.py >>/opt/sendmail.log

Страница-заглушка

Вы можете настроить ExpertBilling так, что если у пользователя закончился баланс, то сервер доступа начнёт его перенаправлять на специальную страницу, где будет сказано об этом. Для настройки заглушки необходимо:

1 Включить и настроить IPN действия для тарифного плана. Если вы используете не IPN тарифные планы, то необходимо также разрешить PPTP/PPPOE/DHCP подключение при отрицательном балансе и блокировках.

2 Настроить apache так, чтобы при запросе любой страницы он отдавал сообщение о том, что у пользователя закончились деньги.

3 Настроить файервол на сервере доступа.

Приступим. 1.

IPN действия включены в тарифном плане


Аккаунту разрешено подключаться с нулевым балансом

Команды сервера доступа, к которому привязан аккаунт должны быть такими:

Для VPN тарифных планов:

Включить субаккаунт:

/ip firewall address-list remove [find comment==blocked-$subacc_id]

Отключить субаккаунт:

/ip firewall address-list add list=blocked_users address=$subacc_vpn_ip_address comment=blocked-$subacc_id disabled=no

Для IPN тарифных планов:

Включить субаккаунт:

/ip firewall address-list remove [find comment==blocked-$subacc_id]

Отключить субаккаунт:

/ip firewall address-list add list=blocked_users address=$subacc_ipn_ip_address comment=blocked-$subacc_id disabled=no

Для использования данной возможности субаккаунту _ДОЛЖЕН_ быть назначен серер доступа в его профиле.

2. Добавьте в /etc/apache2/sites-enabled/ файл vhost_blank.conf со следующим содержимым

Listen 81
<VirtualHost *:81>
    ServerName 10.1.1.1
    ServerAdmin webmaseter@isp.net

    ErrorLog /var/log/apache2/nomoney_err.log
    CustomLog /var/log/apache2/nomoney_access_log combined
    DocumentRoot  /opt/ebs/web/nomoney

    <Directory "/opt/ebs/web/nomoney">
        AllowOverride All
        Options FollowSymlinks Includes
        ErrorDocument 404 /index.html
        DirectoryIndex index.html
	AddDefaultCharset utf-8
	allow from all
    </Directory>
</Virtualhost>

По пути /opt/ebs/web/nomoney нужно создать файл index.html со следующим содержимым:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Сообщение от провайдера::ExpertBilling</title>
</head>
<body>
<center><img src="provider_logo.png" alt="" /></center>
<h1 align="center">Уважаемый абонент.</h1>
<h1 align="center">На вашем счету закончились деньги. <a href="https://isp.net." target="_blank">"Веб-кабинет"</a></h1>
</body>
</html>

Перезапустите Apache для того, чтобы изменения вступили в силу.

/etc/init.d/apache2 restart

3. Настроим Firewall. Предположим, что 10.1.1.1 - IP адрес сервера с Apache, который мы настраивали пунктом выше. Правила должны стоять в самом начале!!!

/ip firewall filter add src-address-list=internet_users dst-address=10.1.1.1 action=accept
/ip firewall filter add src-address=10.1.1.1 dst-address-list=internet_users action=accept
/ip firewall filter add src-address-list=blocked_users action=drop

Настроим редирект всех HTTP запросов

/ip firewall nat add chain=srcnat src-address-list=blocked_users action=masquerade
/ip firewall nat add chain=dstnat protocol=tcp dst-port=80 action=dst-nat to-addresses=10.1.1.1 to-ports=81

Теперь при наступлении отрицательного баланса биллинг будет посылать на сервер доступа команду на добавление VPN IP адреса субаккаунта в адрес-лист blocked_users, все запросы на 80 порт которого будут редиректиться на сервер с apache, который по указанному адресу будет показывать нашу заглушку.

Ограничением данного подхода является только динамическая выдача IP адресов VPN пользователям.

Скрипт импорта платежей

Скрипт предназначен для импорта платежей из текстовых файлов формата CSV. Скрипт находится по пути /opt/ebs/data/scripts/payments/process.py Файл настроек находится по адресу /opt/ebs/data/scripts/payments/pattern.ini

Формат файла настроек

[Belarusbank]
folder_in=Belarusbank/IN/
folder_out=Belarusbank/OUT/
folder_err=Belarusbank/ERR/
file_mask=*.asb
exclude_mask=lan.*
separator=;
payment_type=BELARUSBANK_PAYMENT_IMPORT
encoding=cp855
fieldnames=ACC;FIO;DATETIME;TIME;SUM;EMPTY;EMPTY;EMPTY;PID
datetime_fmt=%d/%m/%Y
time_fmt=%H:%M

[Webmoney]
folder_in=WebMoney/IN/
folder_out=WebMoney/OUT/
folder_err=WebMoney/ERR/
file_mask=*.*
exclude_mask=r*.*
separator=;
payment_type=WEBMONEY_PAYMENT_IMPORT
fieldnames=DATETIME;ACC;SUM;EMPTY;EMPTY;PID;EMPTY;EMPTY;EMPTY;EMPTY
datetime_fmt=%d/%m/%Y %H:%M:%S
time_fmt=
encoding=utf-8

Описание настроек:

  • folder_in путь к папке с текстовыми файлами CSV
  • folder_out путь к папке с успешно обработанными файлами платежей
  • folder_err путь к папке с обработанными файлами платежей, содержащими записи в неверном формате или ошибочную информацию
  • file_mask - маска файлов платежей
  • exclude_mask - маска файлов, подлежащих к исключению обработки
  • separator - разделитель в файле csv
  • payment_type - тип платежа. Для нового типа платежей нужно создать запись в таблице базы данных billservice_transactiontype, поместив в поле name текстовое описание платежа, а в поле internal_name - текстовую константу payment_type.
  • fieldnames - формат файла csv. Поле DATETIME предназначено для даты совершения платежа, поле ACC для номера договора аккаунта, SUM - сума платежа, EMPTY - пустое или не имеющее значения поле, PID аналогично EMPTY, TIME - поле времени платежа, если дата и время разнесены по разным столбцам
  • datetime_fmt - формат поля DATETIME. Возможные значения символов подстановки вы можете найти на этой странице http://docs.python.org/library/datetime.html#strftime-and-strptime-behavior
  • time_fmt формат поля TIME
  • encoding кодировка файла CSV

Важно!!! Обращайте внимание на регистр символов в путях к папкам. Обратите внимание В ранних версиях EBS 1.4 данный скрипт отсутствовал. Обратитесь к разработчикам за получением скрипта.