A2Billing v1.8+ BUGS

Всё о биллингах.

Модераторы: Admins, Модераторы

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 17 окт 2011, 01:50

радостная новость: наконец-то в Asterisk-1.8.8.0-rc1 починили баг из-за которого биллинг криво считал, начиная считать с первого гудка а не после ответа вызываемой стороны. баг был именно в астериске - после апдейта с предыдущей версии все стало считать как надо.

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 17 окт 2011, 09:43

Какой биллинг? Может в CDR время неправильно записывалось?
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 17 окт 2011, 10:42

a2b. но дело было 100% в астериске (чтото с сигнализацией). впрочем уже не важно, так как починили.

Аватара пользователя
Wapo
Сообщения: 1390
Зарегистрирован: 08 май 2009, 09:47
Откуда: СПб.
Контактная информация:

Сообщение Wapo » 18 окт 2011, 08:58

Странно - у меня 1.8.7, везде SIP-транки (МТТ, telphin, comtube)- только что проверил биллинг на предмет правильности подсчета - все ОК.
P4 3.0 + 1Gb CentOS 5.8 Aster 11.25.1
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 18 окт 2011, 10:13

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

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 02 ноя 2011, 11:16

ссылка до кучи. может кому будет полезна.
http://sysadminman.net/blog/2011/a2bill ... esale-2318
добавлю только что я ничего этого не делал, просто проапдейтил астериск до 1.8.8.0-rc1 и проблема решилась сама собой.

Аватара пользователя
busc
Модератор
Сообщения: 150
Зарегистрирован: 12 фев 2008, 10:28
Откуда: Kiev
Контактная информация:

Сообщение busc » 10 ноя 2011, 10:38

Обнаружил баг в версии 1.8.1. Заглянул в git - там та же проблема сидит в последнем релизе.
Симптомы:
- Для всех абонентов в Receipt не включаются звонки за ночь предыдущего дня биллинга.
- Для всех абонентов в Receipt не включаются paid chrges генерированные системой (например a2billing_subscription_fee.php) ночью предыдущего дня биллинга.
- Для всех абонентов в Invoice не включаются unpaid chrges (которые ручками создаются) за ночь предыдущего дня биллинга.

Ночь предыдущего дня биллинга это начиная с 00:00:00 по время запуска скрипта Cronjobs/a2billing_batch_billing.php в день предыдущего биллинга. В CentOS 5.3 это время 06:00:00, т.е. с 00:00:00 - 06:00:00 услуги не будет посчитаны.

смотрим в Cronjobs/a2billing_batch_billing.php
Суть в том что дата-время предыдущего биллинга записывается в базу в момент записи т.е. CURRENT_TIMESTAMP, а это в моем случае cron делает в 06:00:00.
Когда приходит день биллинга, то скрипт формирует условие поиска звонков и chrges от даты последнего биллинга по текущий день но без указания времени.
Т.е. биллинговый период будет для прошлого месяца 2011-10-01 06:00:00 - 2011-11-01 00:00:00. если день биллинга установлен 1.
Итого мы теряем либо 6 часов прошлого либо 6 часов текущего периода. Смотря с какой стороны смотреть.

Выход как всегда есть простой.
Строка 203

Код: Выделить всё

$field_insert = "id_card";
$value_insert = " '$card_id'";
меняем на

Код: Выделить всё

$field_insert = "id_card, date";
$value_insert = " '$card_id', '$date_now'";
Это изменение будет писать в базу дату-время последнего биллинга со временем 00:00:00. Что позволит захватывать период полностью и не терять предоставленные услуги и деньги.
.
..:

nixon
Сообщения: 146
Зарегистрирован: 11 ноя 2008, 20:56
Откуда: Pattaya
Контактная информация:

Сообщение nixon » 10 ноя 2011, 12:08

Полезно. Сенк!

Аватара пользователя
busc
Модератор
Сообщения: 150
Зарегистрирован: 12 фев 2008, 10:28
Откуда: Kiev
Контактная информация:

Сообщение busc » 02 дек 2011, 10:12

Мда.... Чем дальше в лес... Столкнулся с багом неприятным.
Проверял в версии 1.9.4 - баг присутствует.

Проявления:
Платеж Paypal на сумму например 100 долл. в биллинге, а в самом Paypal реально прошло 2 долл.

Как такое возможно?
Страница на которой делается переадресация на сервер Paypal содержит данные о предстоящей транзакции, эти данные уже сохранены в БД. Злоумышленник меняет в запросе сумму и отправляет сфабрикованный запрос на сервер Paypal. Когда от сервера Paypal приходит подтверждение - вызывается customer/checkout_process.php, в котором сначала делается проверка пришедшего платежа на сервере Paypal и если проверка прошла успешно, то платеж проводится в биллинге и пополняется баланс абонента. И тут главная засада! платеж проводится с суммой которая была указана при формировании запроса на сервер. Если было выбрано 100 долл. - то пройдет 100 долл., а злоумышленник мог вполне провести 2 долл. и за ночь вызвонить все в кубу.

Свой патч не ложу поскольку у меня там весь модуль переписан вдоль и поперек, но способ решения опишу. Надо читать из POST переменных mc_gross и в строках

Код: Выделить всё

case "paypal":
                $currCurrency = $mc_currency;
                if($A2B->config['epayment_method']['charge_paypal_fee']==1){
                        $currAmount = $transaction_data[0][2] ;
                }else{
                        $currAmount = $transaction_data[0][2] - $mc_fee;
                }
сделать

Код: Выделить всё

case "paypal":
                $currCurrency = $mc_currency;
                if($A2B->config['epayment_method']['charge_paypal_fee']==1){
                        $currAmount = $mc_gross;
                }else{
                        $currAmount = $mc_gross - $mc_fee;
                }
.
..:

sergeagle
Сообщения: 54
Зарегистрирован: 17 дек 2009, 13:35

Сообщение sergeagle » 06 дек 2011, 12:19

радостная новость: наконец-то в Asterisk-1.8.8.0-rc1 починили баг из-за которого биллинг криво считал, начиная считать с первого гудка а не после ответа вызываемой стороны. баг был именно в астериске - после апдейта с предыдущей версии все стало считать как надо.
Спасибо за новость. Очень полезно.

Но из за этого изменения при работе с мультифоном возникла следующая проблема: Мегафон заведен как DID. При входящем звонке скрипт обрабатывается и отправляет как положено далее по маршруту. Но сразу приходит отбой AGI Script a2billing.php completed, returning 4
Пришлось отправить мультифоны в отдельный контекст
[multifon-a2b]
exten => _X.,1,Answer()
exten => _X.,n,DeadAGI(a2billing.php,1,did)
exten => _X.,n,Hangup

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 06 дек 2011, 13:53

DeadAGI??? :shock:
уже давно не используется и наоборот - a2b уже давно с AGI работает корректно!
добавьте exten => h,1,Hangup

Аватара пользователя
anest
Модератор
Сообщения: 5696
Зарегистрирован: 28 ноя 2004, 10:04

Сообщение anest » 07 дек 2011, 09:22

busc, кажется paypal сменил API...

Ответить