Paynet
Протокол реализован совместно с компанией ООО «UZPAYNET» (официальный сайт). Протокол работает через SOAP, реализованный в биллинге в модуле MPS.
#протокол для ПС Paynet
mps.<mpsId>.protocol=paynet
#Название ПС
mps.<mpsId>.title=Paynet
#протокол включен (
1
), выключен (
0
)
mps.<mpsId>.mode=
1
#данные для авторизации ПС
mps.<mpsId>.login=user
mps.<mpsId>.passw=password
#динамический класс, который формирует нужные данные для ответа ПС при вызове метода getInformation. Например, информацию о балансе.
mps.<mpsId>.getInformation.
class
=
#настройка разделения платежей по типам. Общий формат: mps.<mpsId>.pid.<serviceId>=<payment_type_id>
#где mpsId - код конфигурации ПС в данном конфиге (если у вас в данном конфиге настроена только одна ПС, то mpsId=
1
)
#serviceId - код услуги с т.з. ПС paynet. Этот serviceId будет приходить в запросах от ПС, полный список этих serviceId нужно передать в ПС. Например serviceId =
1
(paynet), serviceId =
2
(click) и т.д. По этому полю будет идти разделение по типам платежей в биллинге.
#payment_type_id - код типа платежа из справочника типов платежей (меню Справочники-Типы платежей)
mps.<mpsId>.pid.
1
=
#запрет на проведение платежей для юр. лиц.
true
- запрещено проводить для юр. лиц,
false
- разрешено.
mps.<mpsId>.deny.jur=
Остановимся подробнее на опции 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 );
}
}