Имхо лучше всё же по возможности использовать 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 это всего один запрос.
Такие дела