Документация по версии 1.5
Содержание
Введение
Этот раздел wiki будет посвящён новой версии биллинг-системы ExpertBilling 1.5.
ExpertBilling 1.5 принципиально другая биллинга система и не многим похожа на предыдущие версии. Она содержит веб-интерфейс, рассчитанный на работу с абонентскими базами до 300 000 - 500 000 абонентов и вертикально/горизонтально масштабируемую структуру, которая способна плавно наращивать вычислительные мощности.
Код ExpertBilling теперь открыт на 70%. Вы свободно можете модифицировать интерфейс и логику отсылки команд на сервера доступа.
ExpertBilling использует зарекомендовавшие себя production решения RabbitMQ, Celery, PostgreSQL, которые используются такими гигантами как Twitter, VmWare и многими другими.
ExpertBilling стал гораздо аккуратнее и логичнее в своей работе.
ExpertBilling теперь не привязывается к жёсткому диску. Вы сможете переустановить систему в любой момент, используя свою лицензию.
Увеличение количества абонентов стало возможно без обновления системы.
Кроме этого ExpertBilling 1.5 стал гораздо безопаснее и надёжнее. Мы проделали огромную работу и надеемся, что это не напрасно.
Обратите внимание, что выложенная версия ExpertBilling 1.5 является RC версией и вы её используете на свой страх и риск. Мы просим вас сообщать на форуме о всех найденных проблемах, чтобы они были быстрее исправлены.
Установка
Перед началом работы выполните следующее:
Выполните в консоли с правами суперпользователя:
$sudo -s
#apt-get install fabric
Возможно 3 варианта установки ExpertBilling 1.5. Обновление, апгрейд, апгрейд с версии 1.4.1. Апгрейд с более ранних версий не предусмотрен.
Установка с нуля
Скачанный архив нужно положить в /opt/ и распаковать из него только скрипт-инсталлятор fabfile.py и инструкцию по установке.
#cd /opt/ #tar -xvzf путь к архиву с биллингом fabfile.py install.txt
Установка postgresql 9.1
#apt-get update #apt-get install fabric postgresql-9.1 postgresql-contrib-9.1 postgresql-server-dev-9.1
Создание директории:
#mkdir /opt/ebs
Создание пользователя базы данных и базы данных. Рекомендуемый пароль - ebspassword:
#su postgres $createuser -P -s ebs $createdb -O ebs ebs $exit $exit
Запустите установку биллинга с нуля с правами root-а из директории /opt/.
#fab deploy:demo1.5_x64.tar.gz для 64-бит версии демо #fab deploy:demo1.5_x32.tar.gz для 32-бит версии демо
или подставить ваш скачанынй архив с системой. После того, как устанвока завершится - откройте в браузере айпи вашего сервера и войдите в веб-кабинет
Апгрейд
Скачанный архив нужно положить в /opt/ и распаковать из него только скрипт-инсталлятор fabfile.py и инструкцию по установке.
#cd /opt/ #tar -xvzf путь к архиву с биллингом fabfile.py install.txt
И
#fab upgrade:demo.tar.gz
Апгрейд с версии 1.4.1
Скачанный архив нужно положить в /opt/ и распаковать из него только скрипт-инсталлятор fabfile.py и инструкцию по установке.
#cd /opt/ #tar -xvzf путь к архиву с биллингом fabfile.py install.txt
При апгрейде с версии 1.4.1 нужно: 1. Установить postgresql-9.1 postgresql-contrib-9.1. 2. Выполнить дамп базы данных с биллингом с помощью pg_dump
su postgres pg_dump ebs >/tmp/ebs.dump exit cp /tmp/ebs.dump /opt/ebs.dump
3. Удалить postgresql-8.4.
apt-get remove postgresql-8.4
4. Настроить postgresql-9.1 на запуск на порту 5432 (/etc/postgres/9.1/main/postgresql.conf). 5. Перезапустить postgresql, 6. Создать БД ebs с пользователем ebs
createuser -s -P ebs createdb -O ebs ebs
7. Импортировать в созданную базу дамп:
su postgres psql ebs -f /opt/ebs.dump
8. Запустить апгрейд:
#fab upgrade_14:demo.tar.gz
После установки откройте файл /opt/ebs/web/ebscab/settings_local.py и переопределите в нём значения из файла /opt/ebs/web/ebscab/settings.py. Этот файл не будет перезатираться при обновлениях.
После настройки веб-кабинета:
- /etc/init.d/apache2 reload
Внимание!!! Это не финальная версия 1.5. О всех найденных прблемах просьба писать на форуме http://forum.expertbilling.ru/
Имя и пароль по-умолчанию для входа в веб-кабинет admin/admin.
Платёжные системы
В ExpertBilling 1.5 реализован приём следующих типов платежей:
- QIWI
- Единая Касса w1.ru
- Сбербанк РФ
- Liqpay
- EasyPay
- MasterPlat
- SimpleTerminal
Настройка производится разово в файле settings_local.py веб-кабинета:
GETPAID_BACKENDS = ('payments.easypay', 'payments.liqpay', 'payments.ru_sberbank', 'payments.w1ru', 'payments.qiwiru', 'payments.simplaterminal', ) GETPAID_BACKENDS_SETTINGS = { # Please provide your settings for backends 'payments.liqpay' : { 'TYPE': 'frontend', 'DEFAULT_CURRENCY' : 'UAH', 'MERCHANT_ID': 'i7444123444', 'MERCHANT_SIGNATURE': 'LMoTlGet9IVubuNbBvKIZ0wNDdsluOLsIvdzd', 'PAY_WAY': ('card', 'liqpay', 'delayed'), 'EXPIRE_TIME': 36, }, 'payments.easypay' : { 'TYPE': 'backend', 'DEFAULT_CURRENCY' : 'UAH', 'SERVICE_ID' : '1', 'allowed_ip': ('93.183.196.28', '93.183.196.26'), }, 'payments.ru_sberbank' : { 'TYPE': 'backend', 'DEFAULT_CURRENCY' : 'RUB', 'PASSWORD' : '12345', 'allowed_ip': ('93.183.196.28', '93.183.196.26'), }, 'payments.w1ru' : { 'TYPE': 'frontend', 'DEFAULT_CURRENCY' : 'RUB', 'MERCHANT_ID': '163789612661', 'MERCHANT_PASSWORD': 'MFVSdmZNajdBRXdcWmE3Z191cjBLWFJsZjhb', #======================================================================= # 'PTENABLED':[ # 'YandexMoneyRUB', # 'WebMoneyRUB', # ], #======================================================================= 'PTDISABLED':[ ], 'allowed_ip': ('93.183.196.28', '93.183.196.26'), 'EXPIRE_DAYS': 31, }, 'payments.qiwiru' : { 'TYPE': 'frontend', 'DEFAULT_CURRENCY' : 'RUB', 'TERMINAL_ID' : '12345', 'TERMINAL_PASSWORD' : '12345', 'LIFETIME': 48, 'ALARM_SMS': 0, 'ACCEPT_CALL': 0, 'MIN_SUM': 100, }, 'payments.masterplat' : { 'TYPE': 'backend', 'DEFAULT_CURRENCY' : 'RUB', 'DUSER' : 'test', 'DPASS': 'test', }, 'payments.simpleterminal' : { 'TYPE': 'backend', 'DEFAULT_CURRENCY' : 'RUB', 'SECRET': '12345678901234567890hgh55g54', } }
Дополнительно нужно зайти через веб-интерфейс в закрытую часть интерфейса администрирвоания по пути /admin/, зайти в раздел sites и для сайта по-умолчанию указать доменное имя сервера, которое доступно снаружи. УДАЛЯТЬ ЗАПИСЬ НЕЛЬЗЯ. ЕЁ НУЖНО ИМЕННО ОТРЕДАКТИРОВАТЬ.
Для приёма QIWI требуется прописать в cron (crontab -e) следующее:
*/5 * * * * cd /opt/ebs/web/ebscab/ && /opt/ebs/venv/bin/python manage.py process_qiwi_payments
При работе с терминалами qiwi ссылка для постбэка будет выглядеть следующим образом:
http://<server>/payments.qiwiru/qiwiru/payment/
При работе с единой кассой ссылка для постбэка:
http://<server>/payments.w1ru/w1ru/postback/
Для единой кассы дополнительно нужно авторизовать сайт. Для этого добавьте в файл
/opt/ebs/web/ebscab/templates/site_verify_codes.html
тэг, который вы получили в интерфейсе единой кассы.
За то, какие способы оплаты будут доступны пользователям, отвечает переменная GETPAID_BACKENDS. Настройки конкретного платёжного шлюза находятся в соответствующих секциях GETPAID_BACKENDS_SETTINGS.
Все типы платежей разбиты на 2 логических типа - frontend и backend. Frontend доступен для выбора через веб-кабинет. Backend используется, если оплата происходит без взаимодействия пользователя с веб-кабинетом. К примеру через терминал. Не меняйте эти значения.
Платёжная система SimpleTerminal
Это псевдо-платёжная система, которая позволяет использовать API биллинга для пополнения счёта с помощью HTTP запросов. Типичный запрос на пополнение выглядит так: sum=100&uid=contract&trans=123456&secret=1235453423423g4 Полный URL
http://<server>/payments.simpleterminal/simpleterminal/payment/?sum=100&uid=contract&trans=123456&secret=1235453423423g4
Если в настройках указан SECRET - его необходимо указывать в запросе в качестве параметра.
Просмотр оплаченных счетов доступен через интерфейс администратора по ссылке /ebsadmin/payment/. Допускается изменять статус платежа. Пополнение счёта абонента или удаление пополнения произойдёт автоматически.
Импорт платежей
В ExpertBilling 1.5 реализован импорт выписок о проведённых платежах. Скрипт находится в директории /opt/ebs/data/scripts/payments/. Система импорта автономна и может работать на другом сервере или по любому пути на файловой системе.
Перед началом работы нужно переименовать файл pattern.ini.tmpl в pattern.ini и настроить формат обрабатываемых платёжек.
Пример:
[belpost] active=1 folderin=belpost/IN/ folderout=belpost/OUT/ foldererr=belpost/ERR/ mask=*.alt rmask=r*.alt separator=; payment_type=BELPOST_PAYMENT_IMPORT fieldnames=DATETIME;ACC;FIO;SUM;EMPTY;PID;EMPTY fielddefault=;;;;;; datetime_fmt=%d/%m/%Y %H:%M:%S reversal_payments=False [Belarusbank] active=1 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 reversal_payments=False [Webmoney] active=1 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 reversal_payments=False [EasyPay] active=1 folder_in=EasyPay/IN/ folder_out=EasyPay/OUT/ folder_err=EasyPay/ERR/ file_mask=*.txt exclude_mask=r*.txt separator=; payment_type=EASYPAY_PAYMENT_IMPORT fieldnames=DATETIME;ACC;PID;FIO;SUM datetime_fmt=%d/%m/%Y %H:%M:%S encoding=utf-8 time_fmt= reversal_payments=False [PriorBank] active=1 folder_in=Priorbank/IN/ folder_out=PriorBank/OUT/ folder_err=Priorbank/ERR/ file_mask=*.prb exclude_mask=r*.prb separator=; payment_type=PRIORBANK_PAYMENT_IMPORT fieldnames=SUM;EMPTY;ACC;EMPTY;PID;EMPTY;EMPTY;EMPTY;DATETIME;EMPTY datetime_fmt=%d%m%y encoding=utf-8 time_fmt= reversal_payments=False
Опция reversal_payments=True говорит, что платёж нужно сторнировать - отменить. Директории folder_in, folder_out, folder_err содержат входящие платежи (вы должны помещать их туда чем-либо в раздельных файлах с расширением, указанным в переменной file_mask), обработанные платежи и платежи с ошибками соответственно.
Для обработки платежей, вам нужно настроить crontab на вызов файла process.py раз в 10-15 минут.
*/10 * * * * cd /opt/ebs/web/ebscab/ && /opt/ebs/venv/bin/python process.py
SMS рассылка
В ExpertBilling 1.5 реализован механизм рассылки SMS. Он позволяет:
- Слать SMS конкретному пользователю, используя шаблон сообщения.
- Слать SMS группе пользователей, используя шаблон сообщения.
- Создавать отложенные сообщения для отправки их в будущем
- Выполнять рассылку сообщений о балансе.
Настройка SMS подсистемы производится в файле settings_local.py
SENDSMS_BACKENDS = ( ('sendsms.backends.websms.SmsBackend', 'websms.ru'), ('sendsms.backends.smsru.SmsBackend', 'sms.ru'), ) SENDSMS_BACKENDS_SETTINGS = { 'sendsms.backends.websms': { 'FROM_NAME': '', # http://websms.ru/FromName.asp 'USERNAME': '', 'PASSWORD': '', }, 'sendsms.backends.smsru': { 'FROM_NAME': '', 'API_ID': '', 'TRANSLIT': '1', 'TEST': '0', 'PARTNER_ID': '', }, 'sendsms.backends.smspilotru': { 'FROM_NAME': '', 'API_ID': '', } } SENDSMS_IF_BALLANCE_AMOUNT = 0 SENDSMS_DEFAULT_BACKEND = 'sendsms.backends.websms.SmsBackend'
Переменная SENDSMS_BACKENDS содержит пути к бэкэндам для работы с соответствующими SMS-операторами. По-умолчанию реализована поддержка sms.ru и websms.ru Переменная SENDSMS_BACKENDS_SETTINGS содержит настройки конкретного оператора.
Если вы планируете использовать рассылку о балансе - вам необходимо также заполнить переменные SENDSMS_IF_BALLANCE_AMOUNT (минимальный баланс, ниже которого будут слаться уведомления) и SENDSMS_DEFAULT_BACKEND (бэкэнд, используемый при отсылке сообщений из скриптов).
Шаблон самого сообщения вы можете отредактировать в интерфейсе администратора Справочники->Шаблоны->Минимальный баланс. Шаблон будет обработан шаблонизатором Django. Внутри него вы можете использовать объект account, который содержит текущие значения из полей аккаунта. К примеру Шаблон:Account.balance - подставит баланс, Шаблон:Account.password - пароль. Парсинг шаблона и подстановка будут выполняться непосредственно в момент отсылки. До отсылки сообщение будет храниться в базе в виде шаблона.
Для автоматизации ежемесячной рассылки нужно добавить в crontab следующие записи:
12 * * * * cd /opt/ebs/web/ebscab/ && /opt/ebs/venv/bin/python manage.py ballance_sms_messages # раз в сутки в 12 дня слат ь нотификации о балансе */5 * * * * cd /opt/ebs/web/ebscab/ && /opt/ebs/venv/bin/python manage.py process_sms_messages # каждые 5 минут выполнять отсылку отложенных SMS сообщений.
Резервное копирование
Основную ценность предоставляет база данных, паэтому рекомендуется настроить регулярное создание бэкапов с копированием их на удалённый сервер. Ниже описаны способы создания бэкапов и дана необходимая информация о их восстановлении.
Бэкапы при обновлении системы
При каждом обновлении скрипт обновления автоматически создаёт бэкапы
- базы данных
- содержимого директории /opt/ebs/data/
- содержимого директории /opt/ebs/web/
Ручной бэкап базы данных
- sudo -s
- su postgres
- pg_dump ebs>/tmp/ebs.dump
- exit
- mv /tmp/ebs.dump /opt/ebs/backups/датавремя.sql
Восстановление ручного бэкапа базы данных
sudo -s billing force-stop su postgres dropdb ebs createdb -O ebs ebs psql ebs -f /путь к несжатому бэкапу exit billing start
Тарифный план, Расчетный Период, Пул для PPPoE,L2TP,PPTP
Создание Пула
Перед созданием тарифных планов следует определиться каким образом будут вестись расходы клиентов, каким образом доступ станет ограниченным, как будет сниматься сумма и многое другое. Правила биллинга позволяют широкие многогранные возможности для этого.
определим стандарный вариант.
Создаем для начала пул для сессии, Не смотря что протоколы различны, пул для них создается по единому правилу IPv4.
СПРАВОЧНИКИ -> IP пулы -> Добавить
Название* - имя пула, памятка, можете назвать на свое усмотрение
Тип - IPv4 VPN - для реализации данных протоколов
C IP* - начало диапазона, пример 10.0.128.0
По IP* - конец диапазона, пример 10.0.131.255
то есть в результате получили единый диапазон адресов 10.0.128.0/22 на 1023 клиента
Следующий Пул - тут же после создания данного пула можно добавить новый
Файл:2.jpg
Создание Расчетного Периода
Расчетный период обязателен, именно таким образом биллинг будет снимать вложенную сумму клиента. Не смотря на то, что сумма будет отчисляться ежедневно или раз месяц, этот момент необходим для полной формы взаимодействий. Допустим для разных тарифов будут разные условия, тогда стоит добавить несколько пунктов, к примеру один тариф отсчитывает сумму с момента подключения, другой обязательно вычитает с указанной даты или период даты (день,месяц, год)
СПРАВОЧНИКИ -> Расчетные периоды -> Добавить
Параметры расчётного периода
Название - Любое для памятки, в тестовом варианте отметим "Месяц"
Начинать при активации - установка галочки уберет дату снятия суммы, так как каждому клиенту будет принят индивидуальный подход расчета, начиная с момента активации аккаунта.
Длина Промежутка - через какой определенный момент будет определяться правило.
Пример: создаем с расчетным периодом Месяц и начинать при активации. Сумма снятия допустим будет 1000 условных единиц. Клиент ложит 23 числа сумму, с этой суммы 23 числа другого
месяца снимается именно 1000 условных единиц.
Другой пример: есть подключенная гостиница, где любой постоялец может активировать карточку и подключить свой ноутбук
через wi-fi. Правило с расчетным периодом День даст суточный режим активации данного аккаунта
Все остальные тонкости правил по отношению к акканту рассмотрим ниже
Файл:3.jpg
Тарифные Планы
Перейдем во вкладку Тарифные Планы, где и создадим все необходимые условия правил выхода в интернет для аккаунтов.Варианты как все будет работать безграничны, для начала мы создадим стандартный вариант
Добавить -
Общие параметры:
Название: Имя тарифного Плана. Именно это название будет отображаться в кабинете пользователя. Учтите этот момент
Способ Доступа: Выбираете тип аутентификации.
Выполнять IPN действия: - этот момент нужно активировать при получение DHCP адресов с биллинга, если выдача идет с Mikrotik или коммутаторов второго уровня, то пункт следует пропустить
VPN IP пул: - в списке отобразится все созданные до ныне пулы ( смотреть Ip Пулы) Примечание: Можно создать несколько тарифных планов и дать им один и тот же пул, если количество адресов позволяет это, в принципе, количество адресов можно увеличить в любой момент. Сам по себе пул не играет ни какой активной роли, все активные правила задаются в тарифных и дополнительных планах к аккаунту.
Гостевой VPN IP пул:- служит для задач поднятия сессий, не входящий для роли к выходу в интернет. Например, для гостей сети, и как удачный вариант, для выдачи других адресов аккаунтам, которые попали в список должников. Таким образом удобно назначить в нате дополнительные правила для этих адресов и пересылать, к примеру, при любом запросе на страницу - заглушку с информационным листом, о том, что закончились деньги на счету.
для этого создаете в IP пуле еще один IPv4 VPN , отличный по адресному пространству от основного. Например, основной 192.168.1.1/24. дополнительный 192.168.2.1/24 - и назовите его,например, "блокировка".
Отсюда в списке Гостевой Пул выберите Блокировка. Подробно об этом опишется в разделе Страница- заглушка.
Доступ разрешён: Здесь Вы можете определить в каком периоде будет работать тарифный план.
Расчётный период: - Определяется для тарифного плана созданный до ныне расчетный период для снятия денег
Стоимость пакета: - стоимость тарифного плана. Именно с этого значения определяется расчетный период и формулируется подсчет
Требовать наличия стоимости пакета:
Производить доснятие: - дополнительное условие, при котором в конце месяца не смотря на установленные правила снимется данная сумма. указанная в стоимости пакета. Если правила сформулированы через Периодические услуги, ВНИМАНИЕ!, не отмечайте данный пункт, иначе сумма вычитается вдвойне.
Оплата экспресс картами: - Разрешить через веб-кабинет оплату экспресс-картами
Разрешить услугу перевода баланса: - пункт разрешает из своего счета-балланса пользователю перевести заданную сумму другому пользователю единой биллинговой системы. Разрешать или не разрешать зависит от ваших предпочтений.
Описание тарифного плана: - текст, который отобразится в клиентской части вебкабинета, при описаниях тарифных планов, особенно удобен, если разрешить самостоятельно пользователю переходить по истечению срока на другие тарифные планы.
Активен: Активация тарифного плана. Без галочки все что вы здесь сделали работать не будет на сторону аккаунта
Параметры блокировки
Разрешить пользовательскую блокировку: - пункт, разрешающий пользователю через вебкабинет приостановить услугу провайдера на период указанный ниже. при активации закрывается доступ по заданному протоколу и "замораживается" вычет баланса.
Стоимость блокировки: Сумма для услуги данного тарифного плана
MAX длительность блокировки: - число, определяющее количество дней
Минимальный баланс для блокировки: - сумма, которая должна присутствовать на балансе в момент блокировки
Удобен: для категории лиц, которые работают вахтовым методом, а также летний сезон с отпусками.
Параметры Доступа
Списания
Позволяют сделать детальную настройку списания аккаунта
Периодические услуги -> Добавить
Название* - имя услуги
Период* - выбираем из списка созданных расчетных периодов
Стоимость - вычитаемая сумма за данный период
Способ списания - каким образом по отношению к дате производится вычет ( в начале месяца снимается тарифная сумма, в конце или ежедневное списание методом деления стоимости на число календарных дней текущего месяца)
Кол-во списаний в сутки - При ежедневном списании можно увеличить деление в суточном режиме
Условие списания* - вычет суммы производится до определенного момента, определяется числом, больше или меньше которого возможен дополнительный вычет
Сумма для условия - Число для условия списания
Активировать и Отключить - период времени для правила данного списания
Разовые услуги
Сумма для условия активации аккаунта к данному тарифному плану
С этого момента можно приступить к созданию акканта и проверить работоспособность системы