WiFi-портал с оплатой картой через assist

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(Новая страница: «<source lang="java"> package ru.bitel.saha.script.wifi; import ru.bitel.bgbilling.kernel.event.Event; import ru.bitel.bgbilling.kernel.script.server.dev.EventScript…»)
Строка 1: Строка 1:
 +
1. В конфигурации портала ставим
 +
<source lang="bash">
 +
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=сумма
 +
 +
</source>
 +
 +
2. Добавить обработчик глобальных функций поведения на событие "WiFi" активация модуля Inet.  Обработчик  создает договор  по конкретному шаблону договора, в котором указано, что нужно создавать сервис модуля inet определенного типа. В самом типе сервиса настроена автоматическая генерация логина/пароля.  Так же в шаблоне указано время жизни договора ( имеет значение с точки зрения экономии лицензий, закрытый договор не потребляет лицензию). 
 +
 +
Вот сам класс обработчика :
<source lang="java">
<source lang="java">
package ru.bitel.saha.script.wifi;
package ru.bitel.saha.script.wifi;

Версия 05:12, 21 марта 2017

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( "Ошибка, обратитесь к администратору" );
			}
		}						
	}	
}
Личные инструменты