forum.bitel.ru
http://forum.bitel.ru/

API биллинга и внешние приложения
http://forum.bitel.ru/viewtopic.php?f=19&t=3636
Страница 1 из 1

Автор:  DDPaul [ 24 фев 2010, 15:45 ]
Заголовок сообщения:  API биллинга и внешние приложения

Добрый день.

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

Автор:  Cromeshnic [ 24 фев 2010, 16:14 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

В данный момент API биллинга для взаимодействия с внешними программами - это http-запросы. Т.е. нужно сымитировать действия оператора в клиентской проге. В вашем случае - добавление расхода.
Чтобы посмотреть вид определенного http-запроса в строке запуска клиента добавляем
Код:
-Dbgbilling.transfer.debug=true

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

Автор:  dimOn [ 24 фев 2010, 19:06 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Не, ну можно писать на Java и просто использовать серверные jar в classpath, вот и всё... всё API будет доступно. Мы так, например, пишем конвертеры БД из других систем.

Автор:  DDPaul [ 24 фев 2010, 19:23 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Вот я примерно на это и надеялся :) А как, если не секрет, "подконнектиться" из внешнего Java-приложения к биллингу?

Автор:  skn [ 25 фев 2010, 01:05 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

DDPaul писал(а):
Вот я примерно на это и надеялся :) А как, если не секрет, "подконнектиться" из внешнего Java-приложения к биллингу?


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

Автор:  dimOn [ 25 фев 2010, 12:13 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Ну... если вы представляете что такое Java-приложение, то этот вопрос не должен у вас возникать ))
Я даже не знаю как объяснить, с какой стороны. Пишете Java-приложение и просто используете классы из API, описание их есть.

Автор:  Cromeshnic [ 25 фев 2010, 13:22 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Имхо лучше всё же по возможности использовать 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:

Автор:  dimOn [ 25 фев 2010, 14:32 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Ну, как сказать, как сказать... что лучше и что короче :roll:

Автор:  dimOn [ 25 фев 2010, 14:39 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

И код ваш странен :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));

Автор:  dimOn [ 25 фев 2010, 14:43 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

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

Автор:  Cromeshnic [ 25 фев 2010, 14:51 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Ну, я копипастил из библиотеки. Может в 5.0 по-другому конечно..

Автор:  DDPaul [ 25 фев 2010, 15:30 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Т.е. для использования API из внешнего Java-приложения, мне нужно:
1. внести в classpath библиотеки биллинга;
2. подключиться к базе и получить объект класса java.sql.Connection.

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

Автор:  Victor [ 25 фев 2010, 15:44 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

Посмотрите на конверторы, они пользуются классами из бгбиллинга...

Автор:  dimOn [ 26 фев 2010, 14:42 ]
Заголовок сообщения:  Re: API биллинга и внешние приложения

DDPaul писал(а):
Т.е. для использования API из внешнего Java-приложения, мне нужно:
1. внести в classpath библиотеки биллинга;
2. подключиться к базе и получить объект класса java.sql.Connection.

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

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

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/