Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }