Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

В опции mps.<mpsId>.protocol.ext= можно указать расширение протокола osmpFields. Это расширение протокола позволяет добавить в ответ платежной системе (на любом этапе платежа: check, pay) специальный тег <fields> (см. документацию), в который с помощью динамического класса, реализующего обработчик глобального события "Перед обработкой запроса ОСМП", можно добавить произвольные параметры, которые будут отображены на экране, распечатаны на чеке, сохранены в ПС.

...

Code Block
languagejava
linenumberstrue
collapsetrue
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.MPSOSMPRequestEventMPSBeforeRequestEvent;
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<MPSBeforeRequestEvent>
{
	//код параметра договора ФИО
	private static final int FIO_PID = 1;

	@Override
	public void onEvent( MPSOSMPRequestEventMPSBeforeRequestEvent 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 = cm.getContractByTitle( contractTitle );
		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.getParameters().put( "fields", sb.toString() );
	}

}

...