...
Остановимся подробнее на опции mps.<mpsId>.getInformation.class. Класс, прописанный в данной строке конфигурации, должен реализовать метод getResponceParameters интерфейса ru.bitel.bgbilling.modules.mps.server.bean.ws.paynet.ResponceParameters и возвращать java.util.Map<String, String>. Список возвращаемых параметров определяется по договоренности с платежной системой. Ниже представлен пример реализации для случая, когда необходимо вернуть в платежную систему информацию о балансе договора.
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
package ru.bitel.bgbilling.modules.mps.paynet; import java.sql.Connection; import java.util.Date; import java.util.HashMap; import java.util.Map; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.modules.mps.server.bean.ws.paynet.ResponceParameters; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.Utils; import bitel.billing.server.contract.bean.BalanceUtils; public class GetResponceParameters implements ResponceParameters { @Override public Map<String, String> getResponceParameters( Connection con, Setup setup, int contractId ) throws BGException { Map<String, String> result = new HashMap<String, String>(); try(BalanceUtils bu = new BalanceUtils( con )) { result.put( "balance", Utils.formatBigDecimalSumm( bu.getBalance( new Date(), contractId ) )); } return result; } } |
В paynet необходимо передать данные для аутентификации, которые прописываются в параметрах mps.<mpsId>.login и mps.<mpsId>.passw. Также необходимо передать url web-сервиса, к которому будут обращаться для уведомления о поступлении платежа. Url выглядит следующим образом:
панель |
---|
http://<server_host>:<server_port>/bgbilling/mpsexecuter/mps-ws/ru.bitel.bgbilling.modules.mps.paynet/<mps_mid>/ProviderWebService/<mpsId>?wsdl |
где:
- <mps_mid> - код модуля MPS
- <mpsId> - код протокола в конфигурации модуля
Также следует обратить внимание на то, что биллинг ожидает, что для идентификации абонента используется номер его договора, который передается в параметре clientId.
Обязательным условием со стороны paynet является наличие HTTPS.
В некоторых случаях бывает полезно изменить сумму платежа, которая заносится в БД. Например, в ситуации, когда баланс абонента ведется в некоторой валюте, а платежная система присылает сумму в местной валюте. Для такого варианта предусмотрено событие "Перед добавлением платежа", в обработчик которого передается сумма платежа в виде 123.45. Обработчик может установить свою сумму и вернуть ее в модуль. Событие называется ru.bitel.bgbilling.modules.mps.server.events.MPSBeforePaymentEvent и настраивается на вкладке Сервис->Автоматизация->Функции глобальных событий. Сумму платежа, пришедшую от платежной системы, можно получить с помощью метода getPaymetSum(), которая возвращает java.util.BigDecimal. Установить измененную сумму можно с помощью метода setPaymentSum(BigDecimal newSum).
Пример обработчика события:
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
package ru.bitel.bgbilling.modules.mps.paynet;
import java.math.BigDecimal;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.modules.mps.server.events.MPSBeforePaymentEvent;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
public class ModifyPaymentSumm
extends EventScriptBase<MPSBeforePaymentEvent>
{
@Override
public void onEvent( MPSBeforePaymentEvent event1, Setup setup2, ConnectionSet connectionSet3 )
throws Exception
{
BigDecimal sum = event1.getPaymentSum();
sum = sum.multiply( new BigDecimal( 1.18 ) );
event1.setPaymentSum( sum );
}
} |