Пример #1
0
        private String GetSessionId(DataContract.MacroInternational.GetMacroProductInternationalRequest 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 (!String.IsNullOrEmpty(request.AuthenticationData.SessionID))
                {
                    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.Kinacu, ApiServiceName.GetSession);

                        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(cacheObj.Token);
        }
Пример #2
0
        public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject)
        {
            var request  = (GetExternalBalanceRequestBody)requestObject;
            var response = new GetExternalBalanceResponseBody();


            var ibankClient = GetProviderForEntity(request.TargetEntity);

            logger.InfoHigh("Comienza el GetExternalBalance");

            // Need to get the national ID:
            var agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest(
                new GetAgentInfoRequestBody()
            {
                AuthenticationData = request.AuthenticationData,
                Agent      = request.Agent,
                DeviceType = request.DeviceType
            }, ApiTargetPlatform.Kinacu, ApiServiceName.GetAgentInfo);


            logger.InfoHigh("Se ejecutó GetAgentInfo, el resultado fue: ResponseCode " + agentInfo.ResponseCode + ", NationalId " + agentInfo.AgentInfo.NationalID);

            var getExternalBalanceResponse = ibankClient.GetBalance(new API.IBank.GetBalanceRequest
            {
                Agent           = request.Agent,
                AgentNationalID = agentInfo.AgentInfo.NationalID
            });

            logger.InfoHigh("Se ejecutó GetBalance en IBank, el resultado fue: ResponseCode " + getExternalBalanceResponse.ResponseCode + ", Balance disponible " + getExternalBalanceResponse.AvailableAmount);

            if (getExternalBalanceResponse != null)
            {
                response.ResponseCode      = getExternalBalanceResponse.Result ? 0 : 99;
                response.ResponseMessage   = "External Reference: " + getExternalBalanceResponse.ExternalTransactionReference;
                response.ApprovedAmount    = getExternalBalanceResponse.ApprovedAmount;
                response.ConsumedAmount    = getExternalBalanceResponse.ConsumedAmount;
                response.AvailableAmount   = getExternalBalanceResponse.AvailableAmount;
                response.NextPaymentAmount = getExternalBalanceResponse.NextPaymentAmount;
                response.NextPaymentDate   = getExternalBalanceResponse.NextPaymentDate;

                //if (getExternalBalanceResponse.Balances != null && getExternalBalanceResponse.Balances.Any())
                //{
                //response.Balances = new ExternalBalances();
                //foreach (var balance in getExternalBalanceResponse.Balances)
                //{
                //    response.Balances.Add(new ExternalBalanceDetail()
                //    {
                //        Amount = balance.Amount,
                //        Description = balance.Type
                //    });
                //}
                //}
            }
            else
            {
                response.ResponseCode    = 99;
                response.ResponseMessage = "Su transaccion no pudo ser procesada";
            }
            return(response);
        }
Пример #3
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            if (sessionID.Equals("0") && !sessionID.Equals("1013"))
            {
                return new ChangePinResponseBody()
                       {
                           ResponseCode    = 90,
                           ResponseMessage = "error session",
                           TransactionID   = 0
                       }
            }
            ;

            ChangePinRequestBody  request  = requestObject as ChangePinRequestBody;
            ChangePinResponseBody response = null;
            string message;

            ManagementInterface managementWS = new ManagementInterface();

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

            if (session.ResponseCode == 1013 || session.ResponseCode == 10133 || session.ResponseCode == 1017)
            {
                logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [SEND-DATA] ChangeUserPasswordByAccessIdParameters {AccessId=" + request.AuthenticationData.Username + ",OldPassword=******,NewPassword=******,AccessType=" + request.DeviceType + "}");

                bool result = managementWS.ChangeUserPasswordByAccessId(request.AuthenticationData.Username, request.OldPin, request.NewPin, request.DeviceType, out message);

                logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [RECV-DATA] ChangeUserPasswordByAccessIdResult {response=" + result + ",message=" + message + "}");

                response = new ChangePinResponseBody()
                {
                    ResponseCode    = (result ? 0 : 99),
                    ResponseMessage = (result ? "exito" : message),
                    TransactionID   = new Random().Next(100000, 999999)
                };
            }
            else
            {
                logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [SEND-DATA] ChangeUserPasswordParameters {UserId=" + sessionID + ",OldPassword=******,NewPassword=******}");

                bool result = managementWS.ChangeUserPassword(int.Parse(sessionID), request.OldPin, request.NewPin, out message);

                logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [RECV-DATA] ChangeUserPasswordResult {response=" + result + ",message=" + message + "}");

                response = new ChangePinResponseBody()
                {
                    ResponseCode    = (result ? 0 : 99),
                    ResponseMessage = (result ? "exito" : message),
                    TransactionID   = new Random().Next(100000, 999999)
                };
            }
            return(response);
        }
    }
Пример #4
0
        public decimal[] HandlerCache(AuthenticationData cascadeAuth, TopUpRequestBody request)
        {
            //se inicializa con valores por defecto
            List <decimal> lista = new List <decimal>(3)
            {
                0m, 0m, 0m
            };

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

            if (balanceResponse.StockBalance.HasValue)
            {
                lista[0] = balanceResponse.StockBalance.Value;
            }


            if (balanceResponse.WalletBalance.HasValue)
            {
                lista[1] = balanceResponse.WalletBalance.Value;
            }


            if (balanceResponse.PointsBalance.HasValue)
            {
                lista[2] = balanceResponse.PointsBalance.Value;
            }


            return(lista.ToArray <decimal>());
        }
Пример #5
0
        /// <summary>
        /// Retorna el saldo de kinacu o de inventario si las credenciales de usaurio son valida
        /// </summary>
        /// <param name="request">credenciales del usuario</param>
        /// <returns>saldo de kinacu o en cache o cero si es en caso de ocurrir un error</returns>
        private Decimal GetBalance(GetTransactionRequestBody request)
        {
            Decimal result = 0.0m;

            try
            {
                if (!string.IsNullOrEmpty(request.AuthenticationData.Username))
                {
                    string llave = request.DeviceType + "-" + request.AuthenticationData.Username;


                    //CUANDO SE RECARGA EL SALDO
                    Func <decimal> callback = delegate()
                    {
                        try
                        {
                            logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[GetTransactionProvider] SALDO NOT FOUND CACHE "));



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


                            return(balanceResponse.StockBalance.Value);
                            //lista.Add(balanceResponse.WalletBalance.Value);
                            //lista.Add(balanceResponse.PointsBalance.Value);
                        }
                        catch (Exception exin)
                        {
                            logger.ErrorLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[GetTransactionProvider]  ERROR EN CACHE CALLBACK SALDO" + exin.Message + " " + exin.GetType().Name));

                            return(0.0m);
                        }
                    };

                    Action <Object, Object> accion = delegate(Object key2, Object value)
                    {
                        logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[GetTransactionProvider] SALDO FOUND CACHE [", key2, "]"));
                    };


                    var aux = _cacheSaldo.GetValue <decimal>(llave, callback, accion);

                    result = aux;// != null || aux.Length > 0? aux[0]: 0.0m;
                }
            }
            catch (Exception ex)
            {
                logger.ErrorMedium("[" + base.LOG_PREFIX + "] ERROR OBTENIENDO BALANCE " + ex.Message + " " + ex.GetType().Name);
            }


            return(result);
        }
Пример #6
0
        public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID)
        {
            GetParentListRequestBody  request  = requestObject as GetParentListRequestBody;
            GetParentListResponseBody response = null;

            GetAgentInfoResponseBody agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest(
                new GetAgentInfoRequestBody()
            {
                AuthenticationData = new AuthenticationData()
                {
                    SessionID = sessionID
                },
                Agent      = request.Agent,
                DeviceType = request.DeviceType
            }, ApiTargetPlatform.Utiba, ApiServiceName.GetAgentInfo);

            getParentListByReferenceIDResponse utibaGetParentListResponse = utibaClientProxy.getParentListByReferenceID(new getParentListByReferenceIDRequest()
            {
                getParentListByReferenceIDRequestType = new getParentListByReferenceIDRequestType()
                {
                    sessionid        = sessionID,
                    device_type      = request.DeviceType,
                    agentReferenceID = agentInfo.AgentInfo.ReferenceID
                }
            });

            //logger.InfoLow("Ajá: " + request.Agent + " vs " + agentInfo.AgentInfo.ReferenceID);

            if (utibaGetParentListResponse != null)
            {
                response = new GetParentListResponseBody()
                {
                    ResponseCode    = Utils.BuildResponseCode(utibaGetParentListResponse.getParentListByReferenceIDResponseType.result, utibaGetParentListResponse.getParentListByReferenceIDResponseType.result_namespace),
                    ResponseMessage = utibaGetParentListResponse.getParentListByReferenceIDResponseType.result_message,
                    TransactionID   = utibaGetParentListResponse.getParentListByReferenceIDResponseType.transid
                };


                if (utibaGetParentListResponse.getParentListByReferenceIDResponseType.agentList != null &&
                    utibaGetParentListResponse.getParentListByReferenceIDResponseType.agentList.Length > 0)
                {
                    response.ParentList = new ParentList();

                    foreach (Agent agent in utibaGetParentListResponse.getParentListByReferenceIDResponseType.agentList)
                    {
                        response.ParentList.Add(new BasicAgentInfo()
                        {
                            Agent = agent.reference,
                            Name  = agent.name
                        });
                    }
                }
            }

            return(response);
        }
Пример #7
0
        public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID)
        {
            GetAgentGroupsRequestBody  request  = requestObject as GetAgentGroupsRequestBody;
            GetAgentGroupsResponseBody response = null;

            GetAgentInfoResponseBody agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest(
                new GetAgentInfoRequestBody()
            {
                AuthenticationData = new AuthenticationData()
                {
                    SessionID = sessionID
                },
                Agent      = request.Agent,
                DeviceType = request.DeviceType
            }, ApiTargetPlatform.Utiba, ApiServiceName.GetAgentInfo);

            AgentGroupsResponse utibaAgentGroupsResponse = utibaClientProxy.getAgentGroupByAgentID(new getAgentGroupByAgentID()
            {
                getAgentGroupByAgentIDRequest = new getAgentGroupByAgentIDRequest()
                {
                    sessionid   = sessionID,
                    device_type = request.DeviceType,
                    agentID     = agentInfo.AgentInfo.AgentID
                }
            });

            if (utibaAgentGroupsResponse != null)
            {
                response = new GetAgentGroupsResponseBody()
                {
                    ResponseCode    = Utils.BuildResponseCode(utibaAgentGroupsResponse.AgentGroupsReturn.result, utibaAgentGroupsResponse.AgentGroupsReturn.result_namespace),
                    ResponseMessage = utibaAgentGroupsResponse.AgentGroupsReturn.result_namespace,
                    TransactionID   = utibaAgentGroupsResponse.AgentGroupsReturn.transid
                };

                if (utibaAgentGroupsResponse.AgentGroupsReturn.agentGroups != null &&
                    utibaAgentGroupsResponse.AgentGroupsReturn.agentGroups.Length > 0)
                {
                    response.GroupList = new GroupList();
                    foreach (AgentGroup agentGroup in utibaAgentGroupsResponse.AgentGroupsReturn.agentGroups)
                    {
                        response.GroupList.Add(new GroupInfo()
                        {
                            GroupID  = agentGroup.ID,
                            Name     = agentGroup.name,
                            Category = agentGroup.category,
                            Type     = agentGroup.type
                        });
                    }
                }
            }
            return(response);
        }
Пример #8
0
        /// <summary>
        /// Paso llamado método TopUp con el producto de CashIn, para que el protocolo realice el llamado
        /// de constitución y emisión en el WS de MultiPay 472
        /// </summary>
        /// <param name="request">Objeto que contiene la información del giro</param>
        /// <param name="idGiro">ID del giro creado en base de datos MW</param>
        /// <param name="sessionId">ID de sesión para poner en los mensajes de log</param>
        /// <param name="exc">Excepción generada al llamar el método del API</param>
        /// <returns>Respuesta del TopUp</returns>
        private DataContract.TopUpResponseBody EmitirPaso2(EmitirRequest request, int idGiro, string sessionId, out Exception exc)
        {
            string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name);

            exc = null;

            DataContract.TopUpResponseBody resp = null;
            string endpointName = "TopUp";

            try
            {
                this.ProviderLogger.InfoLow(() => TagValue.New()
                                            .MethodName(methodName)
                                            .Message("[" + sessionId + "] " + "Llamando método \"" + endpointName + "\" ..."));

                resp = new ServiceExecutionDelegator <DataContract.TopUpResponseBody, DataContract.TopUpRequestBody>().ResolveRequest(
                    new DataContract.TopUpRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username = request.AuthenticationData.Username,
                        Password = request.AuthenticationData.Password
                    },
                    DeviceType = request.DeviceType,
                    Platform   = request.Platform,
                    WalletType = DataContract.WalletType.Stock,
                    ExternalTransactionReference = sessionId,
                    Amount     = request.ValorRecibido,
                    TerminalID = request.Pdv,
                    Recipient  = idGiro.ToString(),
                    MNO        = this.multipayTopUpMno
                },
                    ApiTargetPlatform.Kinacu,
                    ApiServiceName.TopUp);

                this.ProviderLogger.InfoLow(() => TagValue.New()
                                            .MethodName(methodName)
                                            .Message("[" + sessionId + "] " + "Respuesta método \"" + endpointName + "\"")
                                            .Tag("ResponseCode").Value(resp != null && resp.ResponseCode.HasValue ? resp.ResponseCode.Value.ToString() : "NULL")
                                            .Tag("ResponseMessage").Value(resp != null && !string.IsNullOrEmpty(resp.ResponseMessage) ? resp.ResponseMessage : "vacío"));
            }
            catch (Exception ex)
            {
                this.ProviderLogger.ExceptionLow(() => TagValue.New()
                                                 .MethodName(methodName)
                                                 .Message("[" + sessionId + "] " + "Error llamando método \"" + endpointName + "\"")
                                                 .Exception(ex));
                this.errorMessage = ErrorMessagesMnemonics.ApiMethodException;
                exc = ex;
            }

            return(resp);
        }
Пример #9
0
        public decimal[] HandlerCache()
        {
            List <decimal> lista = new List <decimal>(3);

            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(balanceResponse.WalletBalance.Value);
            lista.Add(balanceResponse.PointsBalance.Value);
            return(lista.ToArray <decimal>());
        }
Пример #10
0
        public override DataContract.Common.IMovilwayApiResponse PerformKinacuOperation(DataContract.Common.IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID)
        {
            logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "INICIO");
            if (!IsThereProducts())
            {
                logger.ErrorHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] NO SE HAN CARGADO PRODUCTOS PARA REALIZAR CONSULTAS");
                return(new QueryPaymentResponseBody()
                {
                    ResponseCode = 99,
                    ResponseMessage = "El producto a comprar no esta configurado para la consulta."
                });
            }

            var response = new QueryPaymentResponseBody()
            {
                ResponseCode    = 99,
                ResponseMessage = "Ocurrio un error, realizando la consulta del pago intente mas tarde."
            };

            try
            {
                QueryPaymentRequestBody request = requestObject as QueryPaymentRequestBody;

                if (request == null)
                {
                    throw new Exception("EL REQUEST A PROCESAR NO PUEDE SER NULO");
                }

                var product = MapMNOtoProductId(request.MNO);

                ProductInfo productInfo = null;
                if (!_productsInfo.TryGetValue(product, out productInfo))
                {
                    response.ResponseMessage = "El producto a comprar no esta configurado para la consulta.";

                    return(response);
                }

                int userid;
                int agencyid;

                string pdv = "";
                // KinacuLogisticsWebService.LogisticsInterface client = new KinacuLogisticsWebService.LogisticsInterface();
                KinacuManagementWebService.ManagementInterface client = new KinacuManagementWebService.ManagementInterface();

                int Id; string UserName = null; string UserLastName = null; string UserAddress = null; long SessionTimeOut = 0; string Message = null;

                client.GetUserInfo(int.Parse(sessionID), out Id, out UserName, out UserLastName, out UserAddress, out SessionTimeOut, out Message);

                userid = Id;

                logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "Obteniendo usuario " + userid);

                int _RetailerId; string _RetailerName; string _RetailerAddress; string _RetailerLegalId; int _VoucherQuantityDownload; string _TicketHeader; string _CurrentTime; string _Message = "";

                client.GetRetailerInfo(int.Parse(sessionID), out _RetailerId, out _RetailerName, out _RetailerAddress, out _RetailerLegalId, out _VoucherQuantityDownload, out _TicketHeader, out _CurrentTime, out _Message);

                agencyid = _RetailerId;


                logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "Obteniendo agencia " + userid);

                //var agentInfo = Utils.GetAgentInfoById(agencyid.ToString());

                GetAgentInfoResponseBody balanceResponse = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest(new GetAgentInfoRequestBody() //GetAgentInfoResponseBody
                {
                    AuthenticationData = request.AuthenticationData,
                    DeviceType         = request.DeviceType,
                    SearchById         = true,
                    AgentId            = agencyid.ToString()
                }, ApiTargetPlatform.Kinacu, ApiServiceName.GetAgentInfo);


                pdv = balanceResponse.AgentInfo.PDVID;//.PDVID;

                var ApiReference = (System.Threading.Thread.CurrentThread.ManagedThreadId * 10).ToString() + DateTime.Now.Ticks.ToString();



                QueryPaymentReference.Input input = new QueryPaymentReference.Input()
                {
                    Amount          = "",
                    Client          = request.Recipient,
                    Product         = product,
                    DateTime        = DateTime.UtcNow.ToString("yyyyMMdd HH:mm:ss"),
                    ReferenceNumber = ApiReference,
                    ExtendedData    = new QueryPaymentReference.Input.ArrayOfString()
                    {
                        pdv,
                        request.TerminalID,
                        agency_prefix + agencyid.ToString(),
                        user_prefix + userid,
                        request.ExternalTransactionReference,
                        request.DeviceType.ToString()
                    }
                };


                QueryPaymentReference.queriesClient clientquery = new QueryPaymentReference.queriesClient();



                clientquery.Endpoint.Address = new EndpointAddress(productInfo.Url);

                clientquery.Endpoint.Binding.SendTimeout = TimeSpan.FromMilliseconds(productInfo.Timeout);

                logger.InfoHigh("[KIN] " + base.LOG_PREFIX + " [QueryPaymentProvider] SEND-DATA " +
                                "Amount =" + input.Amount + "|" +
                                "Client =" + input.Client + "|" +
                                "Product =" + input.Product + "|" +
                                "DateTime =" + input.DateTime + "|" +
                                "ReferenceNumber =" + input.ReferenceNumber + "|" +
                                "ExtendedData =" + String.Join(",", input.ExtendedData));


                QueryPaymentReference.OutputQuery queryresponse = clientquery.Query(input);



                if (queryresponse != null)
                {
                    logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] REC-DATA "
                                    + "Id = " + queryresponse.Id + "|"
                                    + "IdAutorization = " + queryresponse.IdAutorization + "|");

                    response.ResponseCode         = queryresponse.Result ? 0 : 99;
                    response.ResponseMessage      = queryresponse.Result ? "OK" : "Error en la consulta";
                    response.TransactionID        = Convert.ToInt32(queryresponse.Id);
                    response.Fee                  = queryresponse.Fee;
                    response.ResponseCodeOpetator = queryresponse.ResponseCode;
                    response.DetailsOperator      = queryresponse.Details;
                    response.Data                 = queryresponse.Data;
                    response.DataDescriptor       = queryresponse.DataDescriptor;
                    response.Result               = queryresponse.Result;
                    response.QueryResultType      = queryresponse.QueryResultType.ToString();
                    response.IdAutorization       = queryresponse.IdAutorization;
                    response.Amount               = queryresponse.Amount;
                }
                else
                {
                    logger.ErrorHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] REC-DATA OutputQuery [null]");

                    return(new QueryPaymentResponseBody()
                    {
                        ResponseCode = 99,
                        ResponseMessage = "No se recibio respuesta, de la consulta intente mas tarde."
                    });
                }
            }
            catch (Exception ex)
            {
                logger.ErrorHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] ERROR EN LA CONSULTA DEL PAGO. " + ex.GetType().Name + " " + ex.Message + " " + ex.StackTrace);

                response = new QueryPaymentResponseBody()
                {
                    ResponseCode = 99,

                    ResponseMessage = "Ocurrio un error, realizando la consulta del pago intente mas tarde."
                };
            }
            return(response);
        }
Пример #11
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");
        }
Пример #12
0
        /// <summary>
        /// Realiza la autenticacion en la plataforma y retorna el SessionId
        /// </summary>
        /// <param name="request">Objeto que contiene las credenciales del usuario</param>
        /// <param name="returnCode">Codigo de error en caso de que algo falle (-1 = OK, >-1 = Error)</param>
        /// <returns>Un <c>string</c> que contiene el <c>SessionId</c> del usuario autenticado</returns>
        protected string GetSessionId(ASecuredApiRequest request, out ErrorMessagesMnemonics returnCode)
        {
            string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name);

            returnCode = ErrorMessagesMnemonics.None;

            this.ProviderLogger.InfoLow(() => TagValue.New()
                                        .MethodName(methodName)
                                        .Message("Obteniendo sesion ...")
                                        .Tag("Login").Value((request.AuthenticationData != null && request.AuthenticationData.Username != null) ? request.AuthenticationData.Username : "******")
                                        .Tag("DeviceType").Value(request.DeviceType)
                                        .Tag("RequestPlatformId").Value(string.IsNullOrEmpty(request.Platform) ? string.Empty : request.Platform));

            if (!this.ValidSecureApiRequest(request))
            {
                this.ProviderLogger.InfoLow(() => TagValue.New()
                                            .MethodName(methodName)
                                            .Message("Imposible obtener sesion")
                                            .Tag("Login").Value((request.AuthenticationData != null && request.AuthenticationData.Username != null) ? request.AuthenticationData.Username : "******")
                                            .Tag("DeviceType").Value(request.DeviceType)
                                            .Tag("RequestPlatformId").Value(string.IsNullOrEmpty(request.Platform) ? string.Empty : request.Platform));

                returnCode = ErrorMessagesMnemonics.MissingAuthenticationInformation;
                return(string.Empty);
            }

            GetSessionResponseBody sessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>()
                                                     .ResolveRequest(
                new GetSessionRequestBody()
            {
                Username   = request.AuthenticationData.Username,
                Password   = request.AuthenticationData.Password,
                DeviceType = request.DeviceType
            },
                request.Platform ?? string.Empty,
                ApiServiceName.GetSession);

            if (sessionResponse == null ||
                string.IsNullOrEmpty(sessionResponse.SessionID) ||
                sessionResponse.SessionID.Equals("0") ||
                sessionResponse.SessionID.Equals("error"))
            {
                this.ProviderLogger.InfoLow(() => TagValue.New()
                                            .MethodName(methodName)
                                            .Message("Imposible obtener sesion")
                                            .Tag("Login").Value((request.AuthenticationData != null && request.AuthenticationData.Username != null) ? request.AuthenticationData.Username : "******")
                                            .Tag("DeviceType").Value(request.DeviceType)
                                            .Tag("RequestPlatformId").Value(string.IsNullOrEmpty(request.Platform) ? string.Empty : request.Platform));

                returnCode = this.MapAuthenticationErrorMessageToErrorMnemonic(sessionResponse != null ? sessionResponse.ResponseMessage : null);
                return(string.Empty);
            }
            else
            {
                this.ProviderLogger.InfoLow(() => TagValue.New()
                                            .MethodName(methodName)
                                            .Message("[" + sessionResponse.SessionID + "] " + "Sesion obtenida")
                                            .Tag("SessionId").Value(sessionResponse.SessionID));
            }

            return(sessionResponse.SessionID);
        }
Пример #13
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;
        }
Пример #14
0
        public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject)
        {
            var request = requestObject as ConsolidateMoviPinRequestBody;

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


            var response = new ConsolidateMoviPinResponseBody
            {
                ResponseCode    = 0,
                ResponseMessage = "Sus Movipins han sido consolidados.",
                TransactionID   = 0,
                MoviPins        = new MoviPins()
            };


            if (request != null)
            {
                decimal consolidatedAmount = 0;
                string  recipient          = null;
                var     pines = new List <MoviPinDetails>();

                // Busco el detalle de cada pin recibido
                foreach (var movipin in request.MoviPins)
                {
                    pines.Add(Utils.GetMoviPinDetails(movipin.Number));
                }


                // Reviso que no existan pines repetidos
                if (pines.Select(m => m.Number).Distinct().Count() != pines.Count())
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "Existen pines repetidos en la solicitud";
                    Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
                    return(response);
                }

                // Reviso que exista más de un pin válido, ya que no tiene sentido validar un solo pin
                if (pines.Count(p => p.IsValid == true) <= 1)
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "Existen menos de dos pines validos";
                    Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
                    return(response);
                }

                // Reviso que todos los pines sean del mismo user
                if (pines.Select(p => p.Agent).Distinct().Count() != 1)
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "No todos los pines son del mismo usuario";
                    Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
                    return(response);
                }

                // Seteo el agente a utilizar más adelante al crear el nuevo pin consolidado
                recipient = pines.First().Agent;

                // Reviso que el pin a crear sea de un monto válido
                if (pines.Sum(p => p.RemainingAmount) == 0)
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "No puede crearse un nuevo PIN por cero D2";
                    Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
                    return(response);
                }


                // En esta parte se redimen uno a uno los pines
                foreach (var movipin in request.MoviPins)
                {
                    if (pines.Single(p => p.Number == movipin.Number).IsValid != null && pines.Single(p => p.Number == movipin.Number).IsValid.Value)
                    {
                        var movipaymentRequest = new MoviPaymentRequestBody
                        {
                            AuthenticationData = new AuthenticationData()
                            {
                                Username = _redeemUser,
                                Password = _redeemPassword
                            },
                            DeviceType = request.DeviceType,
                            Amount     = pines.Single(p => p.Number == movipin.Number).RemainingAmount.Value,
                            ExternalTransactionReference = "",
                            MoviPin = movipin.Number
                        };
                        var redeeemResponse = new ServiceExecutionDelegator
                                              <MoviPaymentResponseBody, MoviPaymentRequestBody>().
                                              ResolveRequest(movipaymentRequest, ApiTargetPlatform.Utiba, ApiServiceName.MoviPayment);

                        if (redeeemResponse.ResponseCode.Value == 0)
                        {
                            consolidatedAmount += pines.Single(p => p.Number == movipin.Number).RemainingAmount.Value;
                        }
                        else
                        {
                            movipin.IsValid         = false;
                            movipin.Agent           = null;
                            movipin.RemainingAmount = null;
                        }
                    }
                    response.MoviPins.Add(pines.Single(p => p.Number == movipin.Number));
                }

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

                    if (createMoviPinResponse.ResponseCode.Value == 0)
                    {
                        response.ConsolidatedMoviPin = createMoviPinResponse.MoviPin;
                        response.ConsolidatedAmount  = consolidatedAmount;
                        response.ExpiryDate          = createMoviPinResponse.ExpiryDate;
                    }
                    else
                    {
                        response.ResponseCode    = 99;
                        response.ResponseMessage = "Operacion fallida";
                    }
                }
                else
                {
                    response.ResponseCode    = 99;
                    response.ResponseMessage = "El pin se quería generar con monto cero";
                }
            }

            Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response));
            return(response);
        }
Пример #15
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);
        }
    }
}
Пример #16
0
        public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID)
        {
            GetSessionRequestBody  request  = requestObject as GetSessionRequestBody;
            GetSessionResponseBody response = null;

            createsessionResponse newSessionResponse = utibaClientProxy.createsession(new createsession());
            String PIN = Utils.GenerateHash(newSessionResponse.createsessionReturn.sessionid, request.Username, request.Password);

            logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetSessionProvider] [SEND-DATA] loginRequest {sessionid=" + newSessionResponse.createsessionReturn.sessionid + ",device_type=" + request.DeviceType + ",initiator=" + request.Username + ",pin=" + PIN + "}");

            loginResponse loginResponse = utibaClientProxy.login(new login()
            {
                loginRequest = new loginRequestType()
                {
                    sessionid   = newSessionResponse.createsessionReturn.sessionid,
                    device_type = request.DeviceType,
                    initiator   = request.Username,
                    pin         = PIN
                }
            });

            logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetSessionProvider] [RECV-DATA] loginResponse {result=" + loginResponse.loginReturn.result + ",result_namespace=" + loginResponse.loginReturn.result_namespace + "}");

            response = new GetSessionResponseBody()
            {
                ResponseCode    = Utils.BuildResponseCode(loginResponse.loginReturn.result, loginResponse.loginReturn.result_namespace),
                ResponseMessage = loginResponse.loginReturn.result_message,
                TransactionID   = loginResponse.loginReturn.transid,
                SessionID       = newSessionResponse.createsessionReturn.sessionid
            };

            if (response.ResponseCode == 0)
            {
                if (ConfigurationManager.AppSettings["ProcessMigration"].ToLower() == "true")
                {
                    //logger.InfoHigh("Comienza la migración del usuario: " + request.AuthenticationData.Username);
                    bool migrateAgent = MigrateAgent(request.AuthenticationData.Username);
                    int  deviceType   = GetDeviceType(request.AuthenticationData.Username);
                    if (migrateAgent)
                    {
                        // Cambio de password Kinacu
                        var changePinResponse = new ServiceExecutionDelegator <ChangePinResponseBody, ChangePinRequestBody>().ResolveRequest(
                            new ChangePinRequestBody()
                        {
                            AuthenticationData = new AuthenticationData()
                            {
                                Username = request.AuthenticationData.Username,
                                Password = ConfigurationManager.AppSettings["StandardOldPin"]
                            },
                            DeviceType = deviceType,                                     /*int.Parse(ConfigurationManager.AppSettings["StandardNewDeviceType"]),*/
                            Agent      = request.AuthenticationData.Username,
                            OldPin     = ConfigurationManager.AppSettings["StandardOldPin"],
                            NewPin     = request.AuthenticationData.Password
                        }, ApiTargetPlatform.Kinacu, ApiServiceName.ChangePin);

                        // Login con Kinacu - NOT NOW - La proxima vez que entre va por Kinacu de una

                        //logger.InfoHigh("Resultado del cambio de clave del usuario: " + changePinResponse.ResponseCode);

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

                // REPG2013 - esto queda deshabilitado por ahora

                // For speeding up, I'm caching the session value:
                //-var couchBaseClient = new CouchbaseClient();
                //-couchBaseClient.Store(StoreMode.Set, Utils.GetSessionForUserKey(request.Username, request.Password), response.SessionID, new TimeSpan(0, UtibaUtils.SessionTTL, 0));
                // Also caching the
                //-couchBaseClient.Store(StoreMode.Set, Utils.GetUserForSessionKey(response.SessionID), request.Username, new TimeSpan(0, UtibaUtils.SessionTTL, 0));
            }
            return(response);
        }
Пример #17
0
        public DataContract.MacroInternational.GetMacroProductInternationalResponse GetMacroProductsInter(DataContract.MacroInternational.GetMacroProductInternationalRequest request)
        {
            var response = new DataContract.MacroInternational.GetMacroProductInternationalResponse();

            try
            {
                LogRequest(request);
                var sessionId = GetSessionId(request);

                //var platformId = Convert.ToInt32(request.Platform); //1
                //var countryId = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10

                //Platform products.
                var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>().
                                  ResolveRequest(new GetProductListRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username  = request.AuthenticationData.Username,
                        Password  = request.AuthenticationData.Password,
                        SessionID = sessionId
                    },
                    Agent      = request.Agent,
                    DeviceType = request.DeviceType
                }, request.Platform, ApiServiceName.GetProductList);

                if (productList.ProductList == null)
                {
                    response = new DataContract.MacroInternational.GetMacroProductInternationalResponse
                    {
                        ResponseCode    = 99,
                        ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.",
                        TransactionID   = 0
                    };
                }
                else
                {
                    var dm = new Movilway.API.Data.MacroProduct.MacroProductInterDataManager();

                    if (String.IsNullOrEmpty(request.CountryId))
                    {
                        request.CountryId = "0";
                    }

                    response = dm.GetMacroProductsInter(Convert.ToInt32(request.CountryId), productList.ProductList, request.DeviceType);

                    response.ResponseCode    = 0;
                    response.ResponseMessage = "Exito.";
                    response.TransactionID   = 0;
                }

                LogResponse(response);

                return(response);
            }
            catch (Exception e)
            {
                ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
            }

            return(response);
        }
Пример #18
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);
        }
        public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject)
        {
            var request  = (ProcessExternalTransactionRequestBody)requestObject;
            var response = new ProcessExternalTransactionResponseBody();

            // Get a session for the configured super user
            var balance = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(
                new GetBalanceRequestBody
            {
                AuthenticationData = new AuthenticationData()
                {
                    Username = ConfigurationManager.AppSettings["ProincoLogin"],
                    Password = ConfigurationManager.AppSettings["ProincoPwd"]
                },
                DeviceType = int.Parse(ConfigurationManager.AppSettings["ProincoDeviceType"]),
                Platform   = request.Platform
            }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance);

            if ((balance.ResponseCode ?? -1) != 0)
            {
                response.ResponseCode    = 96;
                response.ResponseMessage = (balance.ResponseCode ?? 0) + "-Su transaccion no pudo ser procesada por problemas al consultar el stock";
                return(response);
            }

            if (balance.StockBalance < request.Amount)
            {
                response.ResponseCode    = 97;
                response.ResponseMessage = "Su transaccion no pudo ser procesada por falta de stock";
                return(response);
            }

            var ibankClient = GetProviderForEntity(request.TargetEntity);

            logger.InfoLow("Comienza el ProcessExternalTransaction");

            string myAgent = new Utils().GetAgentPdv(request.Agent);
            // Need to get the national ID:
            var agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest(
                new GetAgentInfoRequestBody()
            {
                AuthenticationData = request.AuthenticationData,
                Agent      = request.Agent,
                DeviceType = request.DeviceType
            }, ApiTargetPlatform.Kinacu, ApiServiceName.GetAgentInfo);

            logger.InfoLow("Params: " + request.Agent + " - " + agentInfo.AgentInfo.NationalID + " - " + request.Amount + " - " + request.ExternalTransactionReference);

            var petr = new API.IBank.ProcessTransactionRequest
            {
                Agent                = request.Agent,
                AgentNationalID      = agentInfo.AgentInfo.NationalID,
                Amount               = request.Amount,
                TransactionType      = "transfer", //request.TransactionType,
                TransactionReference = request.ExternalTransactionReference
            };

            if (request.AdditionalData != null && request.AdditionalData.Any())
            {
                petr.AdditionalData = new API.IBank.AdditionalData();
                foreach (var item in request.AdditionalData)
                {
                    petr.AdditionalData.Add(item.Key, item.Value);
                }
            }

            logger.InfoLow("request " + petr.Amount + " - " + petr.TransactionReference);

            ProcessTransactionResponse processExternalTransactionResponse = new ProcessTransactionResponse();

            try
            {
                processExternalTransactionResponse = ibankClient.ProcessTransaction(petr);
            }
            catch (Exception ex)
            {
                logger.InfoLow("EX " + ex.Message + " - " + ex.StackTrace);
            }
            logger.InfoLow("response " + processExternalTransactionResponse.ResponseCode + " - " + processExternalTransactionResponse.ResponseMessage);

            if (processExternalTransactionResponse != null)
            {
                if (int.Parse(processExternalTransactionResponse.ResponseCode) == 1)
                {
                    var config          = ConfigurationManager.GetSection("Movilway.API.Config") as ApiConfiguration;
                    var adjustmentsUser = config.ManagementUsers["adjustmentsAgent"];

                    string myAutorization = "", myMessage = "", myResponseCode = "";

                    var externalTransferResponse = new Utils().Externaltransfer(decimal.Parse(agentInfo.AgentInfo.BranchID.ToString()), ConfigurationManager.AppSettings["AccountProinco"], int.Parse(ConfigurationManager.AppSettings["ProincoUser"]), double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, DateTime.Now, ref myAutorization, ref myMessage, ref myResponseCode);

                    if (myResponseCode == "00")
                    {
                        response.ResponseCode    = 0;
                        response.ResponseMessage = myMessage;
                        response.ExternalTransactionReference = myAutorization;
                    }
                    else
                    {
                        response.ResponseCode    = int.Parse(myResponseCode);
                        response.ResponseMessage = myMessage;
                        response.ExternalTransactionReference = myAutorization;
                    }
                }
                else
                {
                    response.ResponseCode    = int.Parse(processExternalTransactionResponse.ResponseCode);
                    response.ResponseMessage = processExternalTransactionResponse.ResponseMessage;
                    response.ExternalTransactionReference = processExternalTransactionResponse.ExternalTransactionReference;
                }
            }
            else
            {
                response.ResponseCode    = 99;
                response.ResponseMessage = "Su transaccion no pudo ser procesada";
            }
            return(response);
        }
Пример #20
0
        public DataContract.Macro.GetMacroProductListByCategoryResponse GetMacroProductsByCategory(DataContract.Macro.GetMacroProductListRequest request)
        {
            LogRequest(request);

            var response  = new DataContract.Macro.GetMacroProductListByCategoryResponse();
            var sessionId = GetSessionId(request, out errorMessage);

            logger.InfoLow("[API] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory {sessionId = " + sessionId + ", UserId=" + request.Agent + ", DeviceType=" + request.DeviceType + "}");

            if (errorMessage != ErrorMessagesMnemonics.None)
            {
                response.ResponseCode    = (int)errorMessage;
                response.ResponseMessage = errorMessage.ToDescription();
                logger.InfoLow("[API Binwus] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory Error: " + errorMessage.ToDescription());

                return(response);
            }

            try
            {
                var platformId = Convert.ToInt32(request.Platform);                              //1
                var countryId  = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10
                logger.InfoLow("[API BinwusA] [MacroProductProvider]");

                //Platform products.
                var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>().
                                  ResolveRequest(new GetProductListRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username  = request.AuthenticationData.Username,
                        Password  = request.AuthenticationData.Password,
                        SessionID = sessionId
                    },
                    Agent      = request.Agent,
                    DeviceType = request.DeviceType
                }, request.Platform, ApiServiceName.GetProductList);
                logger.InfoLow("[API BinwusB] [MacroProductProvider]");
                if (productList.ProductList == null)
                {
                    response = new GetMacroProductListByCategoryResponse
                    {
                        ResponseCode    = 99,
                        ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.",
                        TransactionID   = 0
                    };
                    logger.InfoLow("[API Binwus1] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory Error: El usuario no tiene productos asignados en la plataforma.");
                }
                else
                {
                    logger.InfoLow("[API BinwusC.] [MacroProductProvider]");
                    var dm = new Movilway.API.Data.MacroProduct.MacroProductDataManager();
                    logger.InfoLow("[API BinwusD.] [MacroProductProvider]");
                    response = dm.GetMacroProductsByCategory(platformId, countryId, productList.ProductList, request.DeviceType);
                    logger.InfoLow("[API BinwusE.] [MacroProductProvider]");

                    logger.InfoLow("[API Binwus2] [" + sessionId + "] [MacroProductProvider] [RECV-DATA] GetMacroProductsByCategory {response={" + productList.ProductList.ToString() + "}}");

                    response.ResponseCode    = 0;
                    response.ResponseMessage = "Exito.";
                    response.TransactionID   = 0;
                }
            }
            catch (Exception e)
            {
                logger.InfoLow("[API Binwus3] [" + sessionId + "] [MacroProductProvider] [RECV-DATA] GetMacroProductsByCategory Error: " + e.Message);

                ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
            }

            LogResponse(response);

            return(response);
        }
Пример #21
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);
        }
Пример #22
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);
        }
Пример #23
0
        internal GetFavoriteAmountsResponse GetFavoriteAmounts(GetFavoriteAmountsRequest request)
        {
            LogRequest(request);

            var response = new GetFavoriteAmountsResponse();

            var sessionId = GetSessionId(request, out errorMessage);

            if (errorMessage != ErrorMessagesMnemonics.None)
            {
                response.ResponseCode    = (int)errorMessage;
                response.ResponseMessage = errorMessage.ToDescription();
                return(response);
            }

            try
            {
                var platformId = Convert.ToInt32(request.Platform);                              //1
                var countryId  = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10

                //Platform products.
                var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>().
                                  ResolveRequest(new GetProductListRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username  = request.AuthenticationData.Username,
                        Password  = request.AuthenticationData.Password,
                        SessionID = sessionId
                    },
                    Agent      = request.Agent,
                    DeviceType = request.DeviceType
                }, request.Platform, ApiServiceName.GetProductList);

                if (productList.ProductList == null)
                {
                    response = new GetFavoriteAmountsResponse()
                    {
                        ResponseCode    = 99,
                        ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.",
                        TransactionID   = 0
                    };
                }
                else
                {
                    var dm = new MacroProductDataManager();
                    response.FavoriteAmounts = dm.GetFavoriteAmounts(countryId);
                    response.ResponseCode    = 0;
                    response.ResponseMessage = "Exito.";
                    response.TransactionID   = 0;
                }
            }
            catch (Exception e)
            {
                ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e));
            }

            LogResponse(response);

            return(response);
        }
Пример #24
0
        public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID)
        {
            TransferRequestBody  request  = requestObject as TransferRequestBody;
            TransferResponseBody response = null;

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

            if (sessionID.Equals("0"))
            {
                response = new TransferResponseBody()
                {
                    ResponseCode    = requestHasPDV ? 3 : 90,
                    ResponseMessage = requestHasPDV ? "ID Inactivo" : "error session",
                    TransactionID   = 0,
                    StockBalance    = 0m
                };
                if (requestHasPDV)
                {
                    response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                }
                return(response);
            }

            try { sourceUserId = new IBank.Utils().GetUserId(request.AuthenticationData.Username); }
            catch (Exception) { }
            int  recipientId        = 0;
            bool recipientIsNumeric = int.TryParse(request.Recipient, out recipientId);

            if (!String.IsNullOrEmpty(request.RecipientPdv))
            {
                try
                {
                    recipientAgentId = new IBank.Utils().GetAgentIdByPdv(request.RecipientPdv);
                    accessReceiver   = request.Recipient;
                }
                catch (Exception e)
                {
                    if (requestHasPDV)
                    {
                        throw e;
                    }
                    else
                    {
                        return new TransferResponseBody()
                               {
                                   ResponseCode    = 3,
                                   ResponseMessage = "ID Inactivo",
                                   TransactionID   = 0,
                                   StockBalance    = 0m,
                                   ResponseDate    = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss")
                               }
                    };
                }
            }
            else if (String.IsNullOrEmpty(request.RecipientAccessId))
            {
                try
                {
                    recipientAgentId = new IBank.Utils().GetAgentId(request.Recipient);
                    accessReceiver   = request.Recipient;
                }
                catch (Exception) { }
            }
            else
            {
                try
                {
                    //TODO PROBLEMA NAMESAPCE Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetAgentId(request.RecipientAccessId);
                    recipientAgentId = new IBank.Utils().GetAgentId(request.RecipientAccessId);
                    accessReceiver   = request.RecipientAccessId;
                }
                catch (Exception)
                {
                    if (requestHasPDV)
                    {
                        return new TransferResponseBody()
                               {
                                   ResponseCode    = 3,
                                   ResponseMessage = "ID Inactivo",
                                   TransactionID   = 0,
                                   StockBalance    = 0m,
                                   ResponseDate    = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss")
                               }
                    }
                    ;
                    /*request.Recipient = request.RecipientAccessId;*/
                }
            }

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

            bool isChild          = false;
            bool isNegativeAmount = false;
            bool acceptReverse    = false;

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

            if (sourceAgentId == recipientAgentId)
            {
                response = new TransferResponseBody()
                {
                    Fee             = 0,
                    ResponseCode    = requestHasPDV ? 3 : 90,
                    ResponseMessage = requestHasPDV ? "ID Inactivo" : "Distribución de Saldo 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);
            }

            if (request.Amount < 0)
            {
                isNegativeAmount = true;
                acceptReverse    = new IBank.Utils().CheckReverse(request.Recipient);
            }
            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.Recipient) > 0)
            {
                isChild = true;
            }

            if (isChild && !isNegativeAmount && !request.DBTransferIfChild)
            {
                // Acá resultó ser hijo y debe afectarse la cuenta corriente, así que procedo con la distribución a hijo vía WS

                LogisticsInterface logisticsWS = new LogisticsInterface();
                string             message     = "";

                logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] createProductDistributionParameters {UserId=" + sessionID +
                               ",RetailerIdTo=" + decimal.Parse(request.Recipient) + ",IdProduct=0,Amount=" + int.Parse((request.Amount * 100).ToString("#")) + "}");

                var result = logisticsWS.CreateProductDistribution(int.Parse(sessionID), decimal.Parse(request.Recipient), 0, int.Parse((request.Amount * 100).ToString("#")), out message);

                var transactionId = new IBank.Utils().GetDistributionId(DateTime.Now, Convert.ToDecimal(sourceAgentId), decimal.Parse(request.Recipient), request.Amount);

                logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + result + ",message=" + message + "}");

                if (result)
                {
                    response = new TransferResponseBody()
                    {
                        Fee             = 0,
                        ResponseCode    = 0,
                        ResponseMessage = requestHasPDV ? "activado" : String.Format("Distribución de Saldo Exitosa\nFECHA: {0}\nVENDEDOR: {1}\nID PDV: {2}\nMONTO: {3}", DateTime.Now.ToString("dd/MM/yyyy"), request.AuthenticationData.Username, getChildListResponse.ChildList.Single(ch => ch.Agent == request.Recipient).Name, request.Amount.ToString("N2")), //message,
                        TransactionID   = transactionId
                    };
                    if (requestHasPDV)
                    {
                        response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    }
                }
                else
                {
                    response = new TransferResponseBody()
                    {
                        Fee             = 0,
                        ResponseCode    = requestHasPDV ? 3 : Utils.BuildResponseCode(result, message),
                        ResponseMessage = requestHasPDV ? "ID Inactivo" : (String.IsNullOrEmpty(message) ? "La distribución es fallida, por favor valide que ingreso el ID correcto del PDV Hijo o que tiene suficiente saldo." : message),
                        //ResponseCode = Utils.BuildResponseCode(result,message),
                        //ResponseMessage = String.IsNullOrEmpty(message) ? "La distribución es fallida, por favor valide que ingreso el ID correcto del PDV Hijo o que tiene suficiente saldo." : message, //message,
                        TransactionID = transactionId
                    };
                    if (requestHasPDV)
                    {
                        response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
                    }
                }
            }
            else 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] transferb2bParameters {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 ponemos cero
                    decimal maxCredit = 0; //Utils.GetAgentMaxCreditAvailable(request.Recipient);
                    if (request.Amount > maxCredit)
                    {
                        logger.ErrorHigh(base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters El monto Excede el máximo de crédito disponible Amount:" + request.Amount + " Limite Credito: " + maxCredit);
                        return(new TransferResponseBody()
                        {
                            ResponseCode = 99,
                            ResponseMessage = "EL MONTO EXCEDE EL LIMITE DE CREDITO CONFIGURADO",
                            TransactionID = 0,
                            StockBalance = 0m
                        });
                    }
                }


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

                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 TransferResponseBody()
                    {
                        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 TransferResponseBody()
                    {
                        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 TransferResponseBody()
                            {
                                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 TransferResponseBody()
                            {
                                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 TransferResponseBody()
                        {
                            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 TransferResponseBody()
                    {
                        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 TransferResponseBody()
                {
                    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");
                }
            }
            try
            {
                GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody()
                {
                    AuthenticationData = new AuthenticationData()
                    {
                        Username = request.AuthenticationData.Username,
                        Password = request.AuthenticationData.Password
                    },
                    DeviceType = request.DeviceType
                }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance);

                if (response != null)
                {
                    response.StockBalance = balanceResponse.StockBalance.Value;
                }
            }
            catch (Exception) { }


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