WiFi-портал с оплатой картой через assist
Материал из BiTel WiKi
Версия от 05:12, 21 марта 2017; Stark (Обсуждение | вклад)
1. В конфигурации портала ставим
portal.activate=1 portal.activate.parameter.1.type=text portal.activate.parameter.1.name=phone portal.activate.parameter.1.title=телефон portal.activate.parameter.2.type=text portal.activate.parameter.2.name=sum portal.activate.parameter.2.title=сумма
2. Добавить обработчик глобальных функций поведения на событие "WiFi" активация модуля Inet. Обработчик создает договор по конкретному шаблону договора, в котором указано, что нужно создавать сервис модуля inet определенного типа. В самом типе сервиса настроена автоматическая генерация логина/пароля. Так же в шаблоне указано время жизни договора ( имеет значение с точки зрения экономии лицензий, закрытый договор не потребляет лицензию).
Вот сам класс обработчика :
package ru.bitel.saha.script.wifi; import ru.bitel.bgbilling.kernel.event.Event; import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase; import ru.bitel.bgbilling.server.util.Setup; import ru.bitel.common.sql.ConnectionSet; import ru.bitel.bgbilling.kernel.wifi.common.event.WiFiActivateEvent; import ru.bitel.bgbilling.common.BGException; import bitel.billing.server.contract.bean.ContractManager; import bitel.billing.server.contract.bean.Contract; import java.util.Date; import java.util.Calendar; import org.apache.log4j.Logger; import ru.bitel.bgbilling.kernel.container.managed.ServerContext; import ru.bitel.bgbilling.modules.inet.api.common.service.InetServService; import java.util.List; import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ; import bitel.billing.server.contract.bean.ContractParameterManager; import java.sql.PreparedStatement; import bitel.billing.common.TimeUtils; import java.sql.ResultSet; import ru.bitel.bgbilling.kernel.event.events.ContractParamChangedEvent; import bitel.billing.server.contract.bean.CommentPatternManager; import ru.bitel.bgbilling.kernel.network.sms.Smsc; import ru.bitel.common.Utils; import java.math.BigDecimal; import bitel.billing.server.util.PswdGen; import ru.bitel.bgbilling.server.util.Setup; import java.net.URLEncoder; public class Activation extends EventScriptBase<WiFiActivateEvent> { static final Logger logger = Logger.getLogger( Activation.class ); private static final int CONTRACT_PATTERN_GOROD_ID = 6; private static final int INET_MODULE_ID = 1; private static final int PHONE_PARAM_ID = 5; //private static final int FIO_PARAM_ID = 4; private static final Object mutexGorod = new Object(); // private static String STAT_PATH = "http://host/bgbilling/webexecuter"; private static String PORTAL_PATH = "http://host:9090/auth/activate.do?"; private static String MESSAGE_SUCCESS = "Ваша оплата прошла успешно"; private static String MESSAGE_FAIL = "Возникли проблемы при оплате"; @Override public void onEvent( WiFiActivateEvent event, Setup setup, ConnectionSet connectionSet ) throws Exception { String phone = event.getParams().get( "phone" ); print( "phone=" + phone ); if ( phone == null || phone.trim().length() != 10 ) { event.setError( "Вы должны ввести 10-чный номер" ); return; } phone = "+7" + phone.trim(); activateGorod( event, connectionSet, phone/*, fio */); } private void activateGorod( WiFiActivateEvent event, ConnectionSet connectionSet, String phone/*, String fio */) { synchronized (mutexGorod ) { try { print( "WiFi Activation Gorod" ); String sumStr = event.getParams().get( "sum" ); BigDecimal sum = Utils.parseBigDecimal( sumStr, BigDecimal.ZERO ); if( sum == null || sum.equals(BigDecimal.ZERO) ) { event.setError( "Вы должны ввести сумму в рублях" ); return; } String passwd = PswdGen.generatePassword( Setup.getSetup() ); ContractManager contractManager = new ContractManager( connectionSet.getConnection() ); Contract contract = contractManager.createFromPattern( CONTRACT_PATTERN_GOROD_ID, null, Calendar.getInstance(), passwd ); if ( contract == null ) { print( "договор не создан" ); event.setError( "Ошибка, обратитесь к администратору" ); return; } ContractParameterManager paramManager = new ContractParameterManager( connectionSet.getConnection() ); if ( !Utils.isEmptyString( phone ) ) { paramManager.updateStringParam( contract.getId(), PHONE_PARAM_ID, phone, 0); //чтобы title договора поменялся new CommentPatternManager( connectionSet.getConnection() ).updateContractComment( contract.getId() ); } ServerContext context = ServerContext.get(); InetServService wsServ = context.getService( InetServService.class, INET_MODULE_ID ); List<InetServ> servList = wsServ.inetServList( contract.getId() ); //Сервис с логином пароля настроен уже в шаблоне договора, его не надо создавать if ( servList.size() == 0 ) { print( "сервис не создан" ); event.setError( "Ошибка, обратитесь к администратору" ); return; } InetServ serv = servList.get( 0 ); print( "Contract created with title = " + contract.getTitle() + ";id=" + contract.getId() ); String payUrl = STAT_PATH + "?action=Pay&mid=6&module=assist&contractId=" + contract.getId() + "&user=" + contract.getTitle() +"&pswd=" + contract.getPswd() + "&midAuth=0&summ=" + sum + "&url_ok=" + URLEncoder.encode( PORTAL_PATH + "method=remoteSuccess&message=" + MESSAGE_SUCCESS, "utf8" ) + "&url_no=" + URLEncoder.encode( PORTAL_PATH + "method=remoteSuccess&message=" + MESSAGE_FAIL, "utf8") ; print( "url=" + payUrl ); event.setPayUrl( payUrl ); } catch( Exception ex ) { logger.error( ex.getMessage(), ex ); event.setError( "Ошибка, обратитесь к администратору" ); } } } }