...
Блок кода | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
mps.<mpsId>.mode=1 mps.<mpsId>.title=ОСМП mps.<mpsId>.protocol=osmp #Поддержка# Поддержка передачи типа поиска через префикс # дополнительно можно указать osmpFields noBaseAuth osmpSubBalance (черз пробел или запятую) mps.<mpsId>.protocol.ext=1osmpPrefix mps.<mpsId>.login= mps.<mpsId>.passw= mps.<mpsId>.pid= #Тип поиска 0 (по умолчанию) mps.<mpsId>.search.mode=contract #Тип поиска 1 (1_12345608) mps.<mpsId>.search.1.mode=contract #Шаблон преобразования перед поиском - pattern:::result mps.1.search.1.pattern=\A((?:\d{5})|(?:\d{6})|(?:\d{7}))(\d{2})\z:::NK$1-$2 #Будут находиться только договора входящие в группу с id=12 mps.1.search.1.allow.contract.groups=12 #Регулярное выражение проверки значения поля account mps.1.numberPattern=\A\d{7,9}\z # mps.1.cert=1 mps.1.cert.pem=3bab58c... # Ограничения на пополняемую сумму # минимальная. По умолчанию - 0. mps.1.min.summ=0 # максимальная. По умолчанию - 1000000 mps.1.max.summ=15000 #Если в системе имеется обработчик события "Перед занесением платежа", #который изменяет входящую сумму платежа (например, переводит в валюту #по курсу), то данный флаг позволяет заносить измененный платеж в таблицу #баланса договора, а оригинальную сумму платежа заносить в таблицу платежей #модуля mps. mps.1.store.original.sum=true |
В опции mps.<mpsId>.protocol.ext= можно указать расширение протокола osmpFields. Это расширение протокола позволяет добавить в ответ платежной системе (на любом этапе платежа: check, pay) специальный тег <fields> (см. документацию), в который с помощью динамического класса, реализующего обработчик глобального события "Перед обработкой запроса ОСМПОтвета", можно добавить произвольные параметры, которые будут отображены на экране, распечатаны на чеке, сохранены в ПС.
...
Блок кода | ||||||
---|---|---|---|---|---|---|
| ||||||
import java.math.BigDecimal; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.util.Calendar; import bitel.billing.server.contract.bean.Contract; import bitel.billing.server.contract.bean.ContractManager; import bitel.billing.server.contract.bean.ContractParameterManager; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.modules.mps.server.events.MPSOSMPRequestEventMPSBeforeResponseEvent; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.Utils; import ru.bitel.common.sql.ConnectionSet; public class OSMPRequestHandler extends EventScriptBase<MPSOSMPRequestEvent>EventScriptBase<MPSBeforeResponseEvent> { //код параметра договора ФИО private static final int FIO_PID = 1; @Override public void onEvent( MPSOSMPRequestEventMPSBeforeResponseEvent event, Setup setup, ConnectionSet set ) throws Exception { String contractTitle = event.getRequest().getNumber(); Connection con = set.getConnection(); ContractParameterManager cpm = new ContractParameterManager( con ); ContractManager cm = new ContractManager( con ); //исходящий остаток абонента Calendar c = Calendar.getInstance(); Contract contract = cmevent.getContractByTitlegetResponse( contractTitle )).getContract(); BigDecimal saldo = BigDecimal.ZERO; String query = "select summa1 + summa2 - summa3 - summa4 as saldo from contract_balance where cid=" + contract.getId() + " and yy=" + c.get( Calendar.YEAR ) + " and mm=" + (c.get( Calendar.MONTH ) + 1); try(Statement st = con.createStatement();ResultSet rs = st.executeQuery( query )) { if(rs.next()) { saldo = rs.getBigDecimal( "saldo" ); } } //Формат строки name1:type1:value1;name2:type2:value2;...;nameN:typeN:valueN //тип можно не указывать, если предполагается, что поле должно отображаться на //экране терминала (т.е. тип disp), тогда формат name:value. Разделитель полей - ";", разделитель //компонентов поля - ":" StringBuilder sb = new StringBuilder(); sb.append( "sum_dolg:" + Utils.formatBigDecimalSumm( saldo ) + ";" ); sb.append( "oplata:" + Utils.formatBigDecimalSumm( saldo ) + ";" ); sb.append( "fio:" + cpm.getStringParam( contract.getId(), FIO_PID ) + ";" ); sb.append( "fio:ptr-data:" + cpm.getStringParam( contract.getId(), FIO_PID ) ); event.getResponse().getParameters().put( "fields", sb.toString() ); } } |
...