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

Материал из ExpertBilling
Версия от 10:54, 8 сентября 2012; Admin (обсуждение | вклад) (Настройка заглушки через IPN Действия)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

Для рассылки информации о балансе используется скрипт /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 так, что если у пользователя закончился баланс, то сервер доступа начнёт его перенаправлять на специальную страницу, где будет сказано об этом. Возможны 2 варианта настройки:

  • через IPN действия;
  • через гостевой VPN пул;

У каждого из этих методов есть свои достоинства и недостатки. Использование IPN действий невозможно при динамической выдаче VPN IP адресов абонентам, а гостевой VPN пул не охватывает IPN абонентов.

Настройка заглушки через IPN Действия

Для настройки заглушки необходимо:

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. Для версии ниже 1.5(в 1.5 по-уомлчанию создаётся данная конфигурация и файл index.html) добавьте в /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 src-address-list=blocked_users action=dst-nat to-addresses=10.1.1.1 to-ports=81

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

Настройка заглушки через гостевой VPN пул

Гостевой VPN служит для динамической выдачи VPN IP адресов, в случае если абонент заблокирован по причине отрицательного баланса или наличия других блокировок Для настройки заглушки необходимо:

1 Создать VPN пул через интерфейс администратора. В пуле нужно указать сеть, которая не будет пересекаться ни с одной из ваших существующих сетей.

2 Указать созданный VPN пул в тарифном плане пользователя

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

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

Приступим. 1. Создайте VPN пул через меню Справочники->IP пулы

Vpn pool.png

2. Укажите выбранный пул в тарифном плане

Указание гостевого VPN пула

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

Listen 81
<VirtualHost *:81>
    ServerName 10.250.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.250.1.1 - IP адрес сервера с Apache, который мы настраивали пунктом выше. Правила должны стоять в самом начале!!!

/ip firewall filter add src-address=10.250.1.0/24 dst-address=10.250.1.1 action=accept
/ip firewall filter add src-address=10.250.1.1 dst-address=10.250.1.0/24 action=accept
/ip firewall filter add src-address-list=10.250.1.0/24 action=drop

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

/ip firewall nat add chain=srcnat src-address=10.250.1.0/24 action=masquerade
/ip firewall nat add chain=dstnat src_address=10.250.1.0/24 protocol=tcp dst-port=80 action=dst-nat to-addresses=10.250.1.1 to-ports=81

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

Ограничением данного подхода является возможность его использования только в PPTP/L2TP/PPPOE тарифных планах.

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

Скрипт предназначен для импорта платежей из текстовых файлов формата 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 данный скрипт отсутствовал. Обратитесь к разработчикам за получением скрипта.