Биллинговая система Nodeny

Главная категория => Nodeny 49 => Тема начата: Demeo от 26 Августа 2010, 18:56:17



Название: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 26 Августа 2010, 18:56:17
Доброго времени суток.

Помогите побороть проблему. Смешанная авторизация у пользователей: IP+MAC, PPTP, PPPoE. Стоит пропорциональная ежедневная абонплата (8:хх). Порог отключения 0,00 грн. При пересечении 0 клиента блокирует. НО: абонплата продолжает сниматься. Как сделать так, чтоб при блокировании клиента баланс не уходил в минус?


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 26 Августа 2010, 18:58:14
Доброго времени суток.

Помогите побороть проблему. Смешанная авторизация у пользователей: IP+MAC, PPTP, PPPoE. Стоит пропорциональная ежедневная абонплата (8:хх). Порог отключения 0,00 грн. При пересечении 0 клиента блокирует. НО: абонплата продолжает сниматься. Как сделать так, чтоб при блокировании клиента баланс не уходил в минус?
замораживай


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 26 Августа 2010, 19:21:31
Хорошая автоматизация, а как-нибудь, чтоб не ручками можно?


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 26 Августа 2010, 19:22:24
Хорошая автоматизация, а как-нибудь, чтоб не ручками можно?
ты хочешь заставить не считать то, что биллинг обязан считать


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 26 Августа 2010, 20:09:05
Биллинг обязан считать то, что клиент потребляет. А если не потребляет, то не считать до те пор, пока не станет потреблять или не получит возможность потреблять внеся деньги на счет


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 26 Августа 2010, 20:15:30
Биллинг обязан считать то, что клиент потребляет. А если не потребляет, то не считать до те пор, пока не станет потреблять или не получит возможность потреблять внеся деньги на счет
пардоньте, ну вы же сами выставили ему абонентскую плату.

включите по трафику и будет платить за то, что потреблял


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 26 Августа 2010, 20:27:27
Нет уж, вы извините. Абонплата по сути - это плата за потребленные услуги в какую-то единицу времени. Клиенту заблокировало доступ в интернет, так как деньги на счету закончились. То есть услуга ему заблокирована, а деньги снимаются - это бред.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 26 Августа 2010, 20:41:59
Нет уж, вы извините. Абонплата по сути - это плата за потребленные услуги в какую-то единицу времени. Клиенту заблокировало доступ в интернет, так как деньги на счету закончились. То есть услуга ему заблокирована, а деньги снимаются - это бред.
вы погорячились
абонплата включает в себя аренду каналообразующего оборудования и.т.д.

но мы все поняли что вы хотите
пишите скрипт выборки и update тарифа по условию

хотя интересно было бы сделать фишку по снятию абонлаты в случае попадания трафика в коллектор в этот день
но обязательно юзать нетфлоу сенсоры...а если объемы сотни мегабит, то трололо )


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 26 Августа 2010, 20:47:49
пишите скрипт выборки и update тарифа по условию

Ищем абонентов с 0 или меньше и меняем тариф на "Заблокирован"? Полный "0" в перле, но попробовать можно. Спасибо. Жаль, что в коробке такой возможности нет


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 26 Августа 2010, 20:49:39
пишите скрипт выборки и update тарифа по условию

Ищем абонентов с 0 или меньше и меняем тариф на "Заблокирован"? Полный "0" в перле, но попробовать можно. Спасибо. Жаль, что в коробке такой возможности нет
только вот наверное лучше искать не там, где 0, а где доступ запрещен.

потому как например у нас есть клиенты, которые на общих основаниях включены, но лимит стоит -999999 грн и сейчас на счету у него -1500 грн, а инет юзает и должен юзать дальше


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: smallcms от 27 Августа 2010, 02:18:18
только вот наверное лучше искать не там, где 0, а где доступ запрещен.

потому как например у нас есть клиенты, которые на общих основаниях включены, но лимит стоит -999999 грн и сейчас на счету у него -1500 грн, а инет юзает и должен юзать дальше
Свистите, ибо доступ может быть запрещён и для завирусованных ботнетами пользователей. А для обработки лимита собственно можно использовать как это не паразительно сам параметр лимита (цитирую документацию):
Цитировать
limit_balance   - граница отключения;

получаем нечто вроде
Код:
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid =0 && `state` = "off" && `balance`<`limit_balance`


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 27 Августа 2010, 06:05:43
Цитировать
Свистите, ибо доступ может быть запрещён и для завирусованных ботнетами пользователей.
у каждого по разному настроены фильтры


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 27 Августа 2010, 09:15:34
Цитировать
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`

И как это теперь периодически стартовать?


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 27 Августа 2010, 09:18:24
по крону можно так

Код:
echo 'UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`;' | mysql -uтвойлогин -pтвойпароль твоябд


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 27 Августа 2010, 11:02:42
по крону можно так

Код:
echo 'UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`;' | mysql -uтвойлогин -pтвойпароль твоябд

Спасибо, попробую


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: smallcms от 27 Августа 2010, 13:31:39
Цитировать
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`

И как это теперь периодически стартовать?

Код:
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
passwd_root_mysql=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'`
mysql_cmd='/usr/local/bin/mysql'

SQL='UPDATE `bill`.`users` SET `paket` = "1" WHERE `mid` =0 && `state` = "off" && `balance`<`limit_balance`'
echo $SQL | ${mysql_cmd} -u root --password=${passwd_root_mysql} bill
Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 27 Августа 2010, 13:43:48
Цитировать
UPDATE `bill`.`users` SET `paket` = '1' WHERE mid = 0 && `state` = "off" && `balance`<`limit_balance`

И как это теперь периодически стартовать?

Код:
#!/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
passwd_root_mysql=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'`
mysql_cmd='/usr/local/bin/mysql'

SQL='UPDATE `bill`.`users` SET `paket` = "1" WHERE `mid` =0 && `state` = "off" && `balance`<`limit_balance`'
echo $SQL | ${mysql_cmd} -u root --password=${passwd_root_mysql} bill
Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.
можно добавить еще sql_database в скрипт :)


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 28 Августа 2010, 08:24:22
Спасибо, скрипт работает.

Цитировать
Но это не панацея, т.к. не затрагиваются алиасы. Думаю написать на перле который будет "работать в лог" и алиасы записи.
Ну, это совсем уже шикарно будет. Алиасов у меня не много, но фича, думаю, понравится многим. Особенно, если будет запоминаться предыдущий тариф и после пополнения счета будет возвращаться.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 09 Сентября 2010, 20:41:17
Кстати, алиасы затрагиваются :) После блокирования основной учетки, система через какое-то время автоматом блокирует и алиасы, записывая в лог что-то типа "обнаружена заблокированная запись с назаблокированными алиасами, блокирую алиасы.... ", ну смысл понятен


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: ale-x от 09 Сентября 2010, 20:50:50
Отличный скрипт - то что нужно!


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: 0xbad0c0d3 от 18 Сентября 2010, 01:16:40
Строка #1085 nodeny.pl
Добавь в условие выборки: balance >= limit_balance
Получится вот так:
Код:
$sql="SELECT id FROM users WHERE balance >= limit_balance and mid=0 AND paket=$i AND id NOT IN ".
             "(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";
Все это только при условии суточной абонплаты!
Думаю, что с другими платежами тоже можно управиться без изврата в виде скрипта по крону ;)


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: smallcms от 18 Сентября 2010, 17:21:56
Строка #1085 nodeny.pl
Добавь в условие выборки: balance >= limit_balance
Получится вот так:
Код:
$sql="SELECT id FROM users WHERE balance >= limit_balance and mid=0 AND paket=$i AND id NOT IN ".
             "(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";
Все это только при условии суточной абонплаты!
Думаю, что с другими платежами тоже можно управиться без изврата в виде скрипта по крону ;)

Весьма неплохой вариант. И даже не нужно переключать человека в заблокированные :)


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: smallcms от 18 Сентября 2010, 19:49:20
Похоже, что чтобы выкинуть подобный финт для месячных абонплат скрипт new_month.pl нужно подправить в ~250 строке так:
Код:
$sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance";
По крайней мере при тестовой выборке прокатывает ;D


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: 0xbad0c0d3 от 19 Сентября 2010, 00:49:49
Похоже, что чтобы выкинуть подобный финт для месячных абонплат скрипт new_month.pl нужно подправить в ~250 строке так:
Код:
$sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance";
По крайней мере при тестовой выборке прокатывает ;D
Совершено верно! в 250 строке


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Eugene от 31 Октября 2010, 23:39:31
Очень странно, сегодня решили перевести по этой модификации. Никого не заблокировало, клиенты, у кого 0 на счету и были итак отлючены ушли ещё глубже в минус...

Так как же сделать так, что бы отключённые пользователи на баллансе всегда имели не ниже 0?


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Eugene от 01 Ноября 2010, 00:49:34
Разобрались, в абон. плате нужно было новому клиенту ставить -1 в лимите, там же и равняется лимит....


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: smallcms от 01 Ноября 2010, 01:09:29
Очень странно, сегодня решили перевести по этой модификации. Никого не заблокировало, клиенты, у кого 0 на счету и были итак отлючены ушли ещё глубже в минус...

Так как же сделать так, что бы отключённые пользователи на баллансе всегда имели не ниже 0?

Видимо у Вас авторизатор стоит или типа того.
Доп. проверкой имхо можно избавиться от ложных съёмов баланса:
примерно в 211 строке:
Код:
$sth=&sql("SELECT DISTINCT id FROM users WHERE id IN($sql) OR mid IN ($sql) AND balance >= limit_balance");

P.S.: Не проверял лично.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: smallcms от 06 Ноября 2010, 13:53:49
Точнее так:
Код:
diff new_month.pl.old new_month.pl
211c211
< $sth=&sql("SELECT DISTINCT id FROM users WHERE id IN($sql) OR mid IN ($sql)");
---
> $sth=&sql("SELECT DISTINCT id FROM users WHERE (id IN($sql) OR mid IN ($sql)) AND balance >= limit_balance");
250c250,251
< $sql="SELECT * FROM users WHERE mid=0";
---
> $sql="SELECT * FROM users WHERE mid=0 AND balance >= limit_balance";

При этом первой правкой по сути не будем отнимать абонплату у тех, кто авторизовался, но исчерпал свой лимит к концу месяца.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Eugene от 26 Ноября 2010, 12:34:31
Спасибо, сейчас переходим на новый месяц, попробую проверить. Первое изменеие привело к снятию денег у уже заблокированных пользователей, кто платил чётко по тарифу, поскольку после снятия денег у них было на счету 0, что равнялось лимиту. То есть человек отключён, но ещё за месяц заплатил :)

А просто нельзя ограничить список только превышающих лимит примерно так "balance > limit_balance" без "="?

Если заработает, стоит, думаю, выложить исправленный new_month.pl


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 12 Января 2011, 15:19:20

А просто нельзя ограничить список только превышающих лимит примерно так "balance > limit_balance" без "="?


А тут и так затрагиваются только те, у кого минус и ноль на счету


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Sokol от 03 Марта 2011, 23:04:27

Если заработает, стоит, думаю, выложить исправленный new_month.pl

ну как, заработало?


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Eugene от 13 Марта 2011, 10:10:48

Если заработает, стоит, думаю, выложить исправленный new_month.pl

ну как, заработало?
Вобщем то, да. Но при помесячной тарификации снятие денег останавливается только после снятия денег и за следующий месяц пока балланс не станет меньше лимита отключения. Я вышел из положения немного по-другому, сделал тарификацию посуточную, а по месяцам снимаю деньги у организаций, где +- один-два месяца роли не играет, всё равно их нельзя отключать пока контракт не разорвали... Так что как то так...

По второму примеру почему то продолжало снимать даже у тех кто в минусе, так что только правка 250-й строки помогла

Код:
$sql="SELECT * FROM users WHERE mid=0 and balance >= limit_balance";


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: 0xbad0c0d3 от 12 Мая 2011, 21:59:54
тут недавно немного изменил запросег, сталотгораздо красивее )
Файл: new_month.pl; Строка: 250
Код:
$sql="SELECT * FROM users WHERE if(block_if_limit=1,balance>=limit_balance,1) AND mid=0";
Файл: nodeny.pl; Строка: ~1090
Код:
$sql="SELECT id FROM users WHERE if(block_if_limit=1,balance>=limit_balance,1) and mid=0 AND paket=$i AND id NOT IN ".
"(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)"

Суть такова: Если НЕ стоит галка возле лимита, то доступ не блочится но и бабло считается в "-" дальше.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: olegotek от 02 Августа 2011, 00:32:11
Какой критерий тогда неначисления абонплаты за прошедший месяц? Если я правильно понял, то это просто минусовый баланс. Если только это, то думаю стоит учесть + еще отсутствие трафика за месяц, потому как баланс по многим причинам до конца месяца может уйти в минус, а если трафик отсутствует значит точно абон не пользовался и списивать начисления не за что.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 02 Августа 2011, 07:44:22
Некоторые как бы трафик не считают и статистику не держат. Так что при использовании авторизации проще смотреть авторизовывался абонент или нет


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: olegotek от 02 Августа 2011, 21:43:28
По авторизациям принимать решение об снятии денег думаю не уместно поскольку абоненту авторизовавшемуся но с заблокированным доступом в инет придется заплатить абонплату и насколько я понимаю детализация трафика не имеет отношения к переменным "Интернет входящий, байт" и "Интернет исходящий, байт". Они все-равно считают мегабайты и обнуляются при переходе на новый месяц, что нам и нужно. то есть если трафика в интернет не было на протяжении месяца, значит клиенту со счета деньги не снимаем.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: ser970 от 03 Августа 2011, 08:08:20
Некоторые как бы трафик не считают и статистику не держат. Так что при использовании авторизации проще смотреть авторизовывался абонент или нет
это глупо.
ситуация - звонит клиент - и говорит у меня инет не работает уже месяц -  за что платить ?
как посмотреть ? (у меня нет авторизации вообще - опция 82)  статы нет авторизации нет - трафик не считаем.
вот для этих то целей и нужен трафик. зашел глянул - а там по пару гиг каждый день . ткнул зверя носом в личный кабинет и все дела.
обычная ситуация - чадо запускает несколько торентов на закачку - а папаша звонит что почту получить не может .
 



Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 04 Августа 2011, 07:53:49
По авторизациям принимать решение об снятии денег думаю не уместно поскольку абоненту авторизовавшемуся но с заблокированным доступом в инет придется заплатить абонплату и насколько я понимаю детализация трафика не имеет отношения к переменным "Интернет входящий, байт" и "Интернет исходящий, байт". Они все-равно считают мегабайты и обнуляются при переходе на новый месяц, что нам и нужно. то есть если трафика в интернет не было на протяжении месяца, значит клиенту со счета деньги не снимаем.

В том-то и дело, что у нас трафик не считается вообще, поэтому деньги со счета вообще сниматься не будут. А по сути - можно ж учитывать доступ к инету, а не просто авторизацию

это глупо.
ситуация - звонит клиент - и говорит у меня инет не работает уже месяц -  за что платить ?
как посмотреть ? (у меня нет авторизации вообще - опция 82)  статы нет авторизации нет - трафик не считаем.
вот для этих то целей и нужен трафик. зашел глянул - а там по пару гиг каждый день . ткнул зверя носом в личный кабинет и все дела.
обычная ситуация - чадо запускает несколько торентов на закачку - а папаша звонит что почту получить не может .

А я для того и уточнил, что это касается авторизации без коллекторов трафика


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Cell от 01 Декабря 2011, 00:46:31
Суть такова: Если НЕ стоит галка возле лимита, то доступ не блочится но и бабло считается в "-" дальше.
Суть такова, что абонку снимает два раза, первый раз загоняя в ноль, и во второй месяц загоняя в минус. Что не есть гуд. ИМХО здесь необходимо вычислять баланс с "учетом услуг" и оперировать именно этим значением.


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: SlavaD от 22 Декабря 2011, 13:48:33
Посмотрел скрипты выше, по моему для получения доступа к БД лучше получать не пароль рута, а все параметры из конфига, например так:
Код:
config="/usr/local/nodeny/nodeny.cfg"
export `cat ${config} |\
    grep -R '\(Db_name[[:space:]]*=\)\|\(Db_user[[:space:]]*=\)\|\(Db_pw[[:space:]]*=\)\|\(Db_server[[:space:]]*=\)' |\
    sed "s/\\\\$//g; s/\;//g; s/[[:space:]]*//g; s/#.*//g; s/'//g;"`


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: newvds от 05 Мая 2012, 11:41:15
предлагаю оставить впокое лимит баланс, и добавить признак заблокировано  AND state='on';
тогда по логике если блокирован то деньги не считаются


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: klu4ik от 28 Ноября 2012, 15:05:07
тут недавно немного изменил запросег, сталотгораздо красивее )
Файл: new_month.pl; Строка: 250
Код:
$sql="SELECT * FROM users WHERE if(block_if_limit=1,balance>=limit_balance,1) AND mid=0";
Файл: nodeny.pl; Строка: ~1090
Код:
$sql="SELECT id FROM users WHERE if(block_if_limit=1,balance>=limit_balance,1) and mid=0 AND paket=$i AND id NOT IN ".
"(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)"

Суть такова: Если НЕ стоит галка возле лимита, то доступ не блочится но и бабло считается в "-" дальше.

Кто пользуеться данным решением ?
есть какие-либо нюансы ?


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: stix от 28 Ноября 2012, 15:10:11
я пользуюсь

незнаю насчет нюансов, потому что под свои задачи много модифицировал


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: klu41k от 30 Ноября 2012, 21:05:52
понятно.

Ребята , а что если я в 250-строку внесу такой запрос :

Код:
$sql="SELECT * FROM users WHERE mid=0 and state="on"";



Тоесть снимать абонку только из тех у кого доступ разрешен, чем чревато такое решение ?
и правелен ли синтаксис ?
Блин.. через несколько часов новый месяц :-\


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 03 Июня 2016, 13:50:32
Добавил еще условие снятой галки "Блокировать при достижении лимита"

Получилось так...

Код:
$sql="SELECT id FROM users WHERE balance >= limit_balance AND block_if_limit=0 AND mid=0 AND paket=$i AND id NOT IN ".
"(SELECT u.id FROM users u LEFT JOIN pays p ON u.id=p.mid WHERE u.paket=$i and p.category=114 AND time>=$t1 AND time<=$t2)";

...тестирую


Название: Re: Клиент заблокирован, баланс идет в минус
Отправлено: Demeo от 04 Июня 2016, 08:03:24
Ступил  :D