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 биллинга и внешние приложения |
Вот я примерно на это и надеялся ![]() |
Автор: | skn [ 25 фев 2010, 01:05 ] |
Заголовок сообщения: | Re: API биллинга и внешние приложения |
DDPaul писал(а): Вот я примерно на это и надеялся ![]() 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 это всего один запрос. Такие дела ![]() |
Автор: | dimOn [ 25 фев 2010, 14:32 ] |
Заголовок сообщения: | Re: API биллинга и внешние приложения |
Ну, как сказать, как сказать... что лучше и что короче ![]() |
Автор: | dimOn [ 25 фев 2010, 14:39 ] |
Заголовок сообщения: | Re: API биллинга и внешние приложения |
И код ваш странен ![]() Вместо Код: 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/ |