예제 #1
0
        public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID)
        {
            GetAgentInfoRequestBody  request  = requestObject as GetAgentInfoRequestBody;
            GetAgentInfoResponseBody response = null;

            logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [SEND-DATA] getAgentByReferenceRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",reference=" + request.Agent + ",category=agent}");

            AgentResponse utibaGetAgentResponse = utibaClientProxy.getAgentByReference(new getAgentByReference()
            {
                getAgentByReferenceRequest = new getAgentByReferenceRequest()
                {
                    sessionid   = sessionID,
                    device_type = request.DeviceType,
                    reference   = request.Agent,
                    category    = "agent"
                }
            });

            StringBuilder sb = new StringBuilder();

            foreach (var agentData in utibaGetAgentResponse.AgentReturn.agent.agentData)
            {
                sb.Append("agentData={key=" + agentData.key + ",value=" + agentData.value + "},");
            }
            if (sb.Length > 0)
            {
                sb.Remove(sb.Length - 1, 1);
            }

            logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [RECV-DATA] agentResponse {transid=" + utibaGetAgentResponse.AgentReturn.transid + ",result=" + utibaGetAgentResponse.AgentReturn.result +
                           ",result_namespace=" + utibaGetAgentResponse.AgentReturn.result_namespace + ",agent={ID=" + utibaGetAgentResponse.AgentReturn.agent.ID + ",referenceID=" + utibaGetAgentResponse.AgentReturn.agent.referenceID +
                           ",agentID=" + utibaGetAgentResponse.AgentReturn.agent.agentID + ",ownerID=" + utibaGetAgentResponse.AgentReturn.agent.ownerID + ",name=" + utibaGetAgentResponse.AgentReturn.agent.name +
                           ",MSISDN=" + utibaGetAgentResponse.AgentReturn.agent.MSISDN + ",reference=" + utibaGetAgentResponse.AgentReturn.agent.reference + ",entityReference={reference=" + utibaGetAgentResponse.AgentReturn.agent.entityReference.reference + "}" +
                           ",salt=" + utibaGetAgentResponse.AgentReturn.agent.salt + ",emailAddress=" + utibaGetAgentResponse.AgentReturn.agent.emailAddress + ",SMSAddress=" + utibaGetAgentResponse.AgentReturn.agent.SMSAddress +
                           ",Language=" + utibaGetAgentResponse.AgentReturn.agent.Language + ",upstream=" + utibaGetAgentResponse.AgentReturn.agent.upstream + ",status=" + utibaGetAgentResponse.AgentReturn.agent.status +
                           ",agentType=" + utibaGetAgentResponse.AgentReturn.agent.agentType + ",primaryGroup=" + utibaGetAgentResponse.AgentReturn.agent.primaryGroup + ",depth=" + utibaGetAgentResponse.AgentReturn.agent.depth + "," + sb.ToString() +
                           ",createdDate=" + utibaGetAgentResponse.AgentReturn.agent.createdDate + ",organisation=" + utibaGetAgentResponse.AgentReturn.agent.organisation + ",DSComission=" + utibaGetAgentResponse.AgentReturn.agent.DSComission +
                           ",POSComission=" + utibaGetAgentResponse.AgentReturn.agent.POSComission + ",category=" + utibaGetAgentResponse.AgentReturn.agent.category + "}}");

            Func <String, KeyValuePair[], String> findItem = (k, a) =>
            {
                if (a != null)
                {
                    var node = a.FirstOrDefault(kvp => kvp.key.Equals(k));
                    if (node != null)
                    {
                        return(node.value);
                    }
                }
                return(null);
            };


            if (utibaGetAgentResponse != null && utibaGetAgentResponse.AgentReturn.result == 0)
            {
                response = new GetAgentInfoResponseBody()
                {
                    ResponseCode    = Utils.BuildResponseCode(utibaGetAgentResponse.AgentReturn.result, utibaGetAgentResponse.AgentReturn.result_namespace),
                    ResponseMessage = utibaGetAgentResponse.AgentReturn.result_namespace,
                    TransactionID   = utibaGetAgentResponse.AgentReturn.transid,
                    AgentInfo       = new AgentInfo()
                    {
                        Agent          = request.Agent,
                        NationalIDType = findItem("nat_id_type", utibaGetAgentResponse.AgentReturn.agent.agentData),
                        NationalID     = findItem("nat_id", utibaGetAgentResponse.AgentReturn.agent.agentData),
                        Address        = utibaGetAgentResponse.AgentReturn.agent.address ?? findItem("address", utibaGetAgentResponse.AgentReturn.agent.agentData),
                        Email          = utibaGetAgentResponse.AgentReturn.agent.emailAddress,
                        Name           = utibaGetAgentResponse.AgentReturn.agent.name,
                        Depth          = utibaGetAgentResponse.AgentReturn.agent.depth,
                        BirthDate      = findItem("dob", utibaGetAgentResponse.AgentReturn.agent.agentData),
                        Gender         = findItem("gender", utibaGetAgentResponse.AgentReturn.agent.agentData),
                        LegalName      = findItem("legal_name", utibaGetAgentResponse.AgentReturn.agent.agentData),

                        //Elementos privados
                        AgentID     = utibaGetAgentResponse.AgentReturn.agent.agentID,
                        ReferenceID = utibaGetAgentResponse.AgentReturn.agent.referenceID,
                        OwnerID     = utibaGetAgentResponse.AgentReturn.agent.ownerID,
                        BranchID    = utibaGetAgentResponse.AgentReturn.agent.agentID
                    }
                };
            }
            else
            {
                response = new GetAgentInfoResponseBody
                {
                    ResponseCode    = 99,
                    ResponseMessage = "Ocurrio un problema procesando su solicitud"
                };
            }
            return(response);
        }
예제 #2
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");
        }
예제 #3
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new InformPaymentResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0
                       }
            }
            ;
            InformPaymentRequestBody  request  = requestObject as InformPaymentRequestBody;
            InformPaymentResponseBody response = null;

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[InformPaymentProvider] [SEND-DATA] informPaymentParameters {amount=" + request.Amount + ",targentAgentId=" + request.TargetAgentId + ",hasDeposit=" + request.HasDeposit +
                           ",accountId=" + request.AccountId + ",transactionReference=" + request.TransactionReference + ",transactionDate=" + request.TransactionDate + ",sucursalNumber=" + request.SucursalNumber +
                           ",sucursalName=" + request.SucursalName + ",comment=" + request.Comment + ",immediatelyDistribute=" + request.ImmediatelyDistribute + "}");

            string responseCode = "99", message = "error";

            bool result = false;

            int usrId = new IBank.Utils().GetUserId(request.AuthenticationData.Username);

            if (request.TargetAgentId > 0)
            {
                if (!IsValid(request))
                {
                    return(new InformPaymentResponseBody()
                    {
                        ResponseCode = 80,
                        ResponseMessage = "Datos incompletos",
                        TransactionID = 0
                    });
                }

                string bankAccount = new IBank.Utils().GetBankNumber(request.AccountId);

                if (request.ImmediatelyDistribute)
                {
                    //result = new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().RegistroPago(decimal.Parse(request.TargetAgentId.ToString()), request.Amount, request.TransactionReference, request.TransactionDate, bankAccount, (request.HasDeposit ? "S" : "N"), ref responseCode, ref message, request.Comment, decimal.Parse(request.TransactionReference), DateTime.UtcNow.AddHours(new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetTimeZone()));

                    result = new IBank.Utils().RegistroDepositoAcreditaSaldo(decimal.Parse(request.TargetAgentId.ToString()), usrId, request.Amount, request.TransactionReference, request.TransactionDate, bankAccount, ref responseCode, ref message, request.Comment, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.SucursalNumber.ToString(), request.SucursalName);
                }
                else
                {
                    result = new IBank.Utils().RegistrarDeposito(request.TargetAgentId, usrId, request.Amount, request.TransactionReference, request.TransactionDate, bankAccount, request.Comment, ref responseCode, ref message, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.SucursalNumber.ToString(), request.SucursalName);
                }
            }
            else
            {
                //int ageId = new IBank.Utils().GetAgentId(request.AuthenticationData.Username);

                int prodcut = -1; String res = "";
                KinacuLogisticsWebService.LogisticsInterface logisticsInterface = new KinacuLogisticsWebService.LogisticsInterface();
                result = logisticsInterface.CreateProductRequest(Convert.ToInt32(sessionID), 0, (int)request.Amount * 100, out prodcut, out res);

                if (result)
                {
                    responseCode = "00"; message = "TRANSACCION OK";
                }
                else
                {
                    responseCode = Movilway.API.Core.UtilResut.StrErrorCode(1); message = res;
                }
                //result = new IBank.Utils().RegistrarSolicitudProducto(ageId, request.Amount, request.TransactionDate, ref responseCode, ref message);
            }

            response = new InformPaymentResponseBody()
            {
                ResponseCode    = int.Parse(responseCode),
                ResponseMessage = message,
                TransactionID   = 0
            };

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[InformPaymentProvider] [RECV-DATA] informPaymentResult {ResponseCode=" + responseCode + ",ResponseMessage=" + message + ",TransactionID=" + 0 + "}");

            return(response);
        }
예제 #4
0
        /// <summary>
        /// Ejecuta la operacion validando los constrains de seguridad
        ///
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public IMovilwayApiResponse PerformSecureOperation(IMovilwayApiRequest request)
        {
            IMovilwayApiResponse response = null;

            //DATOS DE AUTENTICACION
            try
            {
                InitPrefix();

                PrintLoginValues(request);



                //Validaciones de seguridad teniendo en cuenta los datos de la peticion
                SecureValidation(request);



                SecureAccessValidation(request);

                //
                String sessionID = null;
                if (!(request is GetSessionRequestBody))
                {
                    sessionID = GetSessionID(request);
                }


                SaleInterface kinacuWS = new SaleInterface();
                //
                // CONDIGURACION INTERFAZ
                int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]);
                kinacuWS.Timeout = timeOutSeconds * 1000;


                response = PerformKinacuOperation(request, kinacuWS, sessionID);
                #region secondrequest
                //if (!ValidateNumberOfExecution(request))
                //    response = PerformKinacuOperation(request, kinacuWS, sessionID);
                //else
                //{


                //        if (_delegateSecondExecution == null)
                //            throw new Exception("NO SE HA DEFINIDO EL MANEJADOR PARA LA SEGUNDA PETICION");

                //        bool isNew = false;

                //        Func<int> callback = delegate()
                //        {
                //            logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS NEW]");
                //            isNew = true;
                //            return 1;
                //        };

                //        int hascode = request.GetHashCode();
                //        logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST VALIDATION] [" + hascode + "] "+_cacheRequest.ToString());
                //    //Action<object,object> oncache= delegate(object k , object v)
                //    //    {
                //    //        logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS DOUBLE]");
                //    //        isNew = false;
                //    //    };


                //         _cacheRequest.GetValue<int>(hascode, callback);//, oncache);



                //        if (isNew)
                //        {
                //               response = PerformKinacuOperation(request, kinacuWS, sessionID);
                //        }
                //        else
                //        {
                //            logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [SecondExecution]");
                //            response = _delegateSecondExecution (request, kinacuWS, sessionID);
                //        }



                //}
                #endregion


                if (bool.Parse(ConfigurationManager.AppSettings["LogoffAuto"] ?? "true"))
                {
                    logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [SEND-DATA] logoffParameters {userid=" + sessionID + "}");
                    kinacuWS.LogOff(int.Parse(sessionID));
                    logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [RECV-DATA] logoffResult {nothing}");
                }

                logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [OUTPUT] " + response.ToString());
            }
            catch (Exception e)
            {
                logger.ErrorLow("[API] " + LOG_PREFIX + "[KinacuProvider] [EXCEPTION] Exception trying to serve KINACU Operation {message=" + e.Message + ",stackTrace=" + e.StackTrace + "}");

                //SE DELEGA EL MANEJO DE LA EXPECION A QUIEN LO INVOCA GENERALMENTE SERVICEEXECUTIONDELEGATOR
                throw;

                #region intento de respuesta anterior

                //Type a = this.GetType().GetMethod("PerformOperation").ReturnType;
                //response = new AGenericApiResponse() { ResponseCode = 99, ResponseMessage = e.Message, TransactionID = 0 };
                //Type name = MethodBase.GetCurrentMethod().GetType();
                //ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
                #endregion
            }

            return(response);
        }
예제 #5
0
 protected virtual bool ValidateNumberOfExecution(IMovilwayApiRequest request)
 {
     return(false);
 }
예제 #6
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new GetSalesSummaryResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0,
                           FinalAmount     = 0m,
                           InitialAmount   = 0m,
                           Summaries       = new SummaryItems(),
                           SummaryDate     = DateTime.Now
                       }
            }
            ;

            GetSalesSummaryRequestBody  request  = requestObject as GetSalesSummaryRequestBody;
            GetSalesSummaryResponseBody response = null;

            ManagementInterface managementWS = new ManagementInterface();
            LogisticsInterface  logisticsWS  = new LogisticsInterface();

            string message;

            #region comentario
            //int voucherQtyDownload, retailerId;
            //string retailerName, retailerAddress, retailerLegalId, ticketHeader, currentTime;

            //if (!managementWS.GetRetailerInfo(int.Parse(sessionID), out retailerId, out retailerName, out retailerAddress, out retailerLegalId, out voucherQtyDownload, out ticketHeader, out currentTime, out message))
            //{
            //    return new GetSalesSummaryResponseBody()
            //    {
            //        ResponseCode = 97,
            //        ResponseMessage = message,
            //        Summaries = null,
            //        SummaryDate = request.Date,
            //        TransactionID = new Random().Next(100000, 999999)
            //    };
            //}

            //int userId;
            //long timeOut;
            //string userName, userLastName, userAddress;

            //if (!managementWS.GetUserInfo(int.Parse(sessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message))
            //{
            //    return new GetSalesSummaryResponseBody()
            //    {
            //        ResponseCode = 98,
            //        ResponseMessage = message,
            //        Summaries = null,
            //        SummaryDate = request.Date,
            //        TransactionID = new Random().Next(100000, 999999)
            //    };
            //}
            #endregion

            /* Se comenta porque no hace nada (sólo reventar en caso de overflow
             * int amount, count;
             *
             * if (!kinacuWS.SaleCountBySeller(int.Parse(sessionID), out amount, out count, out message))
             * {
             *   return new GetSalesSummaryResponseBody()
             *   {
             *       ResponseCode = 99,
             *       ResponseMessage = message,
             *       Summaries = null,
             *       SummaryDate = request.Date,
             *       TransactionID = new Random().Next(100000, 999999)
             *   };
             * }*/

            //long balance = kinacuWS.GetAccountBalance(int.Parse(sessionID), out message);

            SummaryItems summary = new SummaryItems();
            decimal      initialAmount, finalAmount;

            if (request.SummaryType == null || request.SummaryType.Equals(SummaryType.NotSpecified) || request.SummaryType.Equals(SummaryType.ByUser))
            {
                summary = Utils.SalesSummary(request.AuthenticationData.Username, request.Date);

                response = new GetSalesSummaryResponseBody()
                {
                    ResponseCode    = 0,
                    ResponseMessage = "OK",
                    Summaries       = summary,
                    SummaryDate     = request.Date,
                    TransactionID   = new Random().Next(100000, 999999)
                };
            }
            else
            {
                summary  = Utils.SalesSummaryByAgent(request.AuthenticationData.Username, request.Date, out initialAmount, out finalAmount);
                response = new GetSalesSummaryResponseBody()
                {
                    ResponseCode    = 0,
                    ResponseMessage = "OK",
                    Summaries       = summary,
                    SummaryDate     = request.Date,
                    TransactionID   = new Random().Next(100000, 999999),
                    InitialAmount   = initialAmount,
                    FinalAmount     = finalAmount
                };
            }


            // Asignar Nombre de agencia y fecha de impresion
            if (response != null)
            {
                response.BranchName  = Utils.GetAgentName(request.AuthenticationData.Username);
                response.DatePrinter = Utils.GetLocalTimeZone().ToString("yyyy-MM-dd HH:mm:ss");
            }


            //response.Summaries = new SummaryItems();

            //if (request.WalletType == WalletType.Stock)
            //    response.Summaries.Add(new SummaryItem() { TotalAmount = amount / 100m, TransactionCount = count, TransactionType = "Recargas y pines" });
            //else
            //    response.Summaries.Add(new SummaryItem() { TotalAmount = 0, TransactionCount = 0, TransactionType = "Recargas y pines" });
            logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetSalessSummaryResult]").Tag(" GetSalesSummaries ").Value(response.Summaries.Count));
            return(response);
        }
    }
예제 #7
0
        private String GetSessionID(IMovilwayApiRequest request)
        {
            //string username = request.AuthenticationData.Username, platform = request.Platform ?? ConfigurationManager.AppSettings["DefaultPlatform"];
            //var cacheObj = new LoginDataCache();

            if (request != null)
            {
                //ObjectCache cache = MemoryCache.Default;
                //var cacheKey = username + platform;

                //ProviderLogger.InfoLow("*** Chequeo de cache ***");
                //foreach (var item in cache)
                //ProviderLogger.InfoLow(item.Key + ": " + item.Value);
                //ProviderLogger.InfoLow("************************");

                if (request.AuthenticationData.SessionID != null)
                {
                    return(request.AuthenticationData.SessionID);
                }
                else
                {
                    //if (cache.Contains(cacheKey))
                    //    cacheObj = (LoginDataCache)cache.Get(cacheKey);
                    //else
                    //{


                    var getSessionResponse = new ServiceExecutionDelegator
                                             <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest(
                        new GetSessionRequestBody()
                    {
                        Username   = request.AuthenticationData.Username,
                        Password   = request.AuthenticationData.Password,
                        DeviceType = request.DeviceType
                    }, ApiTargetPlatform.Utiba, ApiServiceName.GetSession);


                    //if (ConfigurationManager.AppSettings["ProcessMigration"].ToLower() == "true")
                    //{
                    //    logger.InfoHigh("Comienza la migración del usuario: " + request.AuthenticationData.Username);
                    //    bool migrateAgent = MigrateAgent(request.AuthenticationData.Username);
                    //    if (migrateAgent && getSessionResponse.ResponseCode == 0)
                    //    {
                    //        // 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 = 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

                    //        // Save in DB
                    //        if (changePinResponse.ResponseCode == 0)
                    //        {
                    //            logger.InfoHigh("Se migró exitosamente la clave del usuario: " + request.AuthenticationData.Username);
                    //            SaveAgentMigrated(request.AuthenticationData.Username);
                    //        }
                    //    }
                    //}

                    return(getSessionResponse.SessionID);

                    //var newCacheObject = new LoginDataCache()
                    //{
                    //    UserName = username,
                    //    Platform = platform,
                    //    Token = getSessionResponse.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);
                    //ProviderLogger.InfoHigh("cacheKey: " + cacheKey + " - newCacheObject: {" + newCacheObject.UserName + "," + newCacheObject.Platform + "," + newCacheObject.Token + "} - cacheItemPolicy: " + cacheItemPolicy.AbsoluteExpiration);

                    //cacheObj = newCacheObject;
                    //}
                }
            }

            return("error");
            //return cacheObj.Token;
        }
예제 #8
0
        public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject)
        {
            try
            {
                //validar una vez la ip


                //ASecuredApiRequest securityrequest = null;

                GetSessionResponseBody responseBody = null;
                switch (_securemode)
                {
                case ApiSecurityMode.CREDENTIALS:

                    //securityrequest = Reflection.FactoryObject<ASecuredApiRequest>(typeof(ASecuredApiRequest));

                    //securityrequest.AuthenticationData = new AuthenticationData();
                    //securityrequest.AuthenticationData.Username = requestObject.AuthenticationData.Username;
                    //securityrequest.AuthenticationData.Password = requestObject.AuthenticationData.Password;
                    //securityrequest.AuthenticationData.SessionID = requestObject.AuthenticationData.SessionID;
                    //securityrequest.AuthenticationData.Tokken = requestObject.AuthenticationData.Tokken;

                    responseBody = new ServiceExecutionDelegator
                                   <GetSessionResponseBody, IMovilwayApiRequest>().ResolveRequest(
                        requestObject
                        , _target, ApiServiceName.GetSession);

                    break;

                case ApiSecurityMode.USER:

                    //securityrequest = Reflection.FactoryObject<ASecuredApiRequest>(typeof(ASecuredApiRequest));
                    //securityrequest.AuthenticationData = new AuthenticationData();
                    //securityrequest.AuthenticationData.Username = requestObject.AuthenticationData.Username;
                    //securityrequest.AuthenticationData.Password = requestObject.AuthenticationData.Password;
                    //securityrequest.AuthenticationData.SessionID = string.Empty;
                    //securityrequest.AuthenticationData.Tokken = string.Empty;

                    responseBody = new ServiceExecutionDelegator
                                   <GetSessionResponseBody, IMovilwayApiRequest>().ResolveRequest(
                        requestObject
                        , _target, ApiServiceName.GetSession);

                    break;
                }


                if (responseBody.ResponseCode == 0)//&& tokken es valido
                {
                    // si la validacion es segura
                    return(_serviceImpl.PerformOperation(requestObject));
                }
                else
                {
                    IMovilwayApiResponse response = Reflection.FactoryObject <IMovilwayApiResponse>(_typeresponse);
                    response.ResponseCode    = 90;
                    response.ResponseMessage = responseBody.ResponseMessage; //"ERROR DE SEGURIDAD DATOS ASOCIADOS AL TOKKEN INVALIDO";

                    return(response);
                }
            }
            catch (Exception ex)
            {
                //TODO DESHABILITAR LA EJECUCION DE EST HANDLER
                IMovilwayApiResponse response = Reflection.FactoryObject <IMovilwayApiResponse>(_typeresponse);
                response.ResponseCode    = 500;
                response.ResponseMessage = "ERROR INESPERADO EJECUTANDO SECUREPROVIDER";
                logger.ErrorHigh(String.Concat(response.ResponseCode, "-", response.ResponseMessage, " ", ex.Message, "-.", ex.StackTrace));
                return(response);
            }
        }
예제 #9
0
 protected override bool ValidateNumberOfExecution(IMovilwayApiRequest request)
 {
     return(_secondRequestBandera);//request.DeviceType == cons.ACCESS_H2H || request.DeviceType == cons.ACCESS_POSWEB;
 }
예제 #10
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new ProcessDistributionResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0
                       }
            }
            ;

            ProcessDistributionRequestBody  request  = requestObject as ProcessDistributionRequestBody;
            ProcessDistributionResponseBody response = null;

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] [SEND-DATA] processDistributionParameters {comment=" + request.Comment + ",immediatelyDistribute=" + request.ImmediatelyDistribute + ",isApproved=" + request.IsApproved + ",distributionId=" + request.DistributionId + "}");

            string responseCode = "99", message = "error";

            DistributionSummary deposit;
            var isProductRequest = request.AccountId == 0;
            var result           = false;

            int usrId = new IBank.Utils().GetUserId(request.AuthenticationData.Username);

            if (isProductRequest)
            {
                deposit = new IBank.Utils().GetSolicitudProducto(request.DistributionId);

                if (request.IsApproved)
                {
                    logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] isProductRequest y isApproved");
                    //deposit.HasDeposit = false;
                    result = new IBank.Utils().ProcesaSolicitudProducto(deposit.OriginalDistributionID, usrId, deposit.TargetAgentID, deposit.Amount, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.Comment, ref responseCode, ref message);
                }
                else
                {
                    logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] isProductRequest y not isApproved");
                    result = new IBank.Utils().RechazaSolicitudProducto(deposit.OriginalDistributionID, deposit.TargetAgentID, usrId, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.Comment, ref responseCode, ref message);
                }
            }
            else
            {
                deposit = new IBank.Utils().GetSolicitud(request.DistributionId);

                deposit.HasDeposit = true;

                //TODO escenario prueba dos registro pago
                // deposit.HasDeposit = false;
                //

                if (request.IsApproved)
                {
                    if (request.ImmediatelyDistribute)
                    {
                        logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] not isProductRequest y isApproved y immediatelyDist");
                        result = new IBank.Utils().RegistroPago(deposit.TargetAgentID, usrId, deposit.Amount, deposit.ReferenceNumber, deposit.DepositDate, deposit.AccountNumber, deposit.HasDeposit ? "S" : "N", ref responseCode, ref message, request.Comment, request.DistributionId, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()));
                    }
                    else
                    {
                        logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] not isProductRequest y isApproved y not immediatelyDist");
                        result = new IBank.Utils().ProcesaAvisoDeposito(deposit.OriginalDistributionID, deposit.TargetAgentID, usrId, deposit.Amount, deposit.ReferenceNumber, deposit.DepositDate, deposit.AccountNumber, request.Comment, ref responseCode, ref message);
                    }
                    //result = new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().RegistrarDeposito(deposit.TargetAgentID, deposit.Amount, deposit.ReferenceNumber, deposit.DepositDate, deposit.AccountNumber, request.Comment, ref responseCode, ref message, DateTime.UtcNow.AddHours(new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetTimeZone()), "", "");
                }
                else
                {
                    logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] not isProductRequest y not isApproved");
                    result = new IBank.Utils().RechazaAvisoDeposito(deposit.OriginalDistributionID, deposit.TargetAgentID, usrId, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.Comment, ref responseCode, ref message);
                }
            }

            response = new ProcessDistributionResponseBody()
            {
                ResponseCode    = int.Parse(responseCode),
                ResponseMessage = message,
                TransactionID   = 0
            };

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] [RECV-DATA] processDistributionResult {response={" + responseCode + "," + message + "}}");

            return(response);
        }
    }
예제 #11
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new GetPurchasesSummaryDashBoardResponseBody()
                       {
                           ResponseCode                = 90,
                           ResponseMessage             = "error session",
                           TransactionID               = 0,
                           PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems()
                       }
            }
            ;

            GetPurchasesSummaryDashBoardRequestBody  request  = requestObject as GetPurchasesSummaryDashBoardRequestBody;
            GetPurchasesSummaryDashBoardResponseBody response = null;

            ManagementInterface managementWS = new ManagementInterface();
            LogisticsInterface  logisticsWS  = new LogisticsInterface();

            string message;

            PurchasesSummaryDashBoardItems summary = new PurchasesSummaryDashBoardItems();

            summary = Utils.PurchasesSummaryByAgentDashBoard(request.AuthenticationData.Username, request.InitialDate, request.EndDate, out message);

            if (message.Equals("OK"))
            {
                decimal auxTotalPurchases = 0;

                if (summary != null)
                {
                    auxTotalPurchases = summary.Sum(r => r.TotalAmount);
                }

                CommissionPurchasesSummaryDashItem summaryCommi = new CommissionPurchasesSummaryDashItem();

                summaryCommi = Utils.CommissionPurchasesSummaryByAgentDashBoard(request.AuthenticationData.Username, request.InitialDate, request.EndDate, out message);

                if (message.Equals("OK") && summaryCommi != null)
                {
                    response = new GetPurchasesSummaryDashBoardResponseBody()
                    {
                        ResponseCode                = 0,
                        ResponseMessage             = message,
                        PurchasesSummariesDashBoard = summary,
                        SummaryDate       = request.EndDate,
                        TransactionID     = 0,
                        TotalPurchases    = auxTotalPurchases,
                        TotalRevenue      = summaryCommi.TotalCommiPurchases,
                        AverageCommission = summaryCommi.CommiPercentage
                    };
                }
                else
                {
                    response = new GetPurchasesSummaryDashBoardResponseBody()
                    {
                        ResponseCode                = 90,
                        ResponseMessage             = message,
                        PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems(),
                        SummaryDate   = request.EndDate,
                        TransactionID = 0
                    };
                }
            }
            else
            {
                response = new GetPurchasesSummaryDashBoardResponseBody()
                {
                    ResponseCode                = 90,
                    ResponseMessage             = message,
                    PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems(),
                    SummaryDate   = request.EndDate,
                    TransactionID = 0
                };
            }

            logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetPurchasesSummaryDashBoardResult]").Tag(" GetPurchasesSummaryDashBoardProvider ").Value(response.PurchasesSummariesDashBoard.Count).Tag("Mensaje").Value(message));

            return(response);
        }
    }
예제 #12
0
        public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject)
        {
            var request = requestObject as RegenerateMoviPinRequestBody;

            Logger.BeginLow(() => TagValue.New().Tag("Request").Value(request));


            var response = new RegenerateMoviPinResponseBody
            {
                ResponseCode    = 0,
                ResponseMessage = "Su Movipin ha sido regenerado.",
                TransactionID   = 0
            };


            if (request != null)
            {
                decimal regeneratedAmount = 0;
                string  recipient         = null;
                var     pin = new MoviPinDetails();

                // Busco el detalle de cada pin recibido
                pin = Utils.GetMoviPinDetails(request.TransactionNumber);

                // Reviso que exista más de un pin válido, ya que no tiene sentido validar un solo pin
                if (!(pin.IsValid ?? false))
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "Pin invalido";
                    Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
                    return(response);
                }

                // Seteo el agente a utilizar más adelante al crear el nuevo pin regenerado
                recipient = pin.Agent;

                // En esta parte se redimen uno a uno los pines
                var movipaymentRequest = new MoviPaymentRequestBody
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username = _redeemUser,
                        Password = _redeemPassword
                    },
                    DeviceType = request.DeviceType,
                    Amount     = pin.RemainingAmount.Value,
                    ExternalTransactionReference = "",
                    MoviPin = pin.Number
                };
                var redeeemResponse = new ServiceExecutionDelegator
                                      <MoviPaymentResponseBody, MoviPaymentRequestBody>().
                                      ResolveRequest(movipaymentRequest, ApiTargetPlatform.Utiba, ApiServiceName.MoviPayment);

                if (redeeemResponse.ResponseCode.Value == 0)
                {
                    regeneratedAmount = pin.RemainingAmount.Value;
                }
                else
                {
                    pin.IsValid         = false;
                    pin.Agent           = null;
                    pin.RemainingAmount = null;
                }

                // Acá procedemos a crear el nuevo pin por el monto que redimimos
                if (regeneratedAmount > 0)
                {
                    var createMoviPinRequest = new CreateMoviPinRequestBody()
                    {
                        AuthenticationData = new AuthenticationData()
                        {
                            Username = _consolidateUser,
                            Password = _consolidatePassword
                        },
                        Amount     = regeneratedAmount,
                        DeviceType = request.DeviceType,
                        ExternalTransactionReference = "",
                        Recipient = recipient
                    };
                    var createMoviPinResponse = new ServiceExecutionDelegator
                                                <CreateMoviPinResponseBody, CreateMoviPinRequestBody>().
                                                ResolveRequest(createMoviPinRequest, ApiTargetPlatform.Utiba, ApiServiceName.CreateMoviPin);

                    if (createMoviPinResponse.ResponseCode.Value == 0)
                    {
                        response.RegeneratedMoviPin = createMoviPinResponse.MoviPin;
                        response.RegeneratedAmount  = regeneratedAmount;
                        response.ExpiryDate         = createMoviPinResponse.ExpiryDate;
                    }
                    else
                    {
                        response.ResponseCode    = 99;
                        response.ResponseMessage = "Operacion fallida";
                    }
                }
                else
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "El pin se quería regenerar con monto cero";
                }
            }

            Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
            return(response);
        }
예제 #13
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID)
        {
            string providerName = "CreditNoteProvider";
            MonthlyReportRequestBody  request  = requestObject as MonthlyReportRequestBody;
            MonthlyReportResponseBody response = new MonthlyReportResponseBody()
            {
                ResponseCode    = 90,
                ResponseMessage = "Error inesperado",
                TransactionID   = 0
            };

            if (sessionID.Equals("0"))
            {
                response.ResponseMessage = "Error de sesion";

                return(response);
            }



            try
            {
                using (SqlConnection connection = Movilway.API.Utils.Database.GetKinacuDbConnection())
                {
                    connection.Open();
                    // db.db = connection;

                    var cmd = connection.CreateCommand();

                    cmd.Parameters.AddWithValue("rep_type", request.ReportType.ToString());
                    cmd.Parameters.AddWithValue("acc_login", request.AuthenticationData.Username);
                    cmd.Parameters.AddWithValue("tac_id", request.DeviceType);
                    cmd.Parameters.AddWithValue("state", "PE");
                    cmd.Parameters.AddWithValue("executiondate", request.ExecutionDate);



                    cmd.CommandText = @"

                    DECLARE @usr_id as decimal(5,0)
                    
                    SELECT @usr_id = [usr_id]
                    FROM [dbo].[Acceso]
                    WHERE [acc_login] = @acc_login  and [tac_id] = @tac_id
                    
                    declare @dateDiff as int = (SELECT  CAST(par_valor as int) FROM [Parametro] WITH(NOLOCK) WHERE par_id ='TimeDifference') 

                   declare @date as datetime =  dateadd(minute,@dateDiff,getdate())
                    
                    INSERT INTO [dbo].[MwReportRequest]
                               ([rep_type]
                               ,[usr_id]
                               ,[state]
                               ,[req_date]
                                ,[executiondate]
                             
                               )
                         VALUES
                               (@rep_type
                               ,CONVERT ( INT ,isnull( @usr_id,0))
                               ,@state
                               ,@date
                               ,@executiondate
                               )
                    
                    
                    SELECT @@IDENTITY
                    
                    
                    ";


                    var result = cmd.ExecuteScalar();

                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ReportProvider] Result " + result);

                    long _tran = 0;
                    if (result != null)
                    {
                        if (!long.TryParse(result.ToString(), out _tran))
                        {
                            _tran = 0;
                        }

                        response.ResponseCode    = 0;
                        response.ResponseMessage = "OK";
                        response.TransactionID   = (int)_tran;
                    }
                }
            }
            catch (Exception ex)
            {
                ProviderLogger.ExceptionLow(() => TagValue.New()
                                            .MethodName(providerName)
                                            .Exception(ex));
            }
            finally
            {
            }

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [RECV-DATA] ReportProviderResult {response={" + response + "}}");
            return(response);
        }
예제 #14
0
        public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID)
        {
            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()]);
            }

            utibaClientProxy.InnerChannel.OperationTimeout = new TimeSpan(0, 0, timeOutSeconds);


            TopUpResponseBody response = null;

            if (request.WalletType == WalletType.NotSpecified || request.WalletType == WalletType.Stock)
            {
                logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] topupRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",mno=" + request.MNO + ",amount=" + request.Amount +
                               ",recipient=" + request.Recipient + ",mno_defined_id=" + request.TerminalID + ",host_trans_ref=" + request.ExternalTransactionReference + "}");

                topupResponse utibaTopUpResponse = utibaClientProxy.topup(new topup()
                {
                    topupRequest = new topupRequestType()
                    {
                        sessionid      = sessionID,
                        device_type    = request.DeviceType,
                        mno            = request.MNO,
                        amount         = request.Amount,
                        recipient      = request.Recipient,
                        host_trans_ref = request.ExternalTransactionReference,
                        mno_defined_id = request.TerminalID
                    }
                });

                logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] topupResponse {transid=" + utibaTopUpResponse.topupReturn.transid + ",result=" + utibaTopUpResponse.topupReturn.result +
                               ",result_namespace=" + utibaTopUpResponse.topupReturn.result_namespace + ",result_message=" + utibaTopUpResponse.topupReturn.result_message + "}");

                response = new TopUpResponseBody()
                {
                    ResponseCode    = Utils.BuildResponseCode(utibaTopUpResponse.topupReturn.result, utibaTopUpResponse.topupReturn.result_namespace),
                    ResponseMessage = utibaTopUpResponse.topupReturn.result_message,
                    TransactionID   = utibaTopUpResponse.topupReturn.transid,
                    ExternalTransactionReference = request.ExternalTransactionReference, //utibaTopUpResponse.topupReturn.trans_ext_reference,
                    Fee = utibaTopUpResponse.topupReturn.fee
                };
            }
            else if (request.WalletType == WalletType.eWallet)
            {
                logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] buyRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType +
                               ",mno=" + request.MNO + ",amount=" + request.Amount + ",recipient=" + request.Recipient + "}");

                buyResponse buyResponse = utibaClientProxy.buy(new buy()
                {
                    buyRequest = new buyRequestType()
                    {
                        sessionid   = sessionID,
                        device_type = request.DeviceType,
                        target      = request.MNO,
                        amount      = request.Amount,
                        recipient   = request.Recipient
                    }
                });

                logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] buyResponse {transid=" + buyResponse.buyReturn.transid + ",result=" + buyResponse.buyReturn.result +
                               ",result_namespace=" + buyResponse.buyReturn.result_namespace + ",result_message=" + buyResponse.buyReturn.result_message + "}");

                response = new TopUpResponseBody()
                {
                    ResponseCode    = Utils.BuildResponseCode(buyResponse.buyReturn.result, buyResponse.buyReturn.result_namespace),
                    ResponseMessage = buyResponse.buyReturn.result_message,
                    TransactionID   = buyResponse.buyReturn.transid,
                    ExternalTransactionReference = request.ExternalTransactionReference,
                    Fee = buyResponse.buyReturn.fee
                };
            }
            AuthenticationData cascadeAuth = new AuthenticationData()
            {
                SessionID = sessionID
            };

            GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody()
            {
                AuthenticationData = cascadeAuth,
                DeviceType         = request.DeviceType
            }, ApiTargetPlatform.Utiba, ApiServiceName.GetBalance);

            if (response != null)
            {
                response.StockBalance  = balanceResponse.StockBalance.Value;
                response.WalletBalance = balanceResponse.WalletBalance.Value;
                response.PointBalance  = balanceResponse.PointsBalance.Value;
            }
            return(response);
        }
예제 #15
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID)
        {
            SetStateTrustedDeviceRequestBody  request  = (SetStateTrustedDeviceRequestBody)requestObject;
            SetStateTrustedDeviceResponseBody response = new SetStateTrustedDeviceResponseBody();

            try
            {
                if (sessionID.Equals("0"))
                {
                    response.ResponseMessage = "error session";
                    response.ResponseCode    = 90;
                    return(response);
                }

                if (request.DeviceType != (int)cons.ACCESS_POSWEB)
                {
                    response.ResponseCode    = 90;
                    response.ResponseMessage = "NO ESTA AUTORIZADO PARA ACCEDER A ESTE SERVICIO";//"ERROR INESPERADO";
                    response.TransactionID   = 0;
                    return(response);
                }


                //se obtiene el dispositivo
                //GenericApiResult<TrustedDevice> resultadodevice =  Utils.GetDeviceId(request.DeviceID);

                //    response.ResponseCode = resultadodevice.ResponseCode;
                //      response.ResponseMessage = resultadodevice.ResponseMessage;

                //  if(resultadodevice.IsObjectValidResult()){


                //   TrustedDevice device = resultadodevice.ObjectResult;
                //device.Status = request.Status;

                bool result = Utils.SetStatusDevice(new TrustedDevice()
                {
                    ID = request.DeviceID, Status = request.Status
                });

                if (result)
                {
                    response.Result          = result;
                    response.ResponseCode    = 0;
                    response.ResponseMessage = "OK";
                }
                else
                {
                    response.ResponseCode    = 101;
                    response.ResponseMessage = string.Concat("NO SE PUDO CAMBIAR DE ESTADO DISPOSITIVO ", request.DeviceID);
                }

                //}
            }
            catch (Exception ex)
            {
                response.ResponseCode    = 500;
                response.ResponseMessage = string.Concat("ERROR INESPERADO CAMBIANDO ESTADO DISPOSITIVO ", request.DeviceID, " ", ex.Message, " ", ex.StackTrace);
                logger.ErrorLow(String.Concat("[API] ", base.LOG_PREFIX, "[SetStateTrustedDeviceProvider] ", "-", response.ResponseCode, "-", response.ResponseMessage, ". Exception: ", ex.Message, ". ", ex.StackTrace));
            }
            return(response);
        }
예제 #16
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);
        }
예제 #17
0
        /// <summary>
        /// Valida que el acceso este activo y se ha valido
        /// </summary>
        /// <returns></returns>
        public void IsValidAccess(IMovilwayApiRequest request)//GenericApiResult<bool>
        {
            logger.InfoHigh(String.Concat(LOG_PREFIX, " IsValidAccess "));
            bool acceso = true;
            //  GenericApiResult<bool> result = new GenericApiResult<bool>(true);
            TrustedDevice device = null;

            //TODO quitar
            device = new TrustedDevice()
            {
                Status = cons.DEVICE_ACTIVE
            };
            string message = "";


            try
            {
                if (string.IsNullOrEmpty(request.AuthenticationData.Tokken))
                {
                    message = "NO SE ENVIO EL TOKKEN DE AUTENTICACION";
                    logger.ErrorHigh(String.Concat(LOG_PREFIX, message));

                    throw new Exception(message);
                }

                String jsonDecrypt = Cryptography.decrypt(request.AuthenticationData.Tokken);

                logger.InfoHigh(() => TagValue.New().Message(String.Concat(LOG_PREFIX, " ACCESS TOKKEN  ")).Tag("DATA").Value(jsonDecrypt));

                Dictionary <string, string> dictionary = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonDecrypt);

                DateTime NowUtc      = DateTime.UtcNow;
                DateTime AccessDtUtc = DateTime.ParseExact(dictionary["Fecha"], "yyyyMMdd HH:mm:ss", null);

                logger.InfoHigh(String.Concat("FECHAS UTC ", NowUtc.ToString("yyyyMMdd HH:mm:ss"), " - ", AccessDtUtc.ToString("yyyyMMdd HH:mm:ss")));



                if ((NowUtc - AccessDtUtc) > t)
                {
                    throw  new SecurityException("EL TIEMPO DEL TOKKEN SE HA EXPIRADO");
                }

//                // buscar en los accessos de la base de datos
//                string strConnString = ConfigurationManager.ConnectionStrings["SECURE_DB"].ConnectionString;
//                using (SqlConnection mySqlConnection = new SqlConnection(strConnString))
//                {


//                    mySqlConnection.Open();
//                    SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
//                    //select by serial
//                    mySqlCommand.CommandText = @"
//                        SELECT        Device.DeviceId, Device.UserId, Device.Token, Device.Hash, Device.DeviceTypeId, Device.FriendlyName, Device.Description, Device.DateActivated, Device.Status, Device.LastAccess, Device.DateBlocked,
//                         Device.Model, Device.OS, DeviceType.Name AS Type
//FROM            Device INNER JOIN
//                         DeviceType ON Device.DeviceTypeId = DeviceType.DeviceTypeId WHERE   Device.Token = @SerialTokken AND Device.UserId = @userId ";

//                    //mySqlCommand.Parameters.AddWithValue("@SerialTokken", token);
//                    //mySqlCommand.Parameters.AddWithValue("@userId", userid);


//                    using (var reader = mySqlCommand.ExecuteReader())
//                    {
//                        if (reader.HasRows && reader.Read())
//                        {
//                            device = new TrustedDevice()
//                              {
//                                  ID = (long)((int)reader["DeviceId"]),
//                                  UserId = (int)reader["UserId"],
//                                  Token = (string)reader["Token"],
//                                  Hash = (string)reader["Hash"],
//                                  //--
//                                  IdType = (int)reader["DeviceTypeId"],
//                                  Type = (string)reader["Type"],
//                                  //--
//                                  FriendlyName = (string)reader["FriendlyName"],
//                                  DateActivated = (DateTime)reader["DateActivated"],
//                                  Status = (Int16)reader["Status"],
//                              };

//                        }
//                        else
//                            throw new Exception("NO SE ECONTRARON DATOS DEL ACCESO SEGUN LA AUTENTICACION");

//                    }
//                }


                if (device.Status != cons.DEVICE_ACTIVE)
                {
                    message = "ACCESSO NO VALIDO";
                    logger.ErrorHigh(String.Concat(LOG_PREFIX, message));
                    //RECONSIDERAR RETORNULL
                    throw new SecurityException(message);
                }
            }

            catch (Exception ex)
            {
                if (!(ex is SecurityException))
                {
                    logger.InfoHigh(String.Concat(LOG_PREFIX, " ERROR INESPERADO VALIDANDO ACCESO ", ex.Message, " - ", ex.StackTrace));
                }

                throw;
            }
        }
예제 #18
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new GetTransactionResponseBody()
                       {
                           ResponseCode          = 90,
                           ResponseMessage       = "error session",
                           TransactionID         = 0,
                           Amount                = 0m,
                           Creditor              = "",
                           Debtor                = "",
                           Initiator             = "",
                           OriginalTransactionId = "",
                           Recipient             = "",
                           TransactionDate       = DateTime.Now,
                           TransactionType       = ""
                       }
            }
            ;

            GetTransactionRequestBody  request  = requestObject as GetTransactionRequestBody;
            GetTransactionResponseBody response = null;


            try
            {
                SaleData saleData = null;

                string message = "", methodName = "saleState";
                switch (request.ParameterType)
                {
                case GetTransactionRequestParameterType.ExternalTransactionReference:
                    methodName = "saleStateByExternalId";
                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateByExternalIdParameters {UserId=" + sessionID + ",ExternalId=" + request.ParameterValue + "}");
                    saleData = kinacuWS.SaleStateByExternalId(int.Parse(sessionID), request.ParameterValue, out message);
                    response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message);
                    break;

                case GetTransactionRequestParameterType.TransactionID:
                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=" + request.ParameterValue + ",Target=}");
                    int param;
                    if (int.TryParse(request.ParameterValue, out param))
                    {
                        saleData = kinacuWS.SaleState(int.Parse(sessionID), param, "", out message);
                        response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message);
                    }
                    else
                    {
                        response = new GetTransactionResponseBody()
                        {
                            ResponseCode          = 91,
                            ResponseMessage       = "Transaccion no encontrada",
                            TransactionID         = 0,
                            TransactionResult     = 0,
                            OriginalTransactionId = "0",
                            TransactionDate       = DateTime.Now,
                            TransactionType       = "topup"
                        }
                    };
                    break;

                case GetTransactionRequestParameterType.TargetAgent:
                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=0,Target=" + request.ParameterValue + "}");


                    saleData = Utils.GetSaleStateByTargent(request.AuthenticationData.Username, request.ParameterValue, out message);     //kinacuWS.SaleState(int.Parse(sessionID), 0, request.ParameterValue, out message);
                    response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message);
                    break;

                case GetTransactionRequestParameterType.TransactionType:
                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=0,Target=}");
                    saleData = kinacuWS.SaleState(int.Parse(sessionID), 0, "", out message);
                    response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message);
                    break;

                case GetTransactionRequestParameterType.LastTransaction:
                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=0,Target=" + request.ParameterValue + "}");
                    saleData = kinacuWS.SaleState(int.Parse(sessionID), 0, "", out message);
                    response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message);
                    break;

                case GetTransactionRequestParameterType.DistributionExternalTransactionReference:

                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] getDistributionState {Target=" + request.ParameterValue + "}");


                    response = MapDistributionToGetTransactionResponseBody(request);


                    break;
                }


                if (saleData != null)
                {
                    response.ResponseMessage = Movilway.API.Utils.ApiTicket.FormatSaledata(logger, "GetTransactionProvider", request, base.LOG_PREFIX, response.ResponseCode.Value == 0, response.TransactionID.Value, response.ResponseMessage);

                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [RECV-DATA] " + methodName + "Result {saleState={IdTransaction=" + saleData.IdTransaccion +
                                   ",Customer=" + saleData.Customer + ",Amount=" + saleData.Amount + ",Date=" + saleData.Date + ",ReloadState=" + saleData.ReloadState +
                                   ",ReloadStateCode=" + saleData.ReloadStateCode + "},message=" + message + "}");
                }
                else
                {
                    logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [RECV-DATA] " + methodName + "Result {saleState={IdTransaction=,Customer=,Amount=,Date=,ReloadState=,ReloadStateCode=},message=" + message + "}");
                }

                #region se incluye obtiene el saldo en caso de ser necesario


                //Se realiza la validacion afuera del metodo GetBalance
                //con el fin de no manejar valores nulos en los metodos
                //y asignar algun valor al triburo StockBlance de ser necesario
                if (
                    _GetBalance &&
                    request.DeviceType == Movilway.API.Core.cons.ACCESS_POS
                    )
                {
                    response.StockBalance = GetBalance(request);
                }
            }
            catch (Exception ex)
            {
                logger.ErrorHigh(() => TagValue.New().MethodName("GetTransaction").Message(base.LOG_PREFIX + " ERROR BUSCANDO TRANSACCION CON REFERENCIA [" + request.ParameterValue + "]").Exception(ex));

                if (ex.InnerException != null)
                {
                    logger.ErrorHigh(() => TagValue.New().MethodName("GetTransaction").Message(base.LOG_PREFIX + " INNER EXCEPTION " + request.ParameterValue).Exception(ex.InnerException));
                }


                response = new GetTransactionResponseBody()
                {
                    ResponseCode          = 99,
                    ResponseMessage       = "Error inesperado consultando la transaccion, consulte a su administrador.",
                    TransactionID         = 0,
                    OriginalTransactionId = "",
                    Amount            = 0,
                    Recipient         = "",
                    TransactionDate   = DateTime.Now,
                    TransactionResult = 99,
                    TransactionType   = "",
                    Initiator         = "",
                    Debtor            = "",
                    Creditor          = ""
                };
            }
            #endregion


            return(response);
        }
예제 #19
0
 public abstract IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID);
예제 #20
0
        /// <summary>
        /// Actualiza un agente en el sistema, tanto en el funente principal como en comisiones
        /// Precondicion:
        /// -el agente a editar debe ser hijo del agente logeado en el sistema
        /// -los datos del agente estan completos
        /// -los datos de los accesos estan completos, no repetidos y disponibles en el sistema
        /// </summary>
        /// <param name="requestObject"></param>
        /// <param name="kinacuWS"></param>
        /// <param name="sessionID"></param>
        /// <returns></returns>
        /// <returns>Retorna el tipo IMovilwayApiResponse con el respectivo codigo de error y mensaje</returns>
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID)
        {
            CreateAgentResponseBody response = new CreateAgentResponseBody();

            try
            {
                if (sessionID.Equals("0"))
                {
                    return new CreateAgentResponseBody()
                           {
                               ResponseCode    = 90,
                               ResponseMessage = "error session",
                               TransactionID   = 0,
                               Errors          = new ErrorItems()
                               {
                                   new ErrorItem()
                                   {
                                       ErrorId = "90", ErrorDescription = "Session invalida"
                                   }
                               }
                           }
                }
                ;

                CreateAgentRequestBody request = requestObject as CreateAgentRequestBody;


                logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[UpdateAgentProvider]").Tag("[RCV-DATA] UpdateAgentProviderParameters ").Value(request));


                dynamic data = new { AgeId = request.AgeId, Login = request.AuthenticationData.Username };
                if (!Utils.HaveRelationWithAgent(data))
                {
                    response.ResponseCode = 90;

                    response.ResponseMessage = "ERROR DE PERMISOS";
                    response.TransactionID   = 0;
                    response.Errors          = new ErrorItems()
                    {
                        new ErrorItem()
                        {
                            ErrorId = "90", ErrorDescription = "NO TIENE PERMISOS PARA EDITAR ESTE REGISTRO"
                        }
                    };
                    return(response);
                }


                //validacion de edicion de productos
                //precondicion: se ha validado que el agente es padre del hijo
                int AgeLogId = Utils.GetAgentIdByAccessPosWeb(request.AuthenticationData.Username);

                // se descarta que el usuario logoeado no se ha el mismo que se esta editando
                // tener encuenta casos especiales
                bool CanEditProdutcs = AgeLogId != request.AgeId;


                var result = Utils.ValidateSoldChildComissions(request.AgeId, request.Commission);    //(request.AgeId, AgeLogId, request.Commission);
                if (!result.IsObjectValidResult())
                {
                    response.ResponseCode    = 100;
                    response.ResponseMessage = "[ERROR DE NEGOCIO] COMISION POR DEPOSITO";
                    response.Errors          = new ErrorItems()
                    {
                        new ErrorItem()
                        {
                            ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage
                        }
                    };
                    return(response);
                }



                int currentUserId = Utils.GetUserId(request.AuthenticationData.Username);
                MD5 md5           = new MD5CryptoServiceProvider();


                var reqAgent = new RequestAgent()
                {
                    age_id            = request.AgeId,
                    age_cuit          = request.RIF,
                    age_nombre        = request.AgentName,
                    age_razonsocial   = request.LegalName,
                    age_direccion     = request.Address,
                    age_entrecalles   = request.BetweenStreets,
                    age_ciu_id        = decimal.Parse(request.City),
                    age_tel           = request.Phone,
                    age_cel           = request.NumberIMEI,
                    age_email         = request.Email,
                    age_contacto      = request.ContactPerson,
                    age_subNiveles    = decimal.Parse(request.SubLevels),
                    age_pdv           = request.Pdv,
                    age_observaciones = request.Notes,
                    ct_id             = request.TaxCategory, //Categoria Tributaria
                    ta_id             = 1,                   // Tipo de agencia
                    sa_id             = request.SegmentId,   // segmento de la agencia

                    age_tipo = "SU",
                    age_autenticaterminal = "N",
                    // Se quita este valor por peticion del usuario
                    age_prefijosrest = string.Empty,
                    age_estado       = "AC",

                    age_comisionadeposito = request.CommissionableDeposits ? "S" : "N",
                    age_montocomision     = request.Commission,
                    //TODO NULL POINTER PROBLEMAS DE CULTIRA
                    limiteCredito                     = request.CheckingAccountCreditLimit.ToString(),
                    autorizacionAutomatica            = request.AutomaticAuthorization.ToString(),
                    quitaAutomatica                   = request.AutomaticReverse.ToString(),
                    generacionAutomatica              = request.AutomaticReposition.ToString(),
                    montoMinimoPorPedido              = request.MinimumOrderAmount.ToString(),
                    montoMaximoPorPedido              = request.MaximumOrderAmount.ToString(),
                    pedidoMaximoMensual               = request.MaximumMonthlyAmount.ToString(),
                    autorizacionAutomaticaMontoDiario = request.MaximumAuthorizedDailyAmount.ToString(),
                    recargaAsincronica                = request.AsynchronousTopup.ToString(),

                    comisionporventa = request.SalesCommission,

                    usr_nombre   = request.UserName1,
                    usr_apellido = request.UserLastName1,
                    acc_login    = request.AccessLogin1,

                    //segundo usuario
                    //TODO cada ves que se actualiza se extiende el periodo de valdiacion
                    acc_validityDate        = DateTime.Now.AddDays(360),
                    second_acc_validityDate = DateTime.Now.AddDays(360),
                    third_acc_validityDate  = DateTime.Now.AddDays(360),
                    // primer acceso segundo usuario
                    second_acc_login = request.AccessLogin2,


                    /*request.AccessType2.ToUpper() == "POS" ? 6 : request.AccessType2.ToUpper() == "WEB" ? 1 : request.AccessType2.ToUpper() == "POSWEB" ? 12 : request.AccessType2.ToUpper() == "USSD" ? 9 : request.AccessType2.ToUpper() == "SMS" ? 2 : 0*/


                    //segundo acceso segundo usuario
                    av_sc_ac_secondUser = request.AvailableSecondAccessSecondUser,
                    third_acc_login     = request.AccessLogin3,

                    usr_administrador = request.IsAdministrator2,
                    grpId             = request.Group,
                    //Valores Originales
                    acc_cambiopassword        = "******",
                    second_acc_cambiopassword = "******",
                    third_acc_cambiopassword  = "******",


                    usr_id_modificacion = currentUserId,
                    age_modificacion    = AgeLogId
                                          //
                                          //TODO
                                          //acc_cambiopassword = "",
                                          //second_acc_cambiopassword = ""
                                          //
                };

                reqAgent.second_tac_id = Utils.GetAccessTypeCode(request.AccessType2);

                if (!string.IsNullOrEmpty(request.AccessType3))
                {
                    reqAgent.third_tac_id = Utils.GetAccessTypeCode(request.AccessType3);
                }

                if (!string.IsNullOrEmpty(request.AccessPassword1))
                {
                    reqAgent.acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword1)));
                }

                if (!string.IsNullOrEmpty(request.AccessPassword2))
                {
                    reqAgent.second_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword2)));
                }

                if (!string.IsNullOrEmpty(request.AccessPassword3))
                {
                    reqAgent.third_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword3)));
                }

                reqAgent.productos = new List <RequestAgent.Product>();

                request.ProductsCommission.ForEach(p =>
                {
                    reqAgent.productos.Add(new RequestAgent.Product()
                    {
                        prdId = p.ProductId, comision = p.Commission
                    });
                });



                result = Utils.UpdateAgent(reqAgent, CanEditProdutcs);
                response.ResponseCode    = result.ResponseCode;
                response.ResponseMessage = result.ResponseMessage;
                response.TransactionID   = 0;

                if (!result.IsObjectValidResult())
                {
                    response.ResponseCode    = response.ResponseCode;
                    response.ResponseMessage = _GenericError;

                    var errors = new ErrorItems();
                    //errores del result
                    errors.Add(new ErrorItem()
                    {
                        ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage
                    });

                    response.Errors = errors;
                }
            }
            catch (Exception ex)
            {
                //cambiar error general erro inesperado

                response.ResponseCode    = 500;
                response.ResponseMessage = _GenericError;
                response.TransactionID   = 0;
                response.Errors          = new ErrorItems()
                {
                    new ErrorItem()
                    {
                        ErrorId = "90", ErrorDescription = ex.Message
                    }
                };

                string mensaje = String.Concat("[API] " + base.LOG_PREFIX + "[UpdateAgentProvider] ", ". Exception: ", ex.Message, ". ", ex.StackTrace);
                logger.ErrorLow(mensaje);
            }

            logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX).Tag("[UpdateAgentProviderResult]").Value(response));
            return(response);
        }
        public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID)
        {
            GetLastTransactionsRequestBody  request  = requestObject as GetLastTransactionsRequestBody;
            GetLastTransactionsResponseBody response = null;

            logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetLastTransactionsProvider] [SEND-DATA] lastTransactionsRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",transCount=" + request.Count + ",agent=" + request.Agent + "}");

            lastTransactionsResponse utibaGetLastTransactionsResponse = utibaClientProxy.lastTransactions(new lastTransactionsRequest()
            {
                lastTransactionsRequestType = new lastTransactionsRequestType()
                {
                    sessionid   = sessionID,
                    device_type = request.DeviceType,
                    agent       = request.Agent,
                    transCount  = request.Count
                }
            });

            StringBuilder sb = new StringBuilder(), sb2;

            foreach (var transaction in utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList)
            {
                sb2 = new StringBuilder();
                foreach (var party in transaction.partiesReferenceIdList)
                {
                    sb2.Append("partiesReferenceIdList=" + party + ",");
                }
                if (sb2.Length > 0)
                {
                    sb2.Remove(sb2.Length - 1, 1);
                }

                sb.Append("transactionsList={transactionId=" + transaction.transactionId + ",transactionType=" + transaction.transactionType +
                          ",lastModified=" + transaction.lastModified + ",amount=" + transaction.amount + "," + sb2.ToString() + "},");
            }
            if (sb.Length > 0)
            {
                sb.Remove(sb.Length - 1, 1);
            }

            logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetLastTransactionsProvider] [RECV-DATA] lastTransactionsResponse " +
                           "{transid=" + utibaGetLastTransactionsResponse.lastTransactionsReturn.transid +
                           ",result=" + utibaGetLastTransactionsResponse.lastTransactionsReturn.result +
                           ",result_namespace=" + utibaGetLastTransactionsResponse.lastTransactionsReturn.result_namespace +
                           "," + sb.ToString() + "}");

            if (utibaGetLastTransactionsResponse != null)
            {
                response = new GetLastTransactionsResponseBody()
                {
                    ResponseCode    = Utils.BuildResponseCode(utibaGetLastTransactionsResponse.lastTransactionsReturn.result, utibaGetLastTransactionsResponse.lastTransactionsReturn.result_namespace),
                    ResponseMessage = utibaGetLastTransactionsResponse.lastTransactionsReturn.result_namespace,
                    TransactionID   = utibaGetLastTransactionsResponse.lastTransactionsReturn.transid
                };

                if (utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList != null &&
                    utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList.Length > 0)
                {
                    response.Transactions = new TransactionList();
                    foreach (Movilway.API.Utiba.TransactionSummary transaction in utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList)
                    {
                        DataContract.TransactionSummary currentTransactionSummary = new DataContract.TransactionSummary()
                        {
                            TransactionType       = Utils.GetTransactionTypeName(transaction.transactionType),
                            Amount                = transaction.amount,
                            LastTimeModified      = transaction.lastModified,
                            OriginalTransactionID = transaction.transactionId
                        };

                        if (transaction.partiesReferenceIdList != null && transaction.partiesReferenceIdList.Length > 0)
                        {
                            currentTransactionSummary.RelatedParties = new RelatedParties();
                            currentTransactionSummary.RelatedParties.AddRange(transaction.partiesReferenceIdList);
                        }
                        response.Transactions.Add(currentTransactionSummary);
                    }
                }
            }
            return(response);
        }
예제 #22
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            CreateAgentResponseBody response = new CreateAgentResponseBody();

            try
            {
                if (sessionID.Equals("0"))
                {
                    return new CreateAgentResponseBody()
                           {
                               ResponseCode    = 90,
                               ResponseMessage = "error session",
                               TransactionID   = 0,
                               Errors          = { new ErrorItem()
                                                   {
                                                       ErrorId = "90", ErrorDescription = "Session invalida"
                                                   } }
                           }
                }
                ;



                CreateAgentRequestBody request = requestObject as CreateAgentRequestBody;


                logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[CreateAgentProvider]").Tag("[SEND-DATA] createAgentParameters ").Value(request));



                int currentUserId = Utils.GetUserId(request.AuthenticationData.Username); /// OJO
                MD5 md5           = new MD5CryptoServiceProvider();



                var result = Utils.ValidateSoldChildComissions(request.AuthenticationData.Username, request.Commission);
                if (!result.IsObjectValidResult())
                {
                    response.ResponseCode = 100;

                    response.ResponseMessage = "[ERROR DE NEGOCIO] COMISION POR DEPOSITO";
                    response.Errors          = new ErrorItems()
                    {
                        new ErrorItem()
                        {
                            ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage
                        }
                    };
                    return(response);
                }

                var reqAgent = new RequestAgent()
                {
                    age_cuit          = request.RIF,
                    age_nombre        = request.AgentName,
                    age_razonsocial   = request.LegalName,
                    age_direccion     = request.Address,
                    age_entrecalles   = request.BetweenStreets,
                    age_ciu_id        = decimal.Parse(request.City),
                    age_tel           = request.Phone,
                    age_cel           = request.NumberIMEI,
                    age_email         = request.Email,
                    age_contacto      = request.ContactPerson,
                    age_subNiveles    = decimal.Parse(request.SubLevels),
                    age_pdv           = request.Pdv,
                    age_observaciones = request.Notes,

                    ct_id = request.TaxCategory == 0 ? 1 : request.TaxCategory, //Categoria Tributaria
                    ta_id = 1,                                                  //Tipo de agencia
                    sa_id = request.SegmentId == 0 ? 1 : request.SegmentId,     // segmento de la agencia

                    age_tipo = "SU",
                    age_autenticaterminal = "N",
                    age_estado            = "AC",
                    //Solicitud de operaciones no se debio cambiar
                    age_prefijosrest = "",

                    usr_id_modificacion = currentUserId,

                    age_comisionadeposito             = request.CommissionableDeposits ? "S" : "N",
                    age_montocomision                 = request.Commission,
                    limiteCredito                     = request.CheckingAccountCreditLimit.ToString(),
                    autorizacionAutomatica            = request.AutomaticAuthorization.ToString(),
                    quitaAutomatica                   = request.AutomaticReverse.ToString(),
                    generacionAutomatica              = request.AutomaticReposition.ToString(),
                    montoMinimoPorPedido              = request.MinimumOrderAmount.ToString(),
                    montoMaximoPorPedido              = request.MaximumOrderAmount.ToString(),
                    pedidoMaximoMensual               = request.MaximumMonthlyAmount.ToString(),
                    autorizacionAutomaticaMontoDiario = request.MaximumAuthorizedDailyAmount.ToString(),
                    recargaAsincronica                = request.AsynchronousTopup.ToString(),
                    comisionporventa                  = request.SalesCommission,

                    usr_nombre   = request.UserName1,
                    usr_apellido = request.UserLastName1,

                    acc_login    = request.AccessLogin1,
                    acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword1))),
                    //segundo usuario
                    acc_validityDate        = DateTime.Now.AddDays(360),
                    second_acc_validityDate = DateTime.Now.AddDays(360),
                    third_acc_validityDate  = DateTime.Now.AddDays(360),
                    // primer acceso segundo usuario
                    second_acc_login    = request.AccessLogin2,
                    second_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword2))),
                    /*request.AccessType2.ToUpper() == "POS" ? 6 : request.AccessType2.ToUpper() == "WEB" ? 1 : request.AccessType2.ToUpper() == "POSWEB" ? 12 : request.AccessType2.ToUpper() == "USSD" ? 9 : request.AccessType2.ToUpper() == "SMS" ? 2 : 0*/
                    second_tac_id = Utils.GetAccessTypeCode(request.AccessType2),



                    usr_administrador = request.IsAdministrator2,
                    grpId             = request.Group,
                    //Valores Originales
                    acc_cambiopassword        = "******",
                    second_acc_cambiopassword = "******",
                    third_acc_cambiopassword  = "******"
                                                //

                                                //TODO
                                                //acc_cambiopassword = "",
                                                //second_acc_cambiopassword = ""
                                                //
                };

                //segundo acceso segundo usuario
                if (reqAgent.av_sc_ac_secondUser = request.AvailableSecondAccessSecondUser)
                {
                    reqAgent.third_acc_login    = request.AccessLogin3;
                    reqAgent.third_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword3)));
                    reqAgent.third_tac_id       = Utils.GetAccessTypeCode(request.AccessType3);
                }



                foreach (ProductCommision item in request.ProductsCommission)
                {
                    reqAgent.productos.Add(new RequestAgent.Product()
                    {
                        prdId = item.ProductId, comision = item.Commission
                    });
                }


                ResponseAgent responseAgent = Utils.CreateAgent(reqAgent);

                //bool isSuccessful = String.IsNullOrEmpty(request.RIF) ? false : request.RIF.EndsWith("0");
                bool isSuccessful = int.Parse(responseAgent.response_code) == 0;

                response.ResponseCode    = isSuccessful ? 0 : 1;
                response.ResponseMessage = isSuccessful ? "OK" : "ER";
                response.TransactionID   = 0;
                response.AgeId           = responseAgent.AgeId;

                if (!isSuccessful)
                {
                    var errors = new ErrorItems();
                    errors.Add(new ErrorItem()
                    {
                        ErrorId = responseAgent.response_code, ErrorDescription = responseAgent.message
                    });
                    //var errors = new ErrorItems();
                    //for (int i = 0; i < new Random().Next(1, 6); i++)
                    //    errors.Add(new ErrorItem() { ErrorId = i.ToString(), ErrorDescription = "Error random " + i });
                    response.Errors = errors;
                }

                logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[CreateAgentProvider] [RECV-DATA] CreateAgentResult {response={" + response + "}}");
            }
            catch (Exception ex)
            {
                response.ResponseCode    = 500;
                response.ResponseMessage = _GenericError;
                response.TransactionID   = 0;
                response.Errors          = new ErrorItems()
                {
                    new ErrorItem()
                    {
                        ErrorId = "90", ErrorDescription = ex.Message
                    }
                };

                string mensaje = String.Concat("[API] " + base.LOG_PREFIX + "[CreateAgentProvider] ", ". Exception: ", ex.Message, ". ", ex.StackTrace);
                logger.ErrorLow(mensaje);
            }
            return(response);
        }
예제 #23
0
        /// <summary>
        /// Inicia la ejecucion del metodo
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest request)
        {
            IMovilwayApiResponse response = null;


            //DATOS DE AUTENTICACION
            try
            {
                #region antes
                // PREFIX
                //try
                //{
                //    LOG_PREFIX = HttpContext.Current.Session["LOG_PREFIX"].ToString() + "[" + new Random(DateTime.Now.Millisecond * 3).Next(100000000, 999999999) + "] ";
                //}
                //catch (Exception)
                //{
                //    LOG_PREFIX = "";
                //}
                #endregion
                InitPrefix();

                #region log data
                //try
                //{
                //    logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [INPUT] UserInfo {IP=" + HttpContext.Current.Request.UserHostAddress + ",Username="******"} " + request.ToString());
                //}
                //catch (Exception)
                //{
                //    logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [INPUT] UserInfo {IP=" + "NULL" + ",Username="******"} " + request.ToString());
                //}
                #endregion
                PrintLoginValues(request);

                #region antes
                //if (request.DeviceType == cons.ACCESS_H2H)
                //{
                //    if (!NetWorkSecurity.IpIsWithinRangeH2H(HttpContext.Current.Request.UserHostAddress))
                //    {


                //        string message = String.Concat("[LA IP NO ESTA REGISTRADA EN EL RANGO PERMITIDO H2H (", HttpContext.Current.Request.UserHostAddress, ")]");
                //        logger.ErrorHigh(() => TagValue.New().Message("[ERROR DE PERMISOS H2H]").Message(message).Tag("[PARA ACCESO]").Value(request.AuthenticationData));
                //        throw new Exception(message);
                //    }
                //}
                #endregion
                //si no se activa la optimizacion de seguridad
                //siempre ejecuta las validaciones de seguridad
                //if (!ApiConfiguration.API_SECURE_OPTIMIZATION)
                SecureValidation(request);


                //la restriccion se mantiene con el fin  de que se pueda volver a validar el tiempo del session ID
                String sessionID = null;
                if (!(request is GetSessionRequestBody))
                {
                    sessionID = GetSessionID(request);
                }


                SaleInterface kinacuWS = new SaleInterface();
                // CONDIGURACION INTERFAZ
                int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]);
                kinacuWS.Timeout = timeOutSeconds * 1000;

                response = PerformKinacuOperation(request, kinacuWS, sessionID);
                // no deberia lanzar second request deberia solo se responsabilidad
                #region secondrequest
                //if (!ValidateNumberOfExecution(request))
                //    response = PerformKinacuOperation(request, kinacuWS, sessionID);
                //else
                //{


                //        if (_delegateSecondExecution == null)
                //            throw new Exception("NO SE HA DEFINIDO EL MANEJADOR PARA LA SEGUNDA PETICION");

                //        bool isNew = false;

                //        Func<int> callback = delegate()
                //        {
                //            logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS NEW]");
                //            isNew = true;
                //            return 1;
                //        };

                //        int hascode = request.GetHashCode();
                //        logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST VALIDATION] [" + hascode + "] "+_cacheRequest.ToString());
                //    //Action<object,object> oncache= delegate(object k , object v)
                //    //    {
                //    //        logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS DOUBLE]");
                //    //        isNew = false;
                //    //    };


                //         _cacheRequest.GetValue<int>(hascode, callback);//, oncache);



                //        if (isNew)
                //        {
                //               response = PerformKinacuOperation(request, kinacuWS, sessionID);
                //        }
                //        else
                //        {
                //            logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [SecondExecution]");
                //            response = _delegateSecondExecution (request, kinacuWS, sessionID);
                //        }



                //}
                #endregion

                if (!(request is GetSessionRequestBody))
                {
                    if (bool.Parse(ConfigurationManager.AppSettings["LogoffAuto"] ?? "true"))
                    {
                        logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [SEND-DATA] logoffParameters {userid=" + sessionID + "}");
                        kinacuWS.LogOff(int.Parse(sessionID));
                        logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [RECV-DATA] logoffResult {nothing}");
                    }
                }
                logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [OUTPUT] " + response.ToString());
            }
            catch (Exception e)
            {
                logger.ErrorLow("[API] " + LOG_PREFIX + "[KinacuProvider] [EXCEPTION] Exception trying to serve KINACU Operation {message=" + e.Message + ",stackTrace=" + e.StackTrace + "}");
                //SE DELEGA EL MANEJO DE LA EXPECION A QUIEN LO INVOCA GENERALMENTE SERVICEEXECUTIONDELEGATOR
                throw;

                #region intento de respuesta anterior
                //Type a = this.GetType().GetMethod("PerformOperation").ReturnType;
                //response = new AGenericApiResponse() { ResponseCode = 99, ResponseMessage = e.Message, TransactionID = 0 };
                //Type name = MethodBase.GetCurrentMethod().GetType();
                //ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
                #endregion
            }

            return(response);
        }
예제 #24
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new GetScoreResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0,
                           Score           = new Score()
                       }
            }
            ;

            GetScoreRequestBody  request  = requestObject as GetScoreRequestBody;
            GetScoreResponseBody response = null;

            if (sessionID.Equals("0"))
            {
                return response = new GetScoreResponseBody()
                {
                           ResponseCode    = 99,
                           ResponseMessage = "Error de login",
                           TransactionID   = new Random().Next(100000, 999999),
                           Score           = null
                }
            }
            ;

            string agentId = "";
            bool   isChild = false;

            if (!String.IsNullOrEmpty(request.Agent))
            {
                var getChildListResponse = new ServiceExecutionDelegator
                                           <GetChildListResponseBody, GetChildListRequestBody>().ResolveRequest(
                    new GetChildListRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username = request.AuthenticationData.Username,
                        Password = request.AuthenticationData.Password
                    },
                    DeviceType = request.DeviceType,
                    Agent      = request.AuthenticationData.Username,
                    Platform   = "1"
                }, ApiTargetPlatform.Kinacu, ApiServiceName.GetChildList);

                if (getChildListResponse.ChildList != null && getChildListResponse.ChildList.Count(ch => ch.Agent == request.Agent) > 0)
                {
                    agentId = request.Agent;
                    isChild = true;
                }
            }

            if (!isChild)
            {
                agentId = new Provider.IBank.Utils().GetAgentId(request.AuthenticationData.Username).ToString();
            }

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetScoreProvider] [SEND-DATA] getScoreParameters {agentId=" + agentId + "}");

            response = new GetScoreResponseBody()
            {
                ResponseCode    = 0,
                ResponseMessage = "exito",
                TransactionID   = new Random().Next(100000, 999999),
                Score           = Utils.GetScore(agentId)
            };

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetScoreProvider] [RECV-DATA] getScoreResult {result{Score{BranchId=" + response.Score.BranchId + ",BranchName=" + response.Score.BranchName +
                           ",LotteryType=" + response.Score.LotteryType + ",Confirmed=" + response.Score.Confirmed + ",YearToDate=" + response.Score.YearToDate + ",CurrentMonth=" + response.Score.CurrentMonth +
                           ",Standard=" + response.Score.Standard + ",Bonus=" + response.Score.Bonus + ",Behaviour=" + response.Score.Behaviour + ",NetworkStandard=" + response.Score.NetworkStandard +
                           ",NetworkBonus=" + response.Score.NetworkBonus + ",NetworkBehaviour=" + response.Score.NetworkBehaviour + ",Questionnaire=" + response.Score.Questionnaire + "}}}");

            return(response);
        }
    }
}
예제 #25
0
        private String GetSessionID(IMovilwayApiRequest request)
        {
            if (request is TopUpRequestBody)
            {
                try
                {
                    //No hacer resolveRquestsi no ResoveRquestScure
                    //TODO CACHE NO VALIDO NECESITO CACHE POR SESSION
                    Func <string> callback = delegate()
                    {
                        //logger.InfoLow(String.Concat("[API] ", LOG_PREFIX, " EJECUTANDO CALLBACK DE CACHE ", request.AuthenticationData.Username));
                        logger.InfoLow(String.Concat("[API] ", LOG_PREFIX, " Session Not Found in Cache ", request.AuthenticationData.Username));


                        //try
                        //{
                        //    var copyrequest = Reflection.FactoryObject<ASecuredApiRequest>(request.GetType());
                        //    copyrequest.AuthenticationData = new AuthenticationData();
                        //    copyrequest.AuthenticationData.Username = request.AuthenticationData.Username;
                        //    copyrequest.AuthenticationData.Password = request.AuthenticationData.Password;
                        //    copyrequest.AuthenticationData.SessionID = request.AuthenticationData.SessionID;
                        //}
                        //catch (Exception ex)
                        //{

                        //}

                        return(GetSessionIDEL(request));
                    };

                    Action <Object, Object> accion = delegate(Object key2, Object val)
                    {
                        logger.InfoLow(String.Concat("[API] ", LOG_PREFIX, " Session Found in Cache [", key2, "]"));
                    };



                    String llave = String.Concat(request.AuthenticationData.Username, " ", request.AuthenticationData.Password);//String.Concat(cons.CACHE_SESSION_PREFIX, request.AuthenticationData.Username);  //String.Concat(request.AuthenticationData.Username," " ,request.AuthenticationData.Password);// "llaveunica";//debeser el tokken
                    //HttpContext.Current.Session.SessionID;

                    string ID = _cache.GetValue <String>(llave, callback, accion);
                    return(ID);
                }
                catch (Exception ex)
                {
                    //DESACTIVAR CACHE
                    logger.ErrorHigh(String.Concat("[API] ", LOG_PREFIX, "[KinacuProvider] [EXCEPTION] [", ex.GetType().Name.ToUpper(), "] ACCEDIENDO AL CACHE VALIDANDO SECURITY {message=", ex.Message, ",stackTrace=", ex.StackTrace, "}"));
                    throw;
                }
            }
            else
            {
                return(GetSessionIDEL(request, LOG_PREFIX));
            }


            //IMPLEMENTACION ANTIGUA
            #region Implementacion antigua
            //string username = request.AuthenticationData.Username, platform = request.Platform ?? ConfigurationManager.AppSettings["DefaultPlatform"];
            //var cacheObj = new LoginDataCache();

            //if (request != null)
            //{
            //    //ObjectCache cache = MemoryCache.Default;
            //    //var cacheKey = username + platform;
            //    //
            //    //ProviderLogger.InfoLow("*** Chequeo de cache ***");
            //    //foreach (var item in cache)
            //    //    ProviderLogger.InfoLow(item.Key + ": " + item.Value);
            //    //ProviderLogger.InfoLow("************************");

            //    if (!String.IsNullOrEmpty(request.AuthenticationData.SessionID))
            //    {
            //        int userId;
            //        long timeOut;
            //        string userName, userLastName, userAddress, message;
            //        ManagementInterface managementWS = new ManagementInterface();

            //        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
            //        {

            //            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
            //               }, 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);
            //            }


            //            //SI NO REALIZO RETURN ENTONCES LANZA LA EXCEPCION
            //            throw new Exception("DATOS DE AUTENTICACION INVALIDOS");

            //        }

            //    }
            //    else
            //    {
            //        //if (cache.Contains(cacheKey))
            //        //    cacheObj = (LoginDataCache)cache.Get(cacheKey);
            //        //else
            //        //{
            //        //TODO CACHE
            //        var getSessionResponse = new ServiceExecutionDelegator
            //            <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest(
            //                new GetSessionRequestBody()
            //                {
            //                    Username = request.AuthenticationData.Username,
            //                    Password = request.AuthenticationData.Password,
            //                    DeviceType = request.DeviceType
            //                }, 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);


            //        //SI NO REALIZO RETURN ENTONCES LANZA LA EXCEPCION
            //        throw new Exception("DATOS DE AUTENTICACION INVALIDOS");

            //        /*var newCacheObject = new LoginDataCache()
            //        {
            //            UserName = username,
            //            Platform = platform,
            //            Token = getSessionResponse.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);
            //        ProviderLogger.InfoHigh("cacheKey: " + cacheKey + " - newCacheObject: {" + newCacheObject.UserName + "," + newCacheObject.Platform + "," + newCacheObject.Token + "} - cacheItemPolicy: " + cacheItemPolicy.AbsoluteExpiration);

            //        cacheObj = newCacheObject;*/
            //        //}
            //    }
            //}
            //return "error";
            #endregion
        }
예제 #26
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new GetAgentInfoResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0,
                           AgentInfo       = new AgentInfo()
                       }
            }
            ;

            GetAgentInfoRequestBody  request  = requestObject as GetAgentInfoRequestBody;
            GetAgentInfoResponseBody response = null;

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [SEND-DATA] getAgentInfoParameters {agentReference=" + request.Agent + "}");

            AgentInfo agentInfo      = new AgentInfo();
            string    validatedEmail = "";

            if (request.SearchById ?? false)
            {
                agentInfo = Utils.GetAgentInfoById(request.AgentId);

                validatedEmail = Utils.GetValidatedEmailById(request.AgentId);
            }
            else
            {
                agentInfo      = Utils.GetAgentInfo(request.Agent);
                validatedEmail = Utils.GetValidatedEmailByLogin(request.Agent);
            }

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [RECV-DATA] getAgentInfoResult {response={" + DataContract.Utils.logFormat(agentInfo) + "}}");

            if (agentInfo.BranchID >= 0) //userInfo && retailerInfo)
            {
                response = new GetAgentInfoResponseBody()
                {
                    ResponseCode    = 0,
                    ResponseMessage = "exito",
                    TransactionID   = 0,
                    AgentInfo       = new AgentInfo()
                    {
                        Agent          = request.Agent,
                        NationalIDType = agentInfo.NationalIDType,
                        NationalID     = agentInfo.NationalID,
                        Address        = agentInfo.Address,
                        Name           = agentInfo.Name,
                        LegalName      = agentInfo.LegalName,
                        Email          = String.IsNullOrEmpty(validatedEmail) ? agentInfo.Email : validatedEmail,

                        // Elementos privados
                        AgentID  = agentInfo.AgentID,
                        OwnerID  = agentInfo.OwnerID,
                        BranchID = agentInfo.BranchID,

                        // Grupo de comisiones nuevo
                        CommissionGroups = agentInfo.CommissionGroups,

                        // Nuevo subniveles
                        SubLevel = agentInfo.SubLevel,

                        // Nuevo PDV Id
                        PDVID = agentInfo.PDVID,

                        PhoneNumber = agentInfo.PhoneNumber,

                        TaxCategory   = agentInfo.TaxCategory,
                        TaxCategories = agentInfo.TaxCategories,

                        SegmentId   = agentInfo.SegmentId,
                        SegmentList = agentInfo.SegmentList
                    }
                };
            }
            else
            {
                response = new GetAgentInfoResponseBody
                {
                    ResponseCode    = 99,
                    ResponseMessage = "El agente consultado no existe"
                };
            }

            return(response);
        }
    }
예제 #27
0
 public abstract IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID);
예제 #28
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID)
        {
            if (sessionID.Equals("0"))
            {
                return new GetLoanTokenResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0
                       }
            }
            ;

            GetLoanTokenRequestBody request = requestObject as GetLoanTokenRequestBody;

            //string message;

            logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetLoanTokenProvider] [SEND-DATA] GetLoanTokenParameters {UserId=" + sessionID + "}");


            string id = Utils.GetAgentIdByAccessPosWeb(request.AuthenticationData.Username).ToString();

            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            HttpResponseMessage webResponse = new HttpResponseMessage();
            string data  = "";
            Token  token = new Token()
            {
                token = "nill"
            };

            logger.InfoLow(String.Concat("[MO] [SEND-DATA] agentId=", id));

            webResponse = client.PostAsync(String.Concat(ConfigurationManager.AppSettings["URL_MO"], "token"), new StringContent("{\"external_id\":" + id + "}", Encoding.UTF8, "application/json")).Result;

            logger.InfoLow(String.Concat("[MO] [RESPONSE-CODE] HttpStatusCode: ", (int)webResponse.StatusCode));

            JavaScriptSerializer JSserializer = new JavaScriptSerializer();

            GetLoanTokenResponseBody response;

            try
            {
                data = webResponse.Content.ReadAsStringAsync().Result;

                if (webResponse.IsSuccessStatusCode)
                {
                    token = JSserializer.Deserialize <Token>(data);

                    logger.InfoLow(String.Concat("[MO] [RESPONSE-DATA] Raw Data: ", data));
                    logger.InfoLow(String.Concat("[MO] [RESPONSE-DATA] token: ", token.token));

                    response = new GetLoanTokenResponseBody()
                    {
                        ResponseCode    = 0,
                        ResponseMessage = "Exito",
                        TransactionID   = new Random().Next(100000, 999999),
                        Token           = token.token
                    };
                }
                else
                {
                    logger.InfoLow(String.Concat("[MO] [RESPONSE-DATA] ERROR Raw Data: ", data));
                    response = new GetLoanTokenResponseBody()
                    {
                        ResponseCode    = 98,
                        ResponseMessage = "Error",
                        TransactionID   = new Random().Next(100000, 999999),
                        Token           = ""
                    };
                }
            }
            catch (Exception ex)
            {
                logger.ErrorLow(String.Concat(" [RECEIVED-DATA] Error recibiendo la data. ", ex.InnerException));
                response = new GetLoanTokenResponseBody()
                {
                    ResponseCode    = 99,
                    ResponseMessage = "Excepcion",
                    TransactionID   = new Random().Next(100000, 999999),
                    Token           = ""
                };
            }

            //long balance = kinacuWS.GetAccountBalance(int.Parse(sessionID), out message);

            logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetLoanTokenProvider] [RECV-DATA] GetLoanTokenResult {response=Exito,message=ok,token=eyJjdXN0b21lcl9pZCI6MTU4fQ.DnrUTA.XHKdo08zgauO6JjwP-T2G6VjX6I}");


            return(response);
        }
    }
예제 #29
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID)
        {
            string providerName            = "DebitNoteProvider";
            DebitNoteRequestBody  request  = requestObject as DebitNoteRequestBody;
            DebitNoteResponseBody response = new DebitNoteResponseBody()
            {
                ResponseCode    = 90,
                ResponseMessage = "Error inesperado",
                TransactionID   = 0
            };

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [SEND-DATA] DebitNoteProvider {AgentId=" + request.AgentId + ",Amount=" + request.Amount + ",Comment=" + request.Comment + ",SupportDocument=" + request.SupportDocument + "}");

            if (sessionID.Equals("0"))
            {
                response.ResponseMessage = "Error de sesion";
                logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [RECV-DATA] DebitNoteResult {response={" + response + "}}");
                return(response);
            }

            API.Utils.KinacuDb db = new API.Utils.KinacuDb();

            do
            {
                SqlConnection  connection = Movilway.API.Utils.Database.GetKinacuDbConnection();
                SqlTransaction trx        = null;
                bool           success    = false;

                try
                {
                    connection.Open();
                    db.db = connection;

                    InfoAgente originador = db.GetInfoAgente(null, request.AuthenticationData.Username);
                    InfoAgente agencia    = db.GetInfoAgente(request.AgentId);

                    if (agencia == null || agencia.OwnerId != originador.BranchId)
                    {
                        response.ResponseMessage = "Agencia inválida";
                        break;
                    }

                    trx = connection.BeginTransaction();
                    db.databaseTransaction = trx;

                    string comentario = string.Concat(
                        "Agente ",
                        originador.BranchId,
                        ": ",
                        string.IsNullOrEmpty(request.SupportDocument) ? string.Empty : string.Concat("Comp. ", request.SupportDocument, "-"),
                        request.Comment);

                    int id = db.CrearMovimientoCuentaCorriente((int)agencia.BranchId, request.Amount, comentario, false, Core.cons.TtrIdMovimientoCuentaCorrienteNotaDebito);
                    if (id != 0)
                    {
                        success = true;
                        response.ResponseCode    = 0;
                        response.ResponseMessage = string.Empty;
                        response.TransactionID   = id;

                        db.InsertarMovimientoAuditoria((int)originador.BranchId, null, comentario, id, "FINANCIERO", "DECREMENTO");

                        trx.Commit();
                        // trx.Rollback();
                        trx.Dispose();
                        trx = null;
                        db.databaseTransaction = null;
                    }
                }
                catch (Exception ex)
                {
                    ProviderLogger.ExceptionLow(() => TagValue.New()
                                                .MethodName(providerName)
                                                .Exception(ex));
                }
                finally
                {
                    if (!success && trx != null)
                    {
                        try
                        {
                            trx.Rollback();
                        }
                        catch (Exception)
                        {
                        }
                    }

                    try
                    {
                        connection.Close();
                    }
                    catch (Exception)
                    {
                    }
                }
            }while (false);

            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [RECV-DATA] DebitNoteResult {response={" + response + "}}");
            return(response);
        }
예제 #30
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            TransferCommissionRequestBody  request  = requestObject as TransferCommissionRequestBody;
            TransferCommissionResponseBody response = null;

            string rootagency = ConfigurationManager.AppSettings["rootagency"] ?? "4";

            int    sourceUserId = 0, recipientAgentId = 0;
            string accessReceiver = "";
            bool   requestHasPDV  = !String.IsNullOrEmpty(request.RecipientPdv);


            //LA AGENCIA RAIZ PUEDE TRANSFERIR UNA COMISION AL PDV
            //LA AGENCIA RAIZ BUSCA EL PADRE Y HACE QUE EL PADRE TRANSFIERA LA COMISION

            if (sessionID.Equals("0"))
            {
                response = new TransferCommissionResponseBody()
                {
                    ResponseCode    = requestHasPDV ? 3 : 90,
                    ResponseMessage = requestHasPDV ? "ID Inactivo" : "error session",
                    TransactionID   = 0,
                    StockBalance    = 0m
                };

                response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                return(response);
            }

            try
            {
                sourceUserId = new IBank.Utils().GetUserId(request.AuthenticationData.Username);
            }
            catch (Exception)
            {
                response = new TransferCommissionResponseBody()
                {
                    ResponseCode    = 99,
                    ResponseMessage = "ERROR OBTENIENDO USUARIO ID",
                    TransactionID   = 0,
                    StockBalance    = 0m
                };

                return(response);
            }


            int  recipientId        = 0;
            bool recipientIsNumeric = int.TryParse(request.Recipient, out recipientId);


            if (!recipientIsNumeric && String.IsNullOrEmpty(request.RecipientPdv))
            {
                response = new TransferCommissionResponseBody()
                {
                    ResponseCode    = 99,
                    ResponseMessage = "RecipientPdv NO PUEDE SER VACIO",
                    TransactionID   = 0,
                    StockBalance    = 0m
                };

                return(response);
            }


            if (recipientIsNumeric)
            {
                recipientAgentId = recipientId;
            }

            if (!recipientIsNumeric)
            {
                try
                {
                    recipientAgentId = new IBank.Utils().GetAgentIdByPdv(request.RecipientPdv);
                    accessReceiver   = request.Recipient;
                }
                catch (Exception ex)
                {
                    //if (requestHasPDV)
                    //    throw e;
                    //else
                    return(new TransferCommissionResponseBody()
                    {
                        ResponseCode = 3,
                        ResponseMessage = "PDV Inactivo",
                        TransactionID = 0,
                        StockBalance = 0m,
                        ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss")
                    });
                }
            }

            if (recipientAgentId != 0)
            {
                request.Recipient = recipientAgentId.ToString();
            }



            int sourceAgentId = new IBank.Utils().GetAgentId(request.AuthenticationData.Username);

            bool isChild = false;


            IBank.Utils.TransferInfo info = new IBank.Utils.TransferInfo();

            info.OverrideRequestCode = request.Code > 0? request.Code: 501;
            info.OverrideReverseCode = 205;

            logger.InfoHigh(LOG_PREFIX + " get agent data ");
            //Ariel 2021-Ma-09 Comentado
            // var agentinfo = Utils.GetAgentData(base.LOG_PREFIX, recipientAgentId);
            logger.InfoHigh(LOG_PREFIX + " agent data ok");


            switch (request.TransferRequestType)
            {
            case TransferRequestType.FromParentToBranch:



                if (sourceAgentId.ToString() == rootagency)
                {
                    isChild = true;

                    // seleccionar agencia padre y usuario


                    //Ariel 2021-Ma-09 Comentado asignamos 0
                    info.AgentParent        = 0; // Convert.ToInt32(agentinfo["age_id_sup"]);
                    info.UserTransacctionId = sourceUserId;

                    // info.AgentParent = (int) agentinfo.AgentID;
                }
                else
                {
                    // validar si la agencia es padre

                    //Ariel 2021-Ma-09 Comentado asignamos 0
                    info.AgentParent        = 0;// Convert.ToInt32(agentinfo["age_id_sup"]);
                    info.UserTransacctionId = sourceUserId;

                    if (info.AgentParent != sourceAgentId)
                    {
                        response = new TransferCommissionResponseBody()
                        {
                            Fee             = 0,
                            ResponseCode    = 99,
                            ResponseMessage = "No puede hacer asginacion de comision a una agencia que no es hija directa.",
                            //ResponseCode = 90,
                            //ResponseMessage = "Distribución de Saldo Fallida, agencia destino igual a agencia origen",
                            TransactionID = 0
                        };
                        return(response);
                    }
                }

                break;
            }



            if (sourceAgentId == recipientAgentId)
            {
                response = new TransferCommissionResponseBody()
                {
                    Fee = 0,
                    // ResponseCode = requestHasPDV ? 3 : 90,
                    // ResponseMessage = requestHasPDV ? "ID Inactivo" : "Distribución de Saldo Fallida, agencia destino igual a agencia origen",
                    ResponseCode    = 90,
                    ResponseMessage = "Comision Fallida, agencia destino igual a agencia origen",


                    //ResponseCode = 90,
                    //ResponseMessage = "Distribución de Saldo Fallida, agencia destino igual a agencia origen",
                    TransactionID = 0
                };
                // if (requestHasPDV)
                response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                return(response);
            }



            bool isNegativeAmount = false;
            bool acceptReverse    = false;


            if (request.Amount < 0)
            {
                isNegativeAmount = true;
                acceptReverse    = new IBank.Utils().CheckReverse(request.Recipient);
            }



            if ((isChild && !isNegativeAmount && request.DBTransferIfChild) || (!isChild && !isNegativeAmount) || (isChild && isNegativeAmount && acceptReverse))
            {
                // Acá resultó NO ser hijo(o hijo pero no se quiere afectar cta corriente), así que procedo con la distribución vía SP



                string   autorization = "", messageOut = "", responseCode = "99";
                DateTime myNow = Utils.GetLocalTimeZone();

                logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bCommissionParameters {info=" + info.ToString() + "} {agent_reciver=" + request.Recipient +
                               ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) +
                               ",reference_number=" + request.ExternalTransactionReference);              // + ",date=" + myNow + "}");

                //Se valida que el maximo a transferir si es hijo no exceda el límite de crédito (Condición Proesa)
                if (isChild && !isNegativeAmount && request.DBTransferIfChild)
                {
                    //Ariel 2021-Ma-09 Comentado  devolvemos 0
                    decimal maxCredit = 0;//Utils.GetAgentMaxCreditAvailable(request.Recipient);
                    if (request.Amount > maxCredit)
                    {
                        logger.ErrorHigh(base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bCommission El monto Excede el máximo de crédito disponible Amount:" + request.Amount + " Limite Credito: " + maxCredit);
                        return(new TransferCommissionResponseBody()
                        {
                            ResponseCode = 99,
                            ResponseMessage = "EL MONTO EXCEDE EL LIMITE DE CREDITO CONFIGURADO",
                            TransactionID = 0,
                            StockBalance = 0m
                        });
                    }
                }


                //decimal newAmount = 0m;
                var distributionResponse = new IBank.Utils().transferb2bCommission(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode, info); //, ref newAmount);

                logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[transferb2bCommission] [RECV-DATA] createCommissionResult {response=" + distributionResponse +
                               ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}");

                if (int.Parse(responseCode ?? "99") == 0)
                {
                    response = new TransferCommissionResponseBody()
                    {
                        Fee          = 0,
                        ResponseCode = 0,
                        //ResponseMessage = requestHasPDV ? "activado" : messageOut,
                        ResponseMessage = messageOut,
                        TransactionID   = int.Parse(autorization)
                    };
                    // if (requestHasPDV)
                    response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                }
                else
                {
                    response = new TransferCommissionResponseBody()
                    {
                        Fee             = 0,
                        ResponseCode    = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"),
                        ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut,
                        TransactionID   = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization)
                    };
                    // if (requestHasPDV)
                    response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                }
            }
            else if (!isChild && isNegativeAmount)
            {
                // TODO NEW CONDITION TO MO - Done

                int[] branchsAllowed = Array.ConvertAll <string, int>(ConfigurationManager.AppSettings["ReversesBranchesAllowed"].Split(','), int.Parse);

                if (branchsAllowed.Contains(sourceAgentId))
                {
                    // TODO Check the debt_amount
                    var debtAmount = Utils.GetTotalDebt(request.Recipient);
                    logger.InfoLow("[MO] " + base.LOG_PREFIX + "[MOApiProvider] [RECV-DATA] totalDebtAmount {response=" + debtAmount + "}");

                    if (Math.Abs(request.Amount) <= debtAmount)
                    {
                        // Mismo código que arriba
                        string   autorization = "", messageOut = "", responseCode = "99";
                        DateTime myNow = Utils.GetLocalTimeZone();

                        logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters {agent_reciver=" + request.Recipient +
                                       ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) +
                                       ",reference_number=" + request.ExternalTransactionReference + ",date=" + myNow + "}");

                        //decimal newAmount = 0m;
                        var distributionResponse = new IBank.Utils().transferb2b(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode); //, ref newAmount, partialCharge: true);

                        logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + distributionResponse +
                                       ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}");

                        if (int.Parse(responseCode ?? "99") == 0)
                        {
                            response = new TransferCommissionResponseBody()
                            {
                                Fee             = 0,
                                ResponseCode    = 0,
                                ResponseMessage = requestHasPDV ? "activado" : messageOut,
                                TransactionID   = int.Parse(autorization)
                            };
                            //if (requestHasPDV)
                            response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                        }
                        else
                        {
                            response = new TransferCommissionResponseBody()
                            {
                                Fee             = 0,
                                ResponseCode    = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"),
                                ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut,
                                TransactionID   = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization)
                            };
                            //if (requestHasPDV)
                            response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                            //if (!newAmount.Equals(request.Amount))
                            //    response.ChargedAmount = newAmount;
                        }
                        // End
                    }
                    else
                    {
                        response = new TransferCommissionResponseBody()
                        {
                            Fee             = 0,
                            ResponseCode    = requestHasPDV ? 3 : 99,
                            ResponseMessage = requestHasPDV ? "ID Inactivo" : "El monto a debitar es superior a la deuda actual",
                            TransactionID   = 99
                        };
                        // if (requestHasPDV)
                        response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    }
                }
                else
                {
                    response = new TransferCommissionResponseBody()
                    {
                        Fee             = 0,
                        ResponseCode    = requestHasPDV ? 3 : 99,
                        ResponseMessage = requestHasPDV ? "ID Inactivo" : "Debito de stock no permitido",
                        TransactionID   = 99
                    };
                    //if (requestHasPDV)
                    response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                }
                // Validate if the branch is MO (allowed from .config)
                // if true
                //      query debt amount
                //      if amount <= debt amount
                //          transfer code (up)
                //      else
                //          return error amount too high
                // else
                //      return error
            }
            else
            {
                response = new TransferCommissionResponseBody()
                {
                    Fee             = 0,
                    ResponseCode    = requestHasPDV ? 3 : 99,
                    ResponseMessage = requestHasPDV ? "ID Inactivo" : (isChild && isNegativeAmount && !acceptReverse ? "La agencia no acepta quitas automáticas" : "Error no identificado"),
                    TransactionID   = 99
                };
                //if (requestHasPDV)
                response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
            }


            // Envío de SMS VE si lo tiene habilitado
            try
            {
                if (response.ResponseCode.Equals(0))
                {
                    var sendTransferSMS = ConfigurationManager.AppSettings["SendTransferSMS"];
                    if (!String.IsNullOrEmpty(sendTransferSMS) ? bool.Parse(sendTransferSMS) : false)
                    {
                        var mobilePhone = new IBank.Utils().GetAgentMobilePhone(int.Parse(request.Recipient));
                        var stockFinal  = new IBank.Utils().GetAgentFinalStock(int.Parse(request.Recipient));
                        logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] phone " + mobilePhone);
                        if (mobilePhone.Length.Equals(int.Parse(ConfigurationManager.AppSettings["TelemoPhoneLength"])))
                        {
                            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer begin");
                            Util.SMSTelemoDispatcher.SmsToCustomer(ConfigurationManager.AppSettings["TelemoClientId"],
                                                                   ConfigurationManager.AppSettings["TelemoCustomerId"],
                                                                   mobilePhone,
                                                                   String.Format(ConfigurationManager.AppSettings["TelemoMessageTemplate"], request.Amount.ToString("C"), stockFinal, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()).ToString("HH:mm:ss")));
                            logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer end");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.ErrorHigh("[SMS] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] " + ex.Message + ", " + ex.StackTrace);
            }

            return(response);
        }