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