Перейти до

Помилка feesharvester


Рекомендованные сообщения

Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:

 

/usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester"
<br />
<b>Fatal error</b>:  Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570
Stack trace:
#0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01')
...

 

Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

 

diff api.fundsflow.php.bak api.fundsflow.php.new
559c559
<                             $eachfee = explode(' ', $eachline);
---
>                             $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);

 

Ссылка на сообщение
Поделиться на других сайтах
26 минут назад, mac сказав:

Здається, після оновлення PHP 7.4 до PHP 8.2 feesharvester припинив працювати:

 


/usr/local/bin/curl "http://127.0.0.1/billing/?module=remoteapi&key={SERIAL}&action=feesharvester"
<br />
<b>Fatal error</b>:  Uncaught TypeError: Unsupported operand types: string - string in {UBPATH}/billing/api/libs/api.fundsflow.php:570
Stack trace:
#0 {UBPATH}/billing/modules/remoteapi/feesharvester.php(22): FundsFlow-&gt;harvestFees('2024-01')
...

 

Невеличке розслідування врешті з'ясувало, що це через наявність пробілу у деяких логінах абонентів. Як так сталося? Тому що інколи був неуважно додан трейлінг пробіл до номеру будинка і цей пробіл потрапив до логіну абоненту. Логін абоненту неможливо змінити ніяким чином штатними засобами. Я не розглядаю створення нового абонента для усунення помілки.

Був обран такий шлях вирішення проблеми. Заміну функції php explode() знайшов у мережі. Мабуть це станеться в нагоді:

 


diff api.fundsflow.php.bak api.fundsflow.php.new
559c559
<                             $eachfee = explode(' ', $eachline);
---
>                             $eachfee = preg_split("~(?<!\\\\)(?:\\\\{2})*'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'(*SKIP)(*F)|\s+~s" , $eachline);

 

 

Логіни з пробілами це сильно 🤣

Я утримаюсь від коментарів.

  • Haha 1
Ссылка на сообщение
Поделиться на других сайтах
  • 8 months later...
Опубліковано: (відредаговано)

На жаль, наявність пробілу у деяких логінах абонентів заважає все сильніше. Після останнього оновлення UB до 1.4.7 припинив відображатися профіль абонента.

Замість - помилка : "Підозріла помилка - взагалі дивно, що ви її бачите: EMPTY_DATABASE_USERDATA"

В url передається module=userprofile&username=bad%20login

Мабуть (шановним розробникам видніше) через зміни у коді на кшталт

Цитата

Генерація логінів: нова опція генерації PRFXCONTRACT, що генерує логіни вигляду “Префікс+Наступна вільна угода”.

 

Тож міркую над шляхом вирішення проблеми. Планую:

  1. зупинити залежні сервіси,
  2. зробити sql дамп,
  3. в ньому за допомогою sed змінити всі входження логіну з пробілом на логін з підкресленням (тобто в логіні замість пробілу буде підкреслення _ ),
  4. а потім повернути виправленний sql дамп на місце.

Здається, це не порушить цілісність бази даних.

 

Як вважаєте? У ВМ вже затестив, все Ок, але сумніваюсь щодо можливих проблем у майбутньому

 

P.S. Ні, не Ок, є деякі глюки. Буду розбиратися далі.

P.P.S. Треба було кеш очистити.

Відредаговано mac
Ссылка на сообщение
Поделиться на других сайтах
11 часов назад, mac сказав:

Після останнього оновлення UB до 1.4.7 припинив відображатися профіль абонента.

Насправді воно так задумувалось, ще десь з перших релізів. Тільки було зламано тотально, просто по-різному в різних місцях :)

Надалі, всі логіни повинні та будуть мати наступний вигляд. Тобто a-z0-9A-Z_. Крапку з мене вибили правдами та неправдами. Вона теж під питанням та скоріш за все, тимчасово.

 

11 часов назад, mac сказав:

Як вважаєте? У ВМ вже затестив, все Ок, але сумніваюсь щодо можливих проблем у майбутньому

Вольове рішення, яке є єдиним адекватним і яке я всіляко підтримую :)

 

11 часов назад, mac сказав:

Здається, це не порушить цілісність бази даних.

Якщо все зробити акуратно - все має працювати.

 

Питання тільки в тому, скільки тих абонентів є і чи не дешевше їх руками перереєструвати на ходу.
 

  • Like 1
Ссылка на сообщение
Поделиться на других сайтах
7 часов назад, nightfly сказав:

Насправді воно так задумувалось, ще десь з перших релізів. Тільки було зламано тотально, просто по-різному в різних місцях :)

Надалі, всі логіни повинні та будуть мати наступний вигляд. Тобто a-z0-9A-Z_. Крапку з мене вибили правдами та неправдами. Вона теж під питанням та скоріш за все, тимчасово.

 

Вольове рішення, яке є єдиним адекватним і яке я всіляко підтримую :)

 

Якщо все зробити акуратно - все має працювати.

 

Питання тільки в тому, скільки тих абонентів є і чи не дешевше їх руками перереєструвати на ходу.
 

nightfly, дуже вдячний вам !!!
Все зробив, політ нормальний. Команда sed для зміни в дампі, залишу тут для довідки 🙂

sed -i.bak 's/my[[:blank:]]login/my_login/g' mybase.sql

 

Є ще один цікавий момент, зроблю окремий топік, щоб без плутанини

  • Thanks 1
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від mac
      Глюк в тому, що один (так - тільки один) mac адрес onu існує в білінгу у вигляді строки. Це трохи заважає.
      olt - bdcom gepon.
      Наскільки зрозумів, це виключно проблема реалізації snmpwalk у freebsd, де snmpwalk може на свій розсуд віддати mac адресу не як hex-string, а як звичайний string.
      Можливо snmpwalk тригериться на якомусь символі, мені невідомо.
       
      # tcpdump -vv -i em0 udp port 161 and host olt and host ub | grep "3320.101.10.4.1.1.241 ... olt.snmp > ub.47940: [udp sum ok] { SNMPv2c C="*****" { GetResponse(44) R=93278354 E:3320.101.10.4.1.1.241="8LO"W*" } } ub.47940 > olt.snmp: [udp sum ok] { SNMPv2c C="*****" { GetNextRequest(34) R=93278355 E:3320.101.10.4.1.1.241 } } snmpwalk -c***** -v2c -t5 olt .1.3.6.1.4.1.3320.101.10.4.1.1 SNMPv2-SMI::enterprises.3320.101.10.4.1.1.241 = STRING: "8LO\"W*" snmpwalk -Ox -c***** -v2c -t5 olt .1.3.6.1.4.1.3320.101.10.4.1.1 SNMPv2-SMI::enterprises.3320.101.10.4.1.1.241 = Hex-STRING: 38 4C 4F 22 57 2A  
      Це стосується таких параметрів у snmp конфізі bdcom
       
      [signal] MACINDEX=".1.3.6.1.4.1.3320.101.10.4.1.1" [misc] ONUINDEX=".1.3.6.1.4.1.3320.101.11.1.1.3"  
      За для усунення глюку спробував трошки змінити код і завдати тип snmp параметру явно у ./api/libs/api.ponbdcom.php у function collect()
      Це працює. Мабуть станеться у нагоді:
       
      # diff api.ponbdcom.php{.new,.bak} 37c37 < $onuIndex = $this->snmp->walk('-Ox ' . $oltIp . ':' . self::SNMPPORT, $oltCommunity, $onuIndexOid, self::SNMPCACHE); --- > $onuIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $onuIndexOid, self::SNMPCACHE); 91c91 < $macIndex = $this->snmp->walk('-Ox ' . $oltIp . ':' . self::SNMPPORT, $oltCommunity, $macIndexOID, self::SNMPCACHE); --- > $macIndex = $this->snmp->walk($oltIp . ':' . self::SNMPPORT, $oltCommunity, $macIndexOID, self::SNMPCACHE);  
      P.S. Створив тему, а зараз міркую: а може це глюк у ПЗ olt. Оновлю фірмваре olt та перевірю...
       

    • Від Plastilin
      Вітаю. Маю наступний комплект. Ubilling на Debian + Mikrotik CHR як маршрутизатор. Наче все запустилось, але виникло питання яке не вдається розрулити. Читав Wiki, ковиряв, читав знову Wiki, знову ковиряв - не допомогло.
      Чи можливо якось визначити конкретну IP адресу з пулу який видає Mikrotik клієнту через Radius? Мені пропонує обрати наступну вільну адресу з пулу при спробі зміни адреси?
      З цього з'являється додаткове питання, чи можливо контролювати доступ користувачам у яких IP назначений статично, тобто прописаний вручну? Наприклад при зміні статусу не активний - пхати до Firewall Mikrotik правила заборони доступу з IP адреси визначеної вручну, навіть якщо вона не отримана по DHCP.
       
      UPD: з першою частиною знайшов: IP_CUSTOM=1 в alter.ini 
    • Від ppv
      Потрібно було витерти одну мережу, всі абоненти з неї були перенесені в іншу. Але світить що 6 IP зайняті, хоча вона повністю вільна.
       
      ID    Мережа/CID           RВсього IP        Використано IP ▾           Вільно IPСервіс
      6      172.16.70.0/23        506                    6                                       500
       
      Підкажіть як правильно це підчистити щоб видалити мережу.
    • Від a_n_h
      Всем доброго дня и мирного неба!
        После многочисленных экспериментов выяснил, что на последних версиях freebsd  максимум удавалось прокачать до 14 ГБт суммарно трафика со 100% загрузкой процессора. На том-же железе но с установленной freebsd 11.2 прокачивается до 20-ти ГБт суммарно тестового трафика с загрузкой процессора около 50%. 
        Подскажите, что можно убрать или наоборот добавить в систему с freebsd 13,3 для получения аналогичного результата...
    • Від sanyadnepr
      Приветствую всех.
      Подскажите пожалуйста где копнуть и нет ли проблемы со стороны протокола взаимодействия сити24 или возможно не учтена необходимая проверка в модуле сити24 в Ubilling, пока писал понял что похоже в проверке payID, но это не точно.  
      Недавно обнаружилось с сити24 начали прилетать дубликаты платежей, в целом платежей мало, два одинаковых запроса Pay с одинаковым transactionID и payID в одну секунду одному платежному ID при этом биллинг "думает" примерно чуть больше минуты и отвечает одним ответом <result>0</result>, сити24 утверждает что ответ они не получили и по протоколу дальше повторяет запросы дублем, биллинг ответ и так по кругу, сити24 спрашивает каким образом с одинаковым payID от сити24 билл продолжает обрабатывать запросы и пополнять абоненту счет раз в 5 минут примерно, на одну и туже сумму, ведь этот payID уже был обработан предполагают сити24 согласно протоколу.
      Конечно есть вопрос к сити24 зачем они дублем присылают два запроса, но они отвечают что эта ситуация учтена в протоколе и проблема на стороне биллинга, потому что он пополняет счет по уже обработанному одинаковому payID.
      При этом transactionID в дублях одинаковый, но с каждым новым дублем разный.
      Если зафаерволить запросы от сити24, но оставить возможность отвечать то после блокировки билл отправляет 2-3 минуты 6 ответов <account>0001</account>  <result>0</result>.
      После снятия блокировки, дубли и платежи нескольких проблемных абонентов прилетают так же по кругу, при этом и с некоторыми новыми пополнениями происходит аналогичная ситуация.
      В openpayz в платежах transactionID и не видно payID.
×
×
  • Створити нове...