Задача
Нужно отключить для клиентов провайдера отображение и использование баланса лицевого счёта в BILLmanager. Например, чтобы клиенты провайдера могли оплачивать услуги только с помощью доступных методов оплаты.
В статье рассмотрено два пользовательских сценария:
- отключение отображения баланса. В этом случае клиент провайдера сохраняет возможность пополнять баланс в разделе Финансы → Платежи, но информация о балансе скрывается:
- на главной странице;
- в верхнем меню.
- отключение отображения и пополнения баланса. В этом случае клиенту провайдера недоступна возможность просмотра и пополнения баланса:
- скрывается информация о балансе скрывается на главной странице и в верхнем меню;
- отключается возможность пополнения баланса в разделе Финансы → Платежи.
Внимание!
В обоих случаях сохранится возможность пополнить баланс через API.
Решение
Отключение отображения баланса
Чтобы отключить отображение баланса, но сохранить возможность пополнить баланс в разделе Финансы → Платежи:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Создайте файл /usr/local/mgr5/etc/xml/billmgr_mod_disablefunds.xml со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?> <mgrdata> <handler name="remove_funds.sh" type="xml"> <event name="desktop" after="yes" proirity="after" base="project"/> </handler> <handler name="remove_funds.sh" type="xml"> <event name="dashboard" after="yes"/> </handler> <handler name="remove_funds.sh" type="xml"> <event name="dashboard.info" after="yes"/> </handler> </mgrdata>
- Создайте файл скрипта в каталоге /usr/local/mgr5/addon с именем remove_funds.sh:
#!/bin/bash #Чтение XML-данных из стандартного ввода xml=$(cat) #Проверка прав пользователя: если пользователь не администратор, XML возвращается без изменений if [[ "${AUTH_LEVEL}" != "16" ]]; then echo "$xml" exit 0 fi #функция if [[ "${PARAM_func}" == "dashboard" ]] ; then #Удаление кнопки Пополнить и отображения баланса с главной страницы echo "$xml"| sed 's|<toolbtn form="payment.add" name="balance_info"><button name="btn_topup" icon="mb-finance" size="small" theme="primary"/></toolbtn>||' elif [[ "${PARAM_func}" == "dashboard.info" ]]; then #Удаление информации о балансе из раздела информации об аккаунте echo $xml| sed 's|<balance func="payment.add">.*</balance>||'| sed 's|<msg name="balance">.*</msg>||' elif [[ "${PARAM_func}" == "desktop" ]]; then #Удаление отображения баланса из верхней части интерфейса echo $xml| sed 's|<balance func="payment.add">.*</balance>||' else #Для всех остальных случаев - возврат исходного XML без изменений echo "$xml" fi
- Сделайте файл исполняемым:
sudo chmod a+x /usr/local/mgr5/addon/remove_funds.sh
- Перезапустите платформу и очистите XML-кеш:
sudo rm /usr/local/mgr5/var/.db.cache* -rf && rm /usr/local/mgr5/var/.xmlcache/* -rf && /usr/local/mgr5/sbin/mgrctl -m billmgr -R
- Проверьте работу модуля под учётной записью клиента. Если на главной странице возникает ошибка, удалите созданные файлы и перезапустите платформу.
Отключение отображения и пополнения баланса
Чтобы скрыть баланс на главной странице и отключить его пополнение в разделе Финансы → Платежи:
- Подключитесь к серверу с платформой по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Создайте файл /usr/local/mgr5/etc/xml/billmgr_mod_disablefunds.xml со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?> <mgrdata> <handler name="remove_funds.sh" type="xml"> <event name="desktop" after="yes" proirity="after" base="project"/> </handler> <handler name="remove_funds.sh" type="xml"> <event name="dashboard" after="yes"/> </handler> <handler name="remove_funds.sh" type="xml"> <event name="dashboard.info" after="yes"/> </handler> <handler name="remove_funds.sh" type="xml"> <event name="payment" after="yes"/> </handler> </mgrdata>
- Создайте файл скрипта в каталоге /usr/local/mgr5/addon с именем remove_funds.sh:
#!/bin/bash #Чтение XML-данных из стандартного ввода xml=$(cat) #Проверка прав пользователя: если пользователь не администратор, XML возвращается без изменений if [[ "${AUTH_LEVEL}" != "16" ]]; then echo "$xml" exit 0 fi #функция if [[ "${PARAM_func}" == "dashboard" ]] ; then #Удаление кнопки Пополнить и отображения баланса с главной страницы echo "$xml"| sed 's|<toolbtn form="payment.add" name="balance_info"><button name="btn_topup" icon="mb-finance" size="small" theme="primary"/></toolbtn>||' elif [[ "${PARAM_func}" == "dashboard.info" ]]; then #Удаление информации о балансе из раздела информации об аккаунте echo $xml| sed 's|<balance func="payment.add">.*</balance>||'| sed 's|<msg name="balance">.*</msg>||' elif [[ "${PARAM_func}" == "desktop" ]]; then # Удаление отображения баланса из верхней части интерфейса echo $xml| sed 's|<balance func="payment.add">.*</balance>||' elif [[ "${PARAM_func}" == 'payment' ]]; then #Удаление кнопки Создать в разделе платежей, чтобы ограничить возможность пополнения баланса echo "$xml" | xmlstarlet ed \ -d "//toolbtn[@func='payment.add']" else #Для всех остальных случаев - возврат исходного XML без изменений echo "$xml" fi
- Установите утилиту xmlstarlet. Она есть в исполняемом файле, но по умолчанию отсутствует на сервере:
Astra Linux, Ubuntusudo apt install xmlstarlet
AlmaLinuxsudo dnf install xmlstarlet
- Сделайте файл исполняемым:
sudo chmod a+x /usr/local/mgr5/addon/remove_funds.sh
- Перезапустите платформу и очистите XML-кеш:
sudo rm /usr/local/mgr5/var/.db.cache* -rf && rm /usr/local/mgr5/var/.xmlcache/* -rf && /usr/local/mgr5/sbin/mgrctl -m billmgr -R
- Проверьте работу модуля под учётной записью клиента. Если на главной странице или в разделе Финансы → Платежи возникает ошибка, удалите созданные файлы и перезапустите платформу.
Диагностика ошибок
Если плагины работают некорректно, получите более подробную информацию об ошибках:
- Установите максимальный уровень логирования для файла /usr/local/mgr5/var/billmgr.log. Подробнее см. в статье Логирование в BILLmanager.
- Воспроизведите ошибку.
- Проверьте лог /usr/local/mgr5/var/billmgr.log.
- Верните уровень логирования к исходному значению.
Может быть полезно