private static String GetSessionIDEL(IMovilwayApiRequest request, String LOG_PREFIX = null) { if (request != null) { //SE COMENTA LA VALIDACION DEL TOKEN DE KIANCU //var sessionRequest = new GetSessionRequestBody() //{ // Username = request.AuthenticationData.Username, // Password = request.AuthenticationData.Password, // DeviceType = request.DeviceType //}; //if (!String.IsNullOrEmpty(request.AuthenticationData.SessionID)) //{ // int userId; // long timeOut; // string userName, userLastName, userAddress, message; // ManagementInterface managementWS = new ManagementInterface(); // //validacion de la session ID de Kinacu // if (managementWS.GetUserInfo(int.Parse(request.AuthenticationData.SessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message)) // { // return (request.AuthenticationData.SessionID); // } // else // { // //solicita nueva mente un SessionId // if (!string.IsNullOrEmpty(request.AuthenticationData.Username) && // !string.IsNullOrEmpty(request.AuthenticationData.Password)) // { // var getSessionResponse = new ServiceExecutionDelegator // <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( // //new GetSessionRequestBody() // // { // // Username = request.AuthenticationData.Username, // // Password = request.AuthenticationData.Password, // // DeviceType = request.DeviceType // // } // sessionRequest // , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); // if (getSessionResponse.ResponseCode == 0 && // !string.IsNullOrEmpty(getSessionResponse.SessionID) && // !getSessionResponse.SessionID.Equals("0")) // return getSessionResponse.SessionID; // else // throw new Exception(getSessionResponse.ResponseMessage); // } // throw new Exception("DATOS DE AUTENTICACION INVALIDOS"); // } //} //else //{ //CONDICION INICIAL PARA VALIDAR CREDENCIALES if (String.IsNullOrEmpty(request.AuthenticationData.SessionID)) { var sessionRequest = new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }; var getSessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( //new GetSessionRequestBody() // { // Username = request.AuthenticationData.Username, // Password = request.AuthenticationData.Password, // DeviceType = request.DeviceType // } sessionRequest , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); if ((getSessionResponse.ResponseCode == 0 || getSessionResponse.ResponseCode == 1013) && !string.IsNullOrEmpty(getSessionResponse.SessionID) && !getSessionResponse.SessionID.Equals("0")) { return(getSessionResponse.SessionID); } else { throw new Exception(getSessionResponse.ResponseMessage); } } else { var _log_prefix = String.IsNullOrEmpty(LOG_PREFIX) ? "[LOG PREFIX DOESN'T HAVE VALUE]" : LOG_PREFIX; logger.InfoLow(String.Concat("[API] ", _log_prefix, " SESSION ID IS DEFINED IN REQUEST")); return(request.AuthenticationData.SessionID); } // } } return("error"); }
public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { GetSessionRequestBody request = requestObject as GetSessionRequestBody; GetSessionResponseBody response = null; createsessionResponse newSessionResponse = utibaClientProxy.createsession(new createsession()); String PIN = Utils.GenerateHash(newSessionResponse.createsessionReturn.sessionid, request.Username, request.Password); logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetSessionProvider] [SEND-DATA] loginRequest {sessionid=" + newSessionResponse.createsessionReturn.sessionid + ",device_type=" + request.DeviceType + ",initiator=" + request.Username + ",pin=" + PIN + "}"); loginResponse loginResponse = utibaClientProxy.login(new login() { loginRequest = new loginRequestType() { sessionid = newSessionResponse.createsessionReturn.sessionid, device_type = request.DeviceType, initiator = request.Username, pin = PIN } }); logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetSessionProvider] [RECV-DATA] loginResponse {result=" + loginResponse.loginReturn.result + ",result_namespace=" + loginResponse.loginReturn.result_namespace + "}"); response = new GetSessionResponseBody() { ResponseCode = Utils.BuildResponseCode(loginResponse.loginReturn.result, loginResponse.loginReturn.result_namespace), ResponseMessage = loginResponse.loginReturn.result_message, TransactionID = loginResponse.loginReturn.transid, SessionID = newSessionResponse.createsessionReturn.sessionid }; if (response.ResponseCode == 0) { if (ConfigurationManager.AppSettings["ProcessMigration"].ToLower() == "true") { //logger.InfoHigh("Comienza la migración del usuario: " + request.AuthenticationData.Username); bool migrateAgent = MigrateAgent(request.AuthenticationData.Username); int deviceType = GetDeviceType(request.AuthenticationData.Username); if (migrateAgent) { // Cambio de password Kinacu var changePinResponse = new ServiceExecutionDelegator <ChangePinResponseBody, ChangePinRequestBody>().ResolveRequest( new ChangePinRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = ConfigurationManager.AppSettings["StandardOldPin"] }, DeviceType = deviceType, /*int.Parse(ConfigurationManager.AppSettings["StandardNewDeviceType"]),*/ Agent = request.AuthenticationData.Username, OldPin = ConfigurationManager.AppSettings["StandardOldPin"], NewPin = request.AuthenticationData.Password }, ApiTargetPlatform.Kinacu, ApiServiceName.ChangePin); // Login con Kinacu - NOT NOW - La proxima vez que entre va por Kinacu de una //logger.InfoHigh("Resultado del cambio de clave del usuario: " + changePinResponse.ResponseCode); // Save in DB if (changePinResponse.ResponseCode == 0) { //logger.InfoHigh("Se migró exitosamente la clave del usuario: " + request.AuthenticationData.Username); SaveAgentMigrated(request.AuthenticationData.Username); } } } // REPG2013 - esto queda deshabilitado por ahora // For speeding up, I'm caching the session value: //-var couchBaseClient = new CouchbaseClient(); //-couchBaseClient.Store(StoreMode.Set, Utils.GetSessionForUserKey(request.Username, request.Password), response.SessionID, new TimeSpan(0, UtibaUtils.SessionTTL, 0)); // Also caching the //-couchBaseClient.Store(StoreMode.Set, Utils.GetUserForSessionKey(response.SessionID), request.Username, new TimeSpan(0, UtibaUtils.SessionTTL, 0)); } return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { //if (sessionID.Equals("0")) // return new TopUpResponseBody() // { // ResponseCode = 90, // ResponseMessage = "error session", // TransactionID = 0, // ExternalTransactionReference = "", // PointBalance = 0m, // StockBalance = 0m, // WalletBalance = 0m // }; TopUpRequestBody request = requestObject as TopUpRequestBody; int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]); if (ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()] != null) { timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()]); } kinacuWS.Timeout = timeOutSeconds * 1000; int transactionId; string saleData = ""; string message = ""; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] newSaleWithExternalIdParameters {UserId=" + sessionID + ",IdProduct=" + MapMNOtoProductId(request.MNO) + ",Customer=" + request.Recipient + ",Amount=" + (request.Amount * 100) + ",CommitSale=" + "1" + ",ExternalId=" + request.ExternalTransactionReference + ",PdvRepresented=" + (request.TerminalID ?? "") + "}"); TopUpResponseBody response = null; bool kinacuTopUpResponse = false; int _Amount = (int)(request.Amount * 100); if (_cacheSession.IsActiveCache()) { //logger.ErrorHigh(String.Concat("[API] ", LOG_PREFIX, "[KinacuProvider] [EXCEPTION] [", ex.GetType().Name.ToUpper(), "] ACCEDIENDO AL CACHE VALIDANDO SECURITY {message=", ex.Message, ",stackTrace=", ex.StackTrace, "}")); logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "CACHE ACTIVO TOPUP")); /// kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; //CODIGO REPETIDO logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] newSaleWithExternalIdResult {response=" + kinacuTopUpResponse + ",IdTransaction=" + transactionId + ",SaleData=" + saleData + ",message=" + message + "}"); bool errorSession = GetResponseCode(message) == 21; if (errorSession) { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, " TOP UP ID DE SESSION INVALIDO RECALCULAR SESSION")); //solicitar de nuevo session var sessionRequest = new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }; var getSessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( sessionRequest , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); sessionID = getSessionResponse.SessionID; logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, " NUEVO ID ", IsValidId(sessionID))); //String llave = String.Concat(cons.CACHE_SESSION_PREFIX, request.AuthenticationData.Username); String llave = String.Concat(request.AuthenticationData.Username, " ", request.AuthenticationData.Password); _cacheSession.AddOrUpdate <String>(llave, sessionID); kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; } } else { kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; //CODIGO REPETIDO logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] newSaleWithExternalIdResult {response=" + kinacuTopUpResponse + ",IdTransaction=" + transactionId + ",SaleData=" + saleData + ",message=" + message + "}"); } if (request.DeviceType == cons.ACCESS_H2H) { string llave = String.Concat(request.AuthenticationData.Username); decimal[] result = { 0.0m, 0.0m, 0.0m }; //try //{ // Func<decimal[]> callback = delegate()//null; // { // logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] CALLBACK SALDO"); // List<decimal> lista = new List<decimal>(); // AuthenticationData cascadeAuth = new AuthenticationData() // { // SessionID = sessionID // }; // GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator<GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() // { // AuthenticationData = cascadeAuth, // DeviceType = request.DeviceType // }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); // lista.Add(balanceResponse.StockBalance.Value); // lista.Add(response.WalletBalance = balanceResponse.WalletBalance.Value); // lista.Add(response.PointBalance = balanceResponse.PointsBalance.Value); // return lista.ToArray<decimal>(); // }; // // ()=>{ // // new int[]{0,0,0}; // //}; // result = _cacheSaldo.GetValue<decimal[]>(llave, callback); //} //catch (Exception ex) //{ // logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] ERROR AL CONSULTAR CHACHE SALDO 1"); // // throw; //} try { //CUANDO SE RECARGA EL SALDO Func <decimal[]> callback = delegate() { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] SALDO NOT FOUND CACHE ")); return(new HandlerCacheSaldo().HandlerCache(new AuthenticationData() { SessionID = sessionID }, request)); }; bool inCache = false; //CUANDO SE ENCUENTRA EL SALDO EN CACHE //TODO plantear un accion por referencia //TODO se puede lanzar la actualizacion en cache asincrona Action <Object, Object> accion = delegate(Object key2, Object value) { inCache = true; logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] SALDO FOUND CACHE [", key2, "]")); }; result = _cacheSaldo.GetValue <decimal[]>(llave, callback, accion); //si la respuesta es valid //if (inCache && response.ResponseCode == 0) //{ // result[0] -= _Amount; // logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] ACTUALIZANDO STOCKBALANCE EN CACHE [", result[0], "]")); // _cacheSaldo.AddOrUpdate(llave, result); //} } catch (Exception ex) { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] ERROR AL CONSULTAR CHACHE SALDO "); throw; } //AuthenticationData cascadeAuth = new AuthenticationData() //{ // SessionID = sessionID //}; //GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator<GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() //{ // AuthenticationData = cascadeAuth, // DeviceType = request.DeviceType //}, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); //if (response != null) //{ // response.StockBalance = balanceResponse.StockBalance.Value; // response.WalletBalance = balanceResponse.WalletBalance.Value; // response.PointBalance = balanceResponse.PointsBalance.Value; //} if (result.Length == 3) { response.StockBalance = result[0]; response.WalletBalance = result[1]; response.PointBalance = result[2]; } } else { AuthenticationData cascadeAuth = new AuthenticationData() { SessionID = sessionID }; GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = cascadeAuth, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if (response != null) { response.StockBalance = balanceResponse.StockBalance.Value; response.WalletBalance = balanceResponse.WalletBalance.Value; response.PointBalance = balanceResponse.PointsBalance.Value; } } if (response.ResponseCode.Equals(0) && (ConfigurationManager.AppSettings["IncludeTopupMessageExtended"] ?? "").ToLower().Equals("true")) { // Acá concatenar el mensaje del macroproducto en caso de ser necesario response.ResponseMessage = String.Concat(response.ResponseMessage, new MacroProductDataManager().GetMacroProductMessage(int.Parse(ConfigurationManager.AppSettings["CountryID"]), int.Parse(MapMNOtoProductId(request.MNO)))); } return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { GetSessionResponseBody response = null; //TODO APLICAR CACHE GetSessionRequestBody request = requestObject as GetSessionRequestBody; response = new GetSessionResponseBody(); if ( request.AuthenticationData == null || ( String.IsNullOrEmpty(request.AuthenticationData.Username) || String.IsNullOrEmpty(request.AuthenticationData.Password) ) ) { response.ResponseCode = 90; response.ResponseMessage = "DATOS DE AUTENTICACIÓN INVALIDOS"; response.TransactionID = 0; response.SessionID = ""; return(response); } string result = ""; #region comentarioanteriores /* * var cacheObj = new LoginDataCache(); * ObjectCache cache = MemoryCache.Default; * var cacheKey = request.AuthenticationData.Username + request.Platform; * * //logger.InfoLow("en el cache tengo " + cache.Count()); * if (cache.Contains(cacheKey)) * { * kinacuWS.LogOff(int.Parse(((LoginDataCache)cache.Get(cacheKey)).Token)); * //logger.InfoLow("ya hicimos logoff de " + ((LoginDataCache)cache.Get(cacheKey)).Token); * cache.Remove(cacheKey); * }*/ #endregion logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetSessionProvider] [SEND-DATA] loginParameters {accessId=" + request.AuthenticationData.Username + ",password=******,accessType=" + request.DeviceType + "}"); int newSessionResponse = kinacuWS.Login(request.AuthenticationData.Username, request.AuthenticationData.Password, request.DeviceType, out result); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetSessionProvider] [RECV-DATA] loginResult {response=" + newSessionResponse + ",result=" + result + "}"); var myResponseCode = newSessionResponse != 0 ? 0 : GetResponseCode(result); response = new GetSessionResponseBody() { ResponseCode = myResponseCode, TransactionID = 0, SessionID = myResponseCode.Equals(1013) ? "1013" : newSessionResponse.ToString() }; if (newSessionResponse == 0) { response.ResponseMessage = result; } #region comentarioanteriores //if (response.ResponseCode == 0) //{ // REPG2013 - esto queda deshabilitado por ahora /* * var newCacheObject = new LoginDataCache() * { * UserName = request.AuthenticationData.Username, * Platform = request.Platform, * Token = response.SessionID * }; * // Store data in the cache * var cacheMinutes = ConfigurationManager.AppSettings["UtibaSessionTTL"] ?? "10"; * var cacheItemPolicy = new CacheItemPolicy { AbsoluteExpiration = DateTime.Now.AddSeconds(Convert.ToInt32(cacheMinutes) * 1000) }; * //cache.Add(cacheKey, newCacheObject, cacheItemPolicy); * cacheObj = newCacheObject; * logger.InfoLow("ya guarde en cache"); */ //} #endregion return(response); }