BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 14 май 2024, 23:06

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: API биллинга и внешние приложения
СообщениеДобавлено: 24 фев 2010, 15:45 
Не в сети

Зарегистрирован: 09 июл 2009, 11:31
Сообщения: 82
Откуда: Россия
Карма: 20
Добрый день.

Мне нужно по некоторому событию во внешней программе списать сумму со счета абонента.
Понятно, что это можно сделать несколькими SQL-запросами. А есть ли возможность использовать для этого API?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2010, 16:14 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
В данный момент API биллинга для взаимодействия с внешними программами - это http-запросы. Т.е. нужно сымитировать действия оператора в клиентской проге. В вашем случае - добавление расхода.
Чтобы посмотреть вид определенного http-запроса в строке запуска клиента добавляем
Код:
-Dbgbilling.transfer.debug=true

и в отдельном окне смотрим логи запросов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2010, 19:06 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Не, ну можно писать на Java и просто использовать серверные jar в classpath, вот и всё... всё API будет доступно. Мы так, например, пишем конвертеры БД из других систем.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 фев 2010, 19:23 
Не в сети

Зарегистрирован: 09 июл 2009, 11:31
Сообщения: 82
Откуда: Россия
Карма: 20
Вот я примерно на это и надеялся :) А как, если не секрет, "подконнектиться" из внешнего Java-приложения к биллингу?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 01:05 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
DDPaul писал(а):
Вот я примерно на это и надеялся :) А как, если не секрет, "подконнектиться" из внешнего Java-приложения к биллингу?


1) по http... см. выше
2) если используете библиотеки биллинга, то коннектиться надо не к биллингу, а к базе


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 12:13 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Ну... если вы представляете что такое Java-приложение, то этот вопрос не должен у вас возникать ))
Я даже не знаю как объяснить, с какой стороны. Пишете Java-приложение и просто используете классы из API, описание их есть.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 13:22 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Имхо лучше всё же по возможности использовать HTTP-API.
Хотя оба варианта не гарантируют стабильной работы при обновлении: может измениться как вид хттп-запросов, так и внутренняя логика в java-библиотеках биллинга.
При использовании запросов мы полностью имитируем действия пользователя - вызываются все внутренние механизмы биллинга, генерируются события. А функции библиотек предоставляют лишь базовый фунционал. Например, при добавлении платежа нужно самому добавлять в обработку соответствующий евент. А если в будущем появится ещё один евент, то придётся в свой код тащить и его. В-общем, вы меня конечно извините, но абстракция хреновая.

Например, искал как-то функцию, устанавливающую временный лимит на договор - не нашёл. Это делается примерно следующим куском кода:

Код:
    LimitManager limitManager = new LimitManager(con);
    BigDecimal current_limit = c.getBalanceLimit();
    BigDecimal new_limit = current_limit.add(limit);

    limitManager.updateContractLimit(0, new_limit, cid, "", String.valueOf(period));
    BillingEventBus.publish(new LimitChangedEvent(cid, new_limit));

    Calendar dt = new GregorianCalendar();
    dt.add(6, period);

    query = "INSERT INTO contract_limit_period ( uid, cid, dt, value ) VALUES( ?, ?, ?, ? )";
    ps = con.prepareStatement(query);
    ps.setInt(1, 0);
    ps.setInt(2, cid);
    ps.setDate(3, TimeUtils.convertCalendarToSqlDate(dt));
    ps.setBigDecimal(4, limit);
    ps.executeUpdate();

    Payment fakePayment = new Payment();
    fakePayment.setContractID(cid);
    fakePayment.setPaymentTypeID(-1);
    fakePayment.setDate(new Date());
    fakePayment.setUserID(-1);
    EventProcessor.getProcessor().addEvent(new PaymentEvent(fakePayment));


API это сложно назвать.
С другой стороны, через http это всего один запрос.

Такие дела :shock:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 14:32 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
Ну, как сказать, как сказать... что лучше и что короче :roll:

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 14:39 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
И код ваш странен :o

Вместо
Код:
    query = "INSERT INTO contract_limit_period ( uid, cid, dt, value ) VALUES( ?, ?, ?, ? )";
    ps = con.prepareStatement(query);
    ps.setInt(1, 0);
    ps.setInt(2, cid);
    ps.setDate(3, TimeUtils.convertCalendarToSqlDate(dt));
    ps.setBigDecimal(4, limit);
    ps.executeUpdate();

есть метод
Код:
public int addMoveTask( LimitChangeTask task )


Вы уверены, что это надо вам?:
Код:
BillingEventBus.publish(new LimitChangedEvent(cid, new_limit));

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 14:43 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
В общем, большинство задач решается парой вызовов методов API. Другое дело, что надо знать что и как вызывать, часто бывают подводные камни, не без этого, конечно.
Тем не менее во многих случаях API удобнее (если сложный алгоритм, обработки всякие итд) и уж всяко быстрее.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 14:51 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Ну, я копипастил из библиотеки. Может в 5.0 по-другому конечно..


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 15:30 
Не в сети

Зарегистрирован: 09 июл 2009, 11:31
Сообщения: 82
Откуда: Россия
Карма: 20
Т.е. для использования API из внешнего Java-приложения, мне нужно:
1. внести в classpath библиотеки биллинга;
2. подключиться к базе и получить объект класса java.sql.Connection.

Я правильно понял?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 25 фев 2010, 15:44 
Не в сети
Клиент

Зарегистрирован: 12 фев 2007, 18:49
Сообщения: 335
Карма: 15
Посмотрите на конверторы, они пользуются классами из бгбиллинга...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 фев 2010, 14:42 
Не в сети
Аватара пользователя

Зарегистрирован: 30 май 2008, 15:51
Сообщения: 6055
Карма: 244
DDPaul писал(а):
Т.е. для использования API из внешнего Java-приложения, мне нужно:
1. внести в classpath библиотеки биллинга;
2. подключиться к базе и получить объект класса java.sql.Connection.

Я правильно понял?

Да, просто пишете своё приложение и всё.
В большинстве случаев вам и не надо коннекшеном оперировать напрямую с запросами, только соединяться и пользовать готовые методы API. Да, гляньте конвертеры, примерно поймёте.

_________________
I'm clever. I've got a computer.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.064s | 48 Queries | GZIP : On ]