public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { GetAgentInfoRequestBody request = requestObject as GetAgentInfoRequestBody; GetAgentInfoResponseBody response = null; logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [SEND-DATA] getAgentByReferenceRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",reference=" + request.Agent + ",category=agent}"); AgentResponse utibaGetAgentResponse = utibaClientProxy.getAgentByReference(new getAgentByReference() { getAgentByReferenceRequest = new getAgentByReferenceRequest() { sessionid = sessionID, device_type = request.DeviceType, reference = request.Agent, category = "agent" } }); StringBuilder sb = new StringBuilder(); foreach (var agentData in utibaGetAgentResponse.AgentReturn.agent.agentData) { sb.Append("agentData={key=" + agentData.key + ",value=" + agentData.value + "},"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [RECV-DATA] agentResponse {transid=" + utibaGetAgentResponse.AgentReturn.transid + ",result=" + utibaGetAgentResponse.AgentReturn.result + ",result_namespace=" + utibaGetAgentResponse.AgentReturn.result_namespace + ",agent={ID=" + utibaGetAgentResponse.AgentReturn.agent.ID + ",referenceID=" + utibaGetAgentResponse.AgentReturn.agent.referenceID + ",agentID=" + utibaGetAgentResponse.AgentReturn.agent.agentID + ",ownerID=" + utibaGetAgentResponse.AgentReturn.agent.ownerID + ",name=" + utibaGetAgentResponse.AgentReturn.agent.name + ",MSISDN=" + utibaGetAgentResponse.AgentReturn.agent.MSISDN + ",reference=" + utibaGetAgentResponse.AgentReturn.agent.reference + ",entityReference={reference=" + utibaGetAgentResponse.AgentReturn.agent.entityReference.reference + "}" + ",salt=" + utibaGetAgentResponse.AgentReturn.agent.salt + ",emailAddress=" + utibaGetAgentResponse.AgentReturn.agent.emailAddress + ",SMSAddress=" + utibaGetAgentResponse.AgentReturn.agent.SMSAddress + ",Language=" + utibaGetAgentResponse.AgentReturn.agent.Language + ",upstream=" + utibaGetAgentResponse.AgentReturn.agent.upstream + ",status=" + utibaGetAgentResponse.AgentReturn.agent.status + ",agentType=" + utibaGetAgentResponse.AgentReturn.agent.agentType + ",primaryGroup=" + utibaGetAgentResponse.AgentReturn.agent.primaryGroup + ",depth=" + utibaGetAgentResponse.AgentReturn.agent.depth + "," + sb.ToString() + ",createdDate=" + utibaGetAgentResponse.AgentReturn.agent.createdDate + ",organisation=" + utibaGetAgentResponse.AgentReturn.agent.organisation + ",DSComission=" + utibaGetAgentResponse.AgentReturn.agent.DSComission + ",POSComission=" + utibaGetAgentResponse.AgentReturn.agent.POSComission + ",category=" + utibaGetAgentResponse.AgentReturn.agent.category + "}}"); Func <String, KeyValuePair[], String> findItem = (k, a) => { if (a != null) { var node = a.FirstOrDefault(kvp => kvp.key.Equals(k)); if (node != null) { return(node.value); } } return(null); }; if (utibaGetAgentResponse != null && utibaGetAgentResponse.AgentReturn.result == 0) { response = new GetAgentInfoResponseBody() { ResponseCode = Utils.BuildResponseCode(utibaGetAgentResponse.AgentReturn.result, utibaGetAgentResponse.AgentReturn.result_namespace), ResponseMessage = utibaGetAgentResponse.AgentReturn.result_namespace, TransactionID = utibaGetAgentResponse.AgentReturn.transid, AgentInfo = new AgentInfo() { Agent = request.Agent, NationalIDType = findItem("nat_id_type", utibaGetAgentResponse.AgentReturn.agent.agentData), NationalID = findItem("nat_id", utibaGetAgentResponse.AgentReturn.agent.agentData), Address = utibaGetAgentResponse.AgentReturn.agent.address ?? findItem("address", utibaGetAgentResponse.AgentReturn.agent.agentData), Email = utibaGetAgentResponse.AgentReturn.agent.emailAddress, Name = utibaGetAgentResponse.AgentReturn.agent.name, Depth = utibaGetAgentResponse.AgentReturn.agent.depth, BirthDate = findItem("dob", utibaGetAgentResponse.AgentReturn.agent.agentData), Gender = findItem("gender", utibaGetAgentResponse.AgentReturn.agent.agentData), LegalName = findItem("legal_name", utibaGetAgentResponse.AgentReturn.agent.agentData), //Elementos privados AgentID = utibaGetAgentResponse.AgentReturn.agent.agentID, ReferenceID = utibaGetAgentResponse.AgentReturn.agent.referenceID, OwnerID = utibaGetAgentResponse.AgentReturn.agent.ownerID, BranchID = utibaGetAgentResponse.AgentReturn.agent.agentID } }; } else { response = new GetAgentInfoResponseBody { ResponseCode = 99, ResponseMessage = "Ocurrio un problema procesando su solicitud" }; } return(response); }
private static String GetSessionIDEL(IMovilwayApiRequest request, String LOG_PREFIX = null) { if (request != null) { //SE COMENTA LA VALIDACION DEL TOKEN DE KIANCU //var sessionRequest = new GetSessionRequestBody() //{ // Username = request.AuthenticationData.Username, // Password = request.AuthenticationData.Password, // DeviceType = request.DeviceType //}; //if (!String.IsNullOrEmpty(request.AuthenticationData.SessionID)) //{ // int userId; // long timeOut; // string userName, userLastName, userAddress, message; // ManagementInterface managementWS = new ManagementInterface(); // //validacion de la session ID de Kinacu // if (managementWS.GetUserInfo(int.Parse(request.AuthenticationData.SessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message)) // { // return (request.AuthenticationData.SessionID); // } // else // { // //solicita nueva mente un SessionId // if (!string.IsNullOrEmpty(request.AuthenticationData.Username) && // !string.IsNullOrEmpty(request.AuthenticationData.Password)) // { // var getSessionResponse = new ServiceExecutionDelegator // <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( // //new GetSessionRequestBody() // // { // // Username = request.AuthenticationData.Username, // // Password = request.AuthenticationData.Password, // // DeviceType = request.DeviceType // // } // sessionRequest // , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); // if (getSessionResponse.ResponseCode == 0 && // !string.IsNullOrEmpty(getSessionResponse.SessionID) && // !getSessionResponse.SessionID.Equals("0")) // return getSessionResponse.SessionID; // else // throw new Exception(getSessionResponse.ResponseMessage); // } // throw new Exception("DATOS DE AUTENTICACION INVALIDOS"); // } //} //else //{ //CONDICION INICIAL PARA VALIDAR CREDENCIALES if (String.IsNullOrEmpty(request.AuthenticationData.SessionID)) { var sessionRequest = new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }; var getSessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( //new GetSessionRequestBody() // { // Username = request.AuthenticationData.Username, // Password = request.AuthenticationData.Password, // DeviceType = request.DeviceType // } sessionRequest , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); if ((getSessionResponse.ResponseCode == 0 || getSessionResponse.ResponseCode == 1013) && !string.IsNullOrEmpty(getSessionResponse.SessionID) && !getSessionResponse.SessionID.Equals("0")) { return(getSessionResponse.SessionID); } else { throw new Exception(getSessionResponse.ResponseMessage); } } else { var _log_prefix = String.IsNullOrEmpty(LOG_PREFIX) ? "[LOG PREFIX DOESN'T HAVE VALUE]" : LOG_PREFIX; logger.InfoLow(String.Concat("[API] ", _log_prefix, " SESSION ID IS DEFINED IN REQUEST")); return(request.AuthenticationData.SessionID); } // } } return("error"); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new InformPaymentResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0 } } ; InformPaymentRequestBody request = requestObject as InformPaymentRequestBody; InformPaymentResponseBody response = null; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[InformPaymentProvider] [SEND-DATA] informPaymentParameters {amount=" + request.Amount + ",targentAgentId=" + request.TargetAgentId + ",hasDeposit=" + request.HasDeposit + ",accountId=" + request.AccountId + ",transactionReference=" + request.TransactionReference + ",transactionDate=" + request.TransactionDate + ",sucursalNumber=" + request.SucursalNumber + ",sucursalName=" + request.SucursalName + ",comment=" + request.Comment + ",immediatelyDistribute=" + request.ImmediatelyDistribute + "}"); string responseCode = "99", message = "error"; bool result = false; int usrId = new IBank.Utils().GetUserId(request.AuthenticationData.Username); if (request.TargetAgentId > 0) { if (!IsValid(request)) { return(new InformPaymentResponseBody() { ResponseCode = 80, ResponseMessage = "Datos incompletos", TransactionID = 0 }); } string bankAccount = new IBank.Utils().GetBankNumber(request.AccountId); if (request.ImmediatelyDistribute) { //result = new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().RegistroPago(decimal.Parse(request.TargetAgentId.ToString()), request.Amount, request.TransactionReference, request.TransactionDate, bankAccount, (request.HasDeposit ? "S" : "N"), ref responseCode, ref message, request.Comment, decimal.Parse(request.TransactionReference), DateTime.UtcNow.AddHours(new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetTimeZone())); result = new IBank.Utils().RegistroDepositoAcreditaSaldo(decimal.Parse(request.TargetAgentId.ToString()), usrId, request.Amount, request.TransactionReference, request.TransactionDate, bankAccount, ref responseCode, ref message, request.Comment, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.SucursalNumber.ToString(), request.SucursalName); } else { result = new IBank.Utils().RegistrarDeposito(request.TargetAgentId, usrId, request.Amount, request.TransactionReference, request.TransactionDate, bankAccount, request.Comment, ref responseCode, ref message, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.SucursalNumber.ToString(), request.SucursalName); } } else { //int ageId = new IBank.Utils().GetAgentId(request.AuthenticationData.Username); int prodcut = -1; String res = ""; KinacuLogisticsWebService.LogisticsInterface logisticsInterface = new KinacuLogisticsWebService.LogisticsInterface(); result = logisticsInterface.CreateProductRequest(Convert.ToInt32(sessionID), 0, (int)request.Amount * 100, out prodcut, out res); if (result) { responseCode = "00"; message = "TRANSACCION OK"; } else { responseCode = Movilway.API.Core.UtilResut.StrErrorCode(1); message = res; } //result = new IBank.Utils().RegistrarSolicitudProducto(ageId, request.Amount, request.TransactionDate, ref responseCode, ref message); } response = new InformPaymentResponseBody() { ResponseCode = int.Parse(responseCode), ResponseMessage = message, TransactionID = 0 }; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[InformPaymentProvider] [RECV-DATA] informPaymentResult {ResponseCode=" + responseCode + ",ResponseMessage=" + message + ",TransactionID=" + 0 + "}"); return(response); }
/// <summary> /// Ejecuta la operacion validando los constrains de seguridad /// /// </summary> /// <param name="request"></param> /// <returns></returns> public IMovilwayApiResponse PerformSecureOperation(IMovilwayApiRequest request) { IMovilwayApiResponse response = null; //DATOS DE AUTENTICACION try { InitPrefix(); PrintLoginValues(request); //Validaciones de seguridad teniendo en cuenta los datos de la peticion SecureValidation(request); SecureAccessValidation(request); // String sessionID = null; if (!(request is GetSessionRequestBody)) { sessionID = GetSessionID(request); } SaleInterface kinacuWS = new SaleInterface(); // // CONDIGURACION INTERFAZ int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]); kinacuWS.Timeout = timeOutSeconds * 1000; response = PerformKinacuOperation(request, kinacuWS, sessionID); #region secondrequest //if (!ValidateNumberOfExecution(request)) // response = PerformKinacuOperation(request, kinacuWS, sessionID); //else //{ // if (_delegateSecondExecution == null) // throw new Exception("NO SE HA DEFINIDO EL MANEJADOR PARA LA SEGUNDA PETICION"); // bool isNew = false; // Func<int> callback = delegate() // { // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS NEW]"); // isNew = true; // return 1; // }; // int hascode = request.GetHashCode(); // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST VALIDATION] [" + hascode + "] "+_cacheRequest.ToString()); // //Action<object,object> oncache= delegate(object k , object v) // // { // // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS DOUBLE]"); // // isNew = false; // // }; // _cacheRequest.GetValue<int>(hascode, callback);//, oncache); // if (isNew) // { // response = PerformKinacuOperation(request, kinacuWS, sessionID); // } // else // { // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [SecondExecution]"); // response = _delegateSecondExecution (request, kinacuWS, sessionID); // } //} #endregion if (bool.Parse(ConfigurationManager.AppSettings["LogoffAuto"] ?? "true")) { logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [SEND-DATA] logoffParameters {userid=" + sessionID + "}"); kinacuWS.LogOff(int.Parse(sessionID)); logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [RECV-DATA] logoffResult {nothing}"); } logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [OUTPUT] " + response.ToString()); } catch (Exception e) { logger.ErrorLow("[API] " + LOG_PREFIX + "[KinacuProvider] [EXCEPTION] Exception trying to serve KINACU Operation {message=" + e.Message + ",stackTrace=" + e.StackTrace + "}"); //SE DELEGA EL MANEJO DE LA EXPECION A QUIEN LO INVOCA GENERALMENTE SERVICEEXECUTIONDELEGATOR throw; #region intento de respuesta anterior //Type a = this.GetType().GetMethod("PerformOperation").ReturnType; //response = new AGenericApiResponse() { ResponseCode = 99, ResponseMessage = e.Message, TransactionID = 0 }; //Type name = MethodBase.GetCurrentMethod().GetType(); //ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e)); #endregion } return(response); }
protected virtual bool ValidateNumberOfExecution(IMovilwayApiRequest request) { return(false); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetSalesSummaryResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, FinalAmount = 0m, InitialAmount = 0m, Summaries = new SummaryItems(), SummaryDate = DateTime.Now } } ; GetSalesSummaryRequestBody request = requestObject as GetSalesSummaryRequestBody; GetSalesSummaryResponseBody response = null; ManagementInterface managementWS = new ManagementInterface(); LogisticsInterface logisticsWS = new LogisticsInterface(); string message; #region comentario //int voucherQtyDownload, retailerId; //string retailerName, retailerAddress, retailerLegalId, ticketHeader, currentTime; //if (!managementWS.GetRetailerInfo(int.Parse(sessionID), out retailerId, out retailerName, out retailerAddress, out retailerLegalId, out voucherQtyDownload, out ticketHeader, out currentTime, out message)) //{ // return new GetSalesSummaryResponseBody() // { // ResponseCode = 97, // ResponseMessage = message, // Summaries = null, // SummaryDate = request.Date, // TransactionID = new Random().Next(100000, 999999) // }; //} //int userId; //long timeOut; //string userName, userLastName, userAddress; //if (!managementWS.GetUserInfo(int.Parse(sessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message)) //{ // return new GetSalesSummaryResponseBody() // { // ResponseCode = 98, // ResponseMessage = message, // Summaries = null, // SummaryDate = request.Date, // TransactionID = new Random().Next(100000, 999999) // }; //} #endregion /* Se comenta porque no hace nada (sólo reventar en caso de overflow * int amount, count; * * if (!kinacuWS.SaleCountBySeller(int.Parse(sessionID), out amount, out count, out message)) * { * return new GetSalesSummaryResponseBody() * { * ResponseCode = 99, * ResponseMessage = message, * Summaries = null, * SummaryDate = request.Date, * TransactionID = new Random().Next(100000, 999999) * }; * }*/ //long balance = kinacuWS.GetAccountBalance(int.Parse(sessionID), out message); SummaryItems summary = new SummaryItems(); decimal initialAmount, finalAmount; if (request.SummaryType == null || request.SummaryType.Equals(SummaryType.NotSpecified) || request.SummaryType.Equals(SummaryType.ByUser)) { summary = Utils.SalesSummary(request.AuthenticationData.Username, request.Date); response = new GetSalesSummaryResponseBody() { ResponseCode = 0, ResponseMessage = "OK", Summaries = summary, SummaryDate = request.Date, TransactionID = new Random().Next(100000, 999999) }; } else { summary = Utils.SalesSummaryByAgent(request.AuthenticationData.Username, request.Date, out initialAmount, out finalAmount); response = new GetSalesSummaryResponseBody() { ResponseCode = 0, ResponseMessage = "OK", Summaries = summary, SummaryDate = request.Date, TransactionID = new Random().Next(100000, 999999), InitialAmount = initialAmount, FinalAmount = finalAmount }; } // Asignar Nombre de agencia y fecha de impresion if (response != null) { response.BranchName = Utils.GetAgentName(request.AuthenticationData.Username); response.DatePrinter = Utils.GetLocalTimeZone().ToString("yyyy-MM-dd HH:mm:ss"); } //response.Summaries = new SummaryItems(); //if (request.WalletType == WalletType.Stock) // response.Summaries.Add(new SummaryItem() { TotalAmount = amount / 100m, TransactionCount = count, TransactionType = "Recargas y pines" }); //else // response.Summaries.Add(new SummaryItem() { TotalAmount = 0, TransactionCount = 0, TransactionType = "Recargas y pines" }); logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetSalessSummaryResult]").Tag(" GetSalesSummaries ").Value(response.Summaries.Count)); return(response); } }
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; }
public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject) { try { //validar una vez la ip //ASecuredApiRequest securityrequest = null; GetSessionResponseBody responseBody = null; switch (_securemode) { case ApiSecurityMode.CREDENTIALS: //securityrequest = Reflection.FactoryObject<ASecuredApiRequest>(typeof(ASecuredApiRequest)); //securityrequest.AuthenticationData = new AuthenticationData(); //securityrequest.AuthenticationData.Username = requestObject.AuthenticationData.Username; //securityrequest.AuthenticationData.Password = requestObject.AuthenticationData.Password; //securityrequest.AuthenticationData.SessionID = requestObject.AuthenticationData.SessionID; //securityrequest.AuthenticationData.Tokken = requestObject.AuthenticationData.Tokken; responseBody = new ServiceExecutionDelegator <GetSessionResponseBody, IMovilwayApiRequest>().ResolveRequest( requestObject , _target, ApiServiceName.GetSession); break; case ApiSecurityMode.USER: //securityrequest = Reflection.FactoryObject<ASecuredApiRequest>(typeof(ASecuredApiRequest)); //securityrequest.AuthenticationData = new AuthenticationData(); //securityrequest.AuthenticationData.Username = requestObject.AuthenticationData.Username; //securityrequest.AuthenticationData.Password = requestObject.AuthenticationData.Password; //securityrequest.AuthenticationData.SessionID = string.Empty; //securityrequest.AuthenticationData.Tokken = string.Empty; responseBody = new ServiceExecutionDelegator <GetSessionResponseBody, IMovilwayApiRequest>().ResolveRequest( requestObject , _target, ApiServiceName.GetSession); break; } if (responseBody.ResponseCode == 0)//&& tokken es valido { // si la validacion es segura return(_serviceImpl.PerformOperation(requestObject)); } else { IMovilwayApiResponse response = Reflection.FactoryObject <IMovilwayApiResponse>(_typeresponse); response.ResponseCode = 90; response.ResponseMessage = responseBody.ResponseMessage; //"ERROR DE SEGURIDAD DATOS ASOCIADOS AL TOKKEN INVALIDO"; return(response); } } catch (Exception ex) { //TODO DESHABILITAR LA EJECUCION DE EST HANDLER IMovilwayApiResponse response = Reflection.FactoryObject <IMovilwayApiResponse>(_typeresponse); response.ResponseCode = 500; response.ResponseMessage = "ERROR INESPERADO EJECUTANDO SECUREPROVIDER"; logger.ErrorHigh(String.Concat(response.ResponseCode, "-", response.ResponseMessage, " ", ex.Message, "-.", ex.StackTrace)); return(response); } }
protected override bool ValidateNumberOfExecution(IMovilwayApiRequest request) { return(_secondRequestBandera);//request.DeviceType == cons.ACCESS_H2H || request.DeviceType == cons.ACCESS_POSWEB; }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new ProcessDistributionResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0 } } ; ProcessDistributionRequestBody request = requestObject as ProcessDistributionRequestBody; ProcessDistributionResponseBody response = null; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] [SEND-DATA] processDistributionParameters {comment=" + request.Comment + ",immediatelyDistribute=" + request.ImmediatelyDistribute + ",isApproved=" + request.IsApproved + ",distributionId=" + request.DistributionId + "}"); string responseCode = "99", message = "error"; DistributionSummary deposit; var isProductRequest = request.AccountId == 0; var result = false; int usrId = new IBank.Utils().GetUserId(request.AuthenticationData.Username); if (isProductRequest) { deposit = new IBank.Utils().GetSolicitudProducto(request.DistributionId); if (request.IsApproved) { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] isProductRequest y isApproved"); //deposit.HasDeposit = false; result = new IBank.Utils().ProcesaSolicitudProducto(deposit.OriginalDistributionID, usrId, deposit.TargetAgentID, deposit.Amount, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.Comment, ref responseCode, ref message); } else { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] isProductRequest y not isApproved"); result = new IBank.Utils().RechazaSolicitudProducto(deposit.OriginalDistributionID, deposit.TargetAgentID, usrId, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.Comment, ref responseCode, ref message); } } else { deposit = new IBank.Utils().GetSolicitud(request.DistributionId); deposit.HasDeposit = true; //TODO escenario prueba dos registro pago // deposit.HasDeposit = false; // if (request.IsApproved) { if (request.ImmediatelyDistribute) { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] not isProductRequest y isApproved y immediatelyDist"); result = new IBank.Utils().RegistroPago(deposit.TargetAgentID, usrId, deposit.Amount, deposit.ReferenceNumber, deposit.DepositDate, deposit.AccountNumber, deposit.HasDeposit ? "S" : "N", ref responseCode, ref message, request.Comment, request.DistributionId, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone())); } else { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] not isProductRequest y isApproved y not immediatelyDist"); result = new IBank.Utils().ProcesaAvisoDeposito(deposit.OriginalDistributionID, deposit.TargetAgentID, usrId, deposit.Amount, deposit.ReferenceNumber, deposit.DepositDate, deposit.AccountNumber, request.Comment, ref responseCode, ref message); } //result = new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().RegistrarDeposito(deposit.TargetAgentID, deposit.Amount, deposit.ReferenceNumber, deposit.DepositDate, deposit.AccountNumber, request.Comment, ref responseCode, ref message, DateTime.UtcNow.AddHours(new Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetTimeZone()), "", ""); } else { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] not isProductRequest y not isApproved"); result = new IBank.Utils().RechazaAvisoDeposito(deposit.OriginalDistributionID, deposit.TargetAgentID, usrId, DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()), request.Comment, ref responseCode, ref message); } } response = new ProcessDistributionResponseBody() { ResponseCode = int.Parse(responseCode), ResponseMessage = message, TransactionID = 0 }; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[ProcessDistributionProvider] [RECV-DATA] processDistributionResult {response={" + responseCode + "," + message + "}}"); return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems() } } ; GetPurchasesSummaryDashBoardRequestBody request = requestObject as GetPurchasesSummaryDashBoardRequestBody; GetPurchasesSummaryDashBoardResponseBody response = null; ManagementInterface managementWS = new ManagementInterface(); LogisticsInterface logisticsWS = new LogisticsInterface(); string message; PurchasesSummaryDashBoardItems summary = new PurchasesSummaryDashBoardItems(); summary = Utils.PurchasesSummaryByAgentDashBoard(request.AuthenticationData.Username, request.InitialDate, request.EndDate, out message); if (message.Equals("OK")) { decimal auxTotalPurchases = 0; if (summary != null) { auxTotalPurchases = summary.Sum(r => r.TotalAmount); } CommissionPurchasesSummaryDashItem summaryCommi = new CommissionPurchasesSummaryDashItem(); summaryCommi = Utils.CommissionPurchasesSummaryByAgentDashBoard(request.AuthenticationData.Username, request.InitialDate, request.EndDate, out message); if (message.Equals("OK") && summaryCommi != null) { response = new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 0, ResponseMessage = message, PurchasesSummariesDashBoard = summary, SummaryDate = request.EndDate, TransactionID = 0, TotalPurchases = auxTotalPurchases, TotalRevenue = summaryCommi.TotalCommiPurchases, AverageCommission = summaryCommi.CommiPercentage }; } else { response = new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 90, ResponseMessage = message, PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems(), SummaryDate = request.EndDate, TransactionID = 0 }; } } else { response = new GetPurchasesSummaryDashBoardResponseBody() { ResponseCode = 90, ResponseMessage = message, PurchasesSummariesDashBoard = new PurchasesSummaryDashBoardItems(), SummaryDate = request.EndDate, TransactionID = 0 }; } logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[GetPurchasesSummaryDashBoardResult]").Tag(" GetPurchasesSummaryDashBoardProvider ").Value(response.PurchasesSummariesDashBoard.Count).Tag("Mensaje").Value(message)); return(response); } }
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); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID) { string providerName = "CreditNoteProvider"; MonthlyReportRequestBody request = requestObject as MonthlyReportRequestBody; MonthlyReportResponseBody response = new MonthlyReportResponseBody() { ResponseCode = 90, ResponseMessage = "Error inesperado", TransactionID = 0 }; if (sessionID.Equals("0")) { response.ResponseMessage = "Error de sesion"; return(response); } try { using (SqlConnection connection = Movilway.API.Utils.Database.GetKinacuDbConnection()) { connection.Open(); // db.db = connection; var cmd = connection.CreateCommand(); cmd.Parameters.AddWithValue("rep_type", request.ReportType.ToString()); cmd.Parameters.AddWithValue("acc_login", request.AuthenticationData.Username); cmd.Parameters.AddWithValue("tac_id", request.DeviceType); cmd.Parameters.AddWithValue("state", "PE"); cmd.Parameters.AddWithValue("executiondate", request.ExecutionDate); cmd.CommandText = @" DECLARE @usr_id as decimal(5,0) SELECT @usr_id = [usr_id] FROM [dbo].[Acceso] WHERE [acc_login] = @acc_login and [tac_id] = @tac_id declare @dateDiff as int = (SELECT CAST(par_valor as int) FROM [Parametro] WITH(NOLOCK) WHERE par_id ='TimeDifference') declare @date as datetime = dateadd(minute,@dateDiff,getdate()) INSERT INTO [dbo].[MwReportRequest] ([rep_type] ,[usr_id] ,[state] ,[req_date] ,[executiondate] ) VALUES (@rep_type ,CONVERT ( INT ,isnull( @usr_id,0)) ,@state ,@date ,@executiondate ) SELECT @@IDENTITY "; var result = cmd.ExecuteScalar(); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ReportProvider] Result " + result); long _tran = 0; if (result != null) { if (!long.TryParse(result.ToString(), out _tran)) { _tran = 0; } response.ResponseCode = 0; response.ResponseMessage = "OK"; response.TransactionID = (int)_tran; } } } catch (Exception ex) { ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(providerName) .Exception(ex)); } finally { } logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [RECV-DATA] ReportProviderResult {response={" + response + "}}"); return(response); }
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); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID) { SetStateTrustedDeviceRequestBody request = (SetStateTrustedDeviceRequestBody)requestObject; SetStateTrustedDeviceResponseBody response = new SetStateTrustedDeviceResponseBody(); try { if (sessionID.Equals("0")) { response.ResponseMessage = "error session"; response.ResponseCode = 90; return(response); } if (request.DeviceType != (int)cons.ACCESS_POSWEB) { response.ResponseCode = 90; response.ResponseMessage = "NO ESTA AUTORIZADO PARA ACCEDER A ESTE SERVICIO";//"ERROR INESPERADO"; response.TransactionID = 0; return(response); } //se obtiene el dispositivo //GenericApiResult<TrustedDevice> resultadodevice = Utils.GetDeviceId(request.DeviceID); // response.ResponseCode = resultadodevice.ResponseCode; // response.ResponseMessage = resultadodevice.ResponseMessage; // if(resultadodevice.IsObjectValidResult()){ // TrustedDevice device = resultadodevice.ObjectResult; //device.Status = request.Status; bool result = Utils.SetStatusDevice(new TrustedDevice() { ID = request.DeviceID, Status = request.Status }); if (result) { response.Result = result; response.ResponseCode = 0; response.ResponseMessage = "OK"; } else { response.ResponseCode = 101; response.ResponseMessage = string.Concat("NO SE PUDO CAMBIAR DE ESTADO DISPOSITIVO ", request.DeviceID); } //} } catch (Exception ex) { response.ResponseCode = 500; response.ResponseMessage = string.Concat("ERROR INESPERADO CAMBIANDO ESTADO DISPOSITIVO ", request.DeviceID, " ", ex.Message, " ", ex.StackTrace); logger.ErrorLow(String.Concat("[API] ", base.LOG_PREFIX, "[SetStateTrustedDeviceProvider] ", "-", response.ResponseCode, "-", response.ResponseMessage, ". Exception: ", ex.Message, ". ", ex.StackTrace)); } return(response); }
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); }
/// <summary> /// Valida que el acceso este activo y se ha valido /// </summary> /// <returns></returns> public void IsValidAccess(IMovilwayApiRequest request)//GenericApiResult<bool> { logger.InfoHigh(String.Concat(LOG_PREFIX, " IsValidAccess ")); bool acceso = true; // GenericApiResult<bool> result = new GenericApiResult<bool>(true); TrustedDevice device = null; //TODO quitar device = new TrustedDevice() { Status = cons.DEVICE_ACTIVE }; string message = ""; try { if (string.IsNullOrEmpty(request.AuthenticationData.Tokken)) { message = "NO SE ENVIO EL TOKKEN DE AUTENTICACION"; logger.ErrorHigh(String.Concat(LOG_PREFIX, message)); throw new Exception(message); } String jsonDecrypt = Cryptography.decrypt(request.AuthenticationData.Tokken); logger.InfoHigh(() => TagValue.New().Message(String.Concat(LOG_PREFIX, " ACCESS TOKKEN ")).Tag("DATA").Value(jsonDecrypt)); Dictionary <string, string> dictionary = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonDecrypt); DateTime NowUtc = DateTime.UtcNow; DateTime AccessDtUtc = DateTime.ParseExact(dictionary["Fecha"], "yyyyMMdd HH:mm:ss", null); logger.InfoHigh(String.Concat("FECHAS UTC ", NowUtc.ToString("yyyyMMdd HH:mm:ss"), " - ", AccessDtUtc.ToString("yyyyMMdd HH:mm:ss"))); if ((NowUtc - AccessDtUtc) > t) { throw new SecurityException("EL TIEMPO DEL TOKKEN SE HA EXPIRADO"); } // // buscar en los accessos de la base de datos // string strConnString = ConfigurationManager.ConnectionStrings["SECURE_DB"].ConnectionString; // using (SqlConnection mySqlConnection = new SqlConnection(strConnString)) // { // mySqlConnection.Open(); // SqlCommand mySqlCommand = mySqlConnection.CreateCommand(); // //select by serial // mySqlCommand.CommandText = @" // SELECT Device.DeviceId, Device.UserId, Device.Token, Device.Hash, Device.DeviceTypeId, Device.FriendlyName, Device.Description, Device.DateActivated, Device.Status, Device.LastAccess, Device.DateBlocked, // Device.Model, Device.OS, DeviceType.Name AS Type //FROM Device INNER JOIN // DeviceType ON Device.DeviceTypeId = DeviceType.DeviceTypeId WHERE Device.Token = @SerialTokken AND Device.UserId = @userId "; // //mySqlCommand.Parameters.AddWithValue("@SerialTokken", token); // //mySqlCommand.Parameters.AddWithValue("@userId", userid); // using (var reader = mySqlCommand.ExecuteReader()) // { // if (reader.HasRows && reader.Read()) // { // device = new TrustedDevice() // { // ID = (long)((int)reader["DeviceId"]), // UserId = (int)reader["UserId"], // Token = (string)reader["Token"], // Hash = (string)reader["Hash"], // //-- // IdType = (int)reader["DeviceTypeId"], // Type = (string)reader["Type"], // //-- // FriendlyName = (string)reader["FriendlyName"], // DateActivated = (DateTime)reader["DateActivated"], // Status = (Int16)reader["Status"], // }; // } // else // throw new Exception("NO SE ECONTRARON DATOS DEL ACCESO SEGUN LA AUTENTICACION"); // } // } if (device.Status != cons.DEVICE_ACTIVE) { message = "ACCESSO NO VALIDO"; logger.ErrorHigh(String.Concat(LOG_PREFIX, message)); //RECONSIDERAR RETORNULL throw new SecurityException(message); } } catch (Exception ex) { if (!(ex is SecurityException)) { logger.InfoHigh(String.Concat(LOG_PREFIX, " ERROR INESPERADO VALIDANDO ACCESO ", ex.Message, " - ", ex.StackTrace)); } throw; } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID) { if (sessionID.Equals("0")) { return new GetTransactionResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, Amount = 0m, Creditor = "", Debtor = "", Initiator = "", OriginalTransactionId = "", Recipient = "", TransactionDate = DateTime.Now, TransactionType = "" } } ; GetTransactionRequestBody request = requestObject as GetTransactionRequestBody; GetTransactionResponseBody response = null; try { SaleData saleData = null; string message = "", methodName = "saleState"; switch (request.ParameterType) { case GetTransactionRequestParameterType.ExternalTransactionReference: methodName = "saleStateByExternalId"; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateByExternalIdParameters {UserId=" + sessionID + ",ExternalId=" + request.ParameterValue + "}"); saleData = kinacuWS.SaleStateByExternalId(int.Parse(sessionID), request.ParameterValue, out message); response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message); break; case GetTransactionRequestParameterType.TransactionID: logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=" + request.ParameterValue + ",Target=}"); int param; if (int.TryParse(request.ParameterValue, out param)) { saleData = kinacuWS.SaleState(int.Parse(sessionID), param, "", out message); response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message); } else { response = new GetTransactionResponseBody() { ResponseCode = 91, ResponseMessage = "Transaccion no encontrada", TransactionID = 0, TransactionResult = 0, OriginalTransactionId = "0", TransactionDate = DateTime.Now, TransactionType = "topup" } }; break; case GetTransactionRequestParameterType.TargetAgent: logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=0,Target=" + request.ParameterValue + "}"); saleData = Utils.GetSaleStateByTargent(request.AuthenticationData.Username, request.ParameterValue, out message); //kinacuWS.SaleState(int.Parse(sessionID), 0, request.ParameterValue, out message); response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message); break; case GetTransactionRequestParameterType.TransactionType: logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=0,Target=}"); saleData = kinacuWS.SaleState(int.Parse(sessionID), 0, "", out message); response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message); break; case GetTransactionRequestParameterType.LastTransaction: logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] saleStateParameters {UserId=" + sessionID + ",IdTransaction=0,Target=" + request.ParameterValue + "}"); saleData = kinacuWS.SaleState(int.Parse(sessionID), 0, "", out message); response = MapKinacuTransactionResponseToGetTransactionResponseBody(saleData, message); break; case GetTransactionRequestParameterType.DistributionExternalTransactionReference: logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [SEND-DATA] getDistributionState {Target=" + request.ParameterValue + "}"); response = MapDistributionToGetTransactionResponseBody(request); break; } if (saleData != null) { response.ResponseMessage = Movilway.API.Utils.ApiTicket.FormatSaledata(logger, "GetTransactionProvider", request, base.LOG_PREFIX, response.ResponseCode.Value == 0, response.TransactionID.Value, response.ResponseMessage); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [RECV-DATA] " + methodName + "Result {saleState={IdTransaction=" + saleData.IdTransaccion + ",Customer=" + saleData.Customer + ",Amount=" + saleData.Amount + ",Date=" + saleData.Date + ",ReloadState=" + saleData.ReloadState + ",ReloadStateCode=" + saleData.ReloadStateCode + "},message=" + message + "}"); } else { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetTransactionProvider] [RECV-DATA] " + methodName + "Result {saleState={IdTransaction=,Customer=,Amount=,Date=,ReloadState=,ReloadStateCode=},message=" + message + "}"); } #region se incluye obtiene el saldo en caso de ser necesario //Se realiza la validacion afuera del metodo GetBalance //con el fin de no manejar valores nulos en los metodos //y asignar algun valor al triburo StockBlance de ser necesario if ( _GetBalance && request.DeviceType == Movilway.API.Core.cons.ACCESS_POS ) { response.StockBalance = GetBalance(request); } } catch (Exception ex) { logger.ErrorHigh(() => TagValue.New().MethodName("GetTransaction").Message(base.LOG_PREFIX + " ERROR BUSCANDO TRANSACCION CON REFERENCIA [" + request.ParameterValue + "]").Exception(ex)); if (ex.InnerException != null) { logger.ErrorHigh(() => TagValue.New().MethodName("GetTransaction").Message(base.LOG_PREFIX + " INNER EXCEPTION " + request.ParameterValue).Exception(ex.InnerException)); } response = new GetTransactionResponseBody() { ResponseCode = 99, ResponseMessage = "Error inesperado consultando la transaccion, consulte a su administrador.", TransactionID = 0, OriginalTransactionId = "", Amount = 0, Recipient = "", TransactionDate = DateTime.Now, TransactionResult = 99, TransactionType = "", Initiator = "", Debtor = "", Creditor = "" }; } #endregion return(response); }
public abstract IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID);
/// <summary> /// Actualiza un agente en el sistema, tanto en el funente principal como en comisiones /// Precondicion: /// -el agente a editar debe ser hijo del agente logeado en el sistema /// -los datos del agente estan completos /// -los datos de los accesos estan completos, no repetidos y disponibles en el sistema /// </summary> /// <param name="requestObject"></param> /// <param name="kinacuWS"></param> /// <param name="sessionID"></param> /// <returns></returns> /// <returns>Retorna el tipo IMovilwayApiResponse con el respectivo codigo de error y mensaje</returns> public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID) { CreateAgentResponseBody response = new CreateAgentResponseBody(); try { if (sessionID.Equals("0")) { return new CreateAgentResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, Errors = new ErrorItems() { new ErrorItem() { ErrorId = "90", ErrorDescription = "Session invalida" } } } } ; CreateAgentRequestBody request = requestObject as CreateAgentRequestBody; logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[UpdateAgentProvider]").Tag("[RCV-DATA] UpdateAgentProviderParameters ").Value(request)); dynamic data = new { AgeId = request.AgeId, Login = request.AuthenticationData.Username }; if (!Utils.HaveRelationWithAgent(data)) { response.ResponseCode = 90; response.ResponseMessage = "ERROR DE PERMISOS"; response.TransactionID = 0; response.Errors = new ErrorItems() { new ErrorItem() { ErrorId = "90", ErrorDescription = "NO TIENE PERMISOS PARA EDITAR ESTE REGISTRO" } }; return(response); } //validacion de edicion de productos //precondicion: se ha validado que el agente es padre del hijo int AgeLogId = Utils.GetAgentIdByAccessPosWeb(request.AuthenticationData.Username); // se descarta que el usuario logoeado no se ha el mismo que se esta editando // tener encuenta casos especiales bool CanEditProdutcs = AgeLogId != request.AgeId; var result = Utils.ValidateSoldChildComissions(request.AgeId, request.Commission); //(request.AgeId, AgeLogId, request.Commission); if (!result.IsObjectValidResult()) { response.ResponseCode = 100; response.ResponseMessage = "[ERROR DE NEGOCIO] COMISION POR DEPOSITO"; response.Errors = new ErrorItems() { new ErrorItem() { ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage } }; return(response); } int currentUserId = Utils.GetUserId(request.AuthenticationData.Username); MD5 md5 = new MD5CryptoServiceProvider(); var reqAgent = new RequestAgent() { age_id = request.AgeId, age_cuit = request.RIF, age_nombre = request.AgentName, age_razonsocial = request.LegalName, age_direccion = request.Address, age_entrecalles = request.BetweenStreets, age_ciu_id = decimal.Parse(request.City), age_tel = request.Phone, age_cel = request.NumberIMEI, age_email = request.Email, age_contacto = request.ContactPerson, age_subNiveles = decimal.Parse(request.SubLevels), age_pdv = request.Pdv, age_observaciones = request.Notes, ct_id = request.TaxCategory, //Categoria Tributaria ta_id = 1, // Tipo de agencia sa_id = request.SegmentId, // segmento de la agencia age_tipo = "SU", age_autenticaterminal = "N", // Se quita este valor por peticion del usuario age_prefijosrest = string.Empty, age_estado = "AC", age_comisionadeposito = request.CommissionableDeposits ? "S" : "N", age_montocomision = request.Commission, //TODO NULL POINTER PROBLEMAS DE CULTIRA limiteCredito = request.CheckingAccountCreditLimit.ToString(), autorizacionAutomatica = request.AutomaticAuthorization.ToString(), quitaAutomatica = request.AutomaticReverse.ToString(), generacionAutomatica = request.AutomaticReposition.ToString(), montoMinimoPorPedido = request.MinimumOrderAmount.ToString(), montoMaximoPorPedido = request.MaximumOrderAmount.ToString(), pedidoMaximoMensual = request.MaximumMonthlyAmount.ToString(), autorizacionAutomaticaMontoDiario = request.MaximumAuthorizedDailyAmount.ToString(), recargaAsincronica = request.AsynchronousTopup.ToString(), comisionporventa = request.SalesCommission, usr_nombre = request.UserName1, usr_apellido = request.UserLastName1, acc_login = request.AccessLogin1, //segundo usuario //TODO cada ves que se actualiza se extiende el periodo de valdiacion acc_validityDate = DateTime.Now.AddDays(360), second_acc_validityDate = DateTime.Now.AddDays(360), third_acc_validityDate = DateTime.Now.AddDays(360), // primer acceso segundo usuario second_acc_login = request.AccessLogin2, /*request.AccessType2.ToUpper() == "POS" ? 6 : request.AccessType2.ToUpper() == "WEB" ? 1 : request.AccessType2.ToUpper() == "POSWEB" ? 12 : request.AccessType2.ToUpper() == "USSD" ? 9 : request.AccessType2.ToUpper() == "SMS" ? 2 : 0*/ //segundo acceso segundo usuario av_sc_ac_secondUser = request.AvailableSecondAccessSecondUser, third_acc_login = request.AccessLogin3, usr_administrador = request.IsAdministrator2, grpId = request.Group, //Valores Originales acc_cambiopassword = "******", second_acc_cambiopassword = "******", third_acc_cambiopassword = "******", usr_id_modificacion = currentUserId, age_modificacion = AgeLogId // //TODO //acc_cambiopassword = "", //second_acc_cambiopassword = "" // }; reqAgent.second_tac_id = Utils.GetAccessTypeCode(request.AccessType2); if (!string.IsNullOrEmpty(request.AccessType3)) { reqAgent.third_tac_id = Utils.GetAccessTypeCode(request.AccessType3); } if (!string.IsNullOrEmpty(request.AccessPassword1)) { reqAgent.acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword1))); } if (!string.IsNullOrEmpty(request.AccessPassword2)) { reqAgent.second_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword2))); } if (!string.IsNullOrEmpty(request.AccessPassword3)) { reqAgent.third_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword3))); } reqAgent.productos = new List <RequestAgent.Product>(); request.ProductsCommission.ForEach(p => { reqAgent.productos.Add(new RequestAgent.Product() { prdId = p.ProductId, comision = p.Commission }); }); result = Utils.UpdateAgent(reqAgent, CanEditProdutcs); response.ResponseCode = result.ResponseCode; response.ResponseMessage = result.ResponseMessage; response.TransactionID = 0; if (!result.IsObjectValidResult()) { response.ResponseCode = response.ResponseCode; response.ResponseMessage = _GenericError; var errors = new ErrorItems(); //errores del result errors.Add(new ErrorItem() { ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage }); response.Errors = errors; } } catch (Exception ex) { //cambiar error general erro inesperado response.ResponseCode = 500; response.ResponseMessage = _GenericError; response.TransactionID = 0; response.Errors = new ErrorItems() { new ErrorItem() { ErrorId = "90", ErrorDescription = ex.Message } }; string mensaje = String.Concat("[API] " + base.LOG_PREFIX + "[UpdateAgentProvider] ", ". Exception: ", ex.Message, ". ", ex.StackTrace); logger.ErrorLow(mensaje); } logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX).Tag("[UpdateAgentProviderResult]").Value(response)); return(response); }
public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { GetLastTransactionsRequestBody request = requestObject as GetLastTransactionsRequestBody; GetLastTransactionsResponseBody response = null; logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetLastTransactionsProvider] [SEND-DATA] lastTransactionsRequest {sessionid=" + sessionID + ",device_type=" + request.DeviceType + ",transCount=" + request.Count + ",agent=" + request.Agent + "}"); lastTransactionsResponse utibaGetLastTransactionsResponse = utibaClientProxy.lastTransactions(new lastTransactionsRequest() { lastTransactionsRequestType = new lastTransactionsRequestType() { sessionid = sessionID, device_type = request.DeviceType, agent = request.Agent, transCount = request.Count } }); StringBuilder sb = new StringBuilder(), sb2; foreach (var transaction in utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList) { sb2 = new StringBuilder(); foreach (var party in transaction.partiesReferenceIdList) { sb2.Append("partiesReferenceIdList=" + party + ","); } if (sb2.Length > 0) { sb2.Remove(sb2.Length - 1, 1); } sb.Append("transactionsList={transactionId=" + transaction.transactionId + ",transactionType=" + transaction.transactionType + ",lastModified=" + transaction.lastModified + ",amount=" + transaction.amount + "," + sb2.ToString() + "},"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetLastTransactionsProvider] [RECV-DATA] lastTransactionsResponse " + "{transid=" + utibaGetLastTransactionsResponse.lastTransactionsReturn.transid + ",result=" + utibaGetLastTransactionsResponse.lastTransactionsReturn.result + ",result_namespace=" + utibaGetLastTransactionsResponse.lastTransactionsReturn.result_namespace + "," + sb.ToString() + "}"); if (utibaGetLastTransactionsResponse != null) { response = new GetLastTransactionsResponseBody() { ResponseCode = Utils.BuildResponseCode(utibaGetLastTransactionsResponse.lastTransactionsReturn.result, utibaGetLastTransactionsResponse.lastTransactionsReturn.result_namespace), ResponseMessage = utibaGetLastTransactionsResponse.lastTransactionsReturn.result_namespace, TransactionID = utibaGetLastTransactionsResponse.lastTransactionsReturn.transid }; if (utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList != null && utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList.Length > 0) { response.Transactions = new TransactionList(); foreach (Movilway.API.Utiba.TransactionSummary transaction in utibaGetLastTransactionsResponse.lastTransactionsReturn.transactionsList) { DataContract.TransactionSummary currentTransactionSummary = new DataContract.TransactionSummary() { TransactionType = Utils.GetTransactionTypeName(transaction.transactionType), Amount = transaction.amount, LastTimeModified = transaction.lastModified, OriginalTransactionID = transaction.transactionId }; if (transaction.partiesReferenceIdList != null && transaction.partiesReferenceIdList.Length > 0) { currentTransactionSummary.RelatedParties = new RelatedParties(); currentTransactionSummary.RelatedParties.AddRange(transaction.partiesReferenceIdList); } response.Transactions.Add(currentTransactionSummary); } } } return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { CreateAgentResponseBody response = new CreateAgentResponseBody(); try { if (sessionID.Equals("0")) { return new CreateAgentResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, Errors = { new ErrorItem() { ErrorId = "90", ErrorDescription = "Session invalida" } } } } ; CreateAgentRequestBody request = requestObject as CreateAgentRequestBody; logger.InfoLow(() => TagValue.New().Message("[API] " + base.LOG_PREFIX + "[CreateAgentProvider]").Tag("[SEND-DATA] createAgentParameters ").Value(request)); int currentUserId = Utils.GetUserId(request.AuthenticationData.Username); /// OJO MD5 md5 = new MD5CryptoServiceProvider(); var result = Utils.ValidateSoldChildComissions(request.AuthenticationData.Username, request.Commission); if (!result.IsObjectValidResult()) { response.ResponseCode = 100; response.ResponseMessage = "[ERROR DE NEGOCIO] COMISION POR DEPOSITO"; response.Errors = new ErrorItems() { new ErrorItem() { ErrorId = "" + result.ResponseCode, ErrorDescription = result.ResponseMessage } }; return(response); } var reqAgent = new RequestAgent() { age_cuit = request.RIF, age_nombre = request.AgentName, age_razonsocial = request.LegalName, age_direccion = request.Address, age_entrecalles = request.BetweenStreets, age_ciu_id = decimal.Parse(request.City), age_tel = request.Phone, age_cel = request.NumberIMEI, age_email = request.Email, age_contacto = request.ContactPerson, age_subNiveles = decimal.Parse(request.SubLevels), age_pdv = request.Pdv, age_observaciones = request.Notes, ct_id = request.TaxCategory == 0 ? 1 : request.TaxCategory, //Categoria Tributaria ta_id = 1, //Tipo de agencia sa_id = request.SegmentId == 0 ? 1 : request.SegmentId, // segmento de la agencia age_tipo = "SU", age_autenticaterminal = "N", age_estado = "AC", //Solicitud de operaciones no se debio cambiar age_prefijosrest = "", usr_id_modificacion = currentUserId, age_comisionadeposito = request.CommissionableDeposits ? "S" : "N", age_montocomision = request.Commission, limiteCredito = request.CheckingAccountCreditLimit.ToString(), autorizacionAutomatica = request.AutomaticAuthorization.ToString(), quitaAutomatica = request.AutomaticReverse.ToString(), generacionAutomatica = request.AutomaticReposition.ToString(), montoMinimoPorPedido = request.MinimumOrderAmount.ToString(), montoMaximoPorPedido = request.MaximumOrderAmount.ToString(), pedidoMaximoMensual = request.MaximumMonthlyAmount.ToString(), autorizacionAutomaticaMontoDiario = request.MaximumAuthorizedDailyAmount.ToString(), recargaAsincronica = request.AsynchronousTopup.ToString(), comisionporventa = request.SalesCommission, usr_nombre = request.UserName1, usr_apellido = request.UserLastName1, acc_login = request.AccessLogin1, acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword1))), //segundo usuario acc_validityDate = DateTime.Now.AddDays(360), second_acc_validityDate = DateTime.Now.AddDays(360), third_acc_validityDate = DateTime.Now.AddDays(360), // primer acceso segundo usuario second_acc_login = request.AccessLogin2, second_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword2))), /*request.AccessType2.ToUpper() == "POS" ? 6 : request.AccessType2.ToUpper() == "WEB" ? 1 : request.AccessType2.ToUpper() == "POSWEB" ? 12 : request.AccessType2.ToUpper() == "USSD" ? 9 : request.AccessType2.ToUpper() == "SMS" ? 2 : 0*/ second_tac_id = Utils.GetAccessTypeCode(request.AccessType2), usr_administrador = request.IsAdministrator2, grpId = request.Group, //Valores Originales acc_cambiopassword = "******", second_acc_cambiopassword = "******", third_acc_cambiopassword = "******" // //TODO //acc_cambiopassword = "", //second_acc_cambiopassword = "" // }; //segundo acceso segundo usuario if (reqAgent.av_sc_ac_secondUser = request.AvailableSecondAccessSecondUser) { reqAgent.third_acc_login = request.AccessLogin3; reqAgent.third_acc_password = Convert.ToBase64String(md5.ComputeHash(Encoding.Unicode.GetBytes(request.AccessPassword3))); reqAgent.third_tac_id = Utils.GetAccessTypeCode(request.AccessType3); } foreach (ProductCommision item in request.ProductsCommission) { reqAgent.productos.Add(new RequestAgent.Product() { prdId = item.ProductId, comision = item.Commission }); } ResponseAgent responseAgent = Utils.CreateAgent(reqAgent); //bool isSuccessful = String.IsNullOrEmpty(request.RIF) ? false : request.RIF.EndsWith("0"); bool isSuccessful = int.Parse(responseAgent.response_code) == 0; response.ResponseCode = isSuccessful ? 0 : 1; response.ResponseMessage = isSuccessful ? "OK" : "ER"; response.TransactionID = 0; response.AgeId = responseAgent.AgeId; if (!isSuccessful) { var errors = new ErrorItems(); errors.Add(new ErrorItem() { ErrorId = responseAgent.response_code, ErrorDescription = responseAgent.message }); //var errors = new ErrorItems(); //for (int i = 0; i < new Random().Next(1, 6); i++) // errors.Add(new ErrorItem() { ErrorId = i.ToString(), ErrorDescription = "Error random " + i }); response.Errors = errors; } logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[CreateAgentProvider] [RECV-DATA] CreateAgentResult {response={" + response + "}}"); } catch (Exception ex) { response.ResponseCode = 500; response.ResponseMessage = _GenericError; response.TransactionID = 0; response.Errors = new ErrorItems() { new ErrorItem() { ErrorId = "90", ErrorDescription = ex.Message } }; string mensaje = String.Concat("[API] " + base.LOG_PREFIX + "[CreateAgentProvider] ", ". Exception: ", ex.Message, ". ", ex.StackTrace); logger.ErrorLow(mensaje); } return(response); }
/// <summary> /// Inicia la ejecucion del metodo /// </summary> /// <param name="request"></param> /// <returns></returns> public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest request) { IMovilwayApiResponse response = null; //DATOS DE AUTENTICACION try { #region antes // PREFIX //try //{ // LOG_PREFIX = HttpContext.Current.Session["LOG_PREFIX"].ToString() + "[" + new Random(DateTime.Now.Millisecond * 3).Next(100000000, 999999999) + "] "; //} //catch (Exception) //{ // LOG_PREFIX = ""; //} #endregion InitPrefix(); #region log data //try //{ // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [INPUT] UserInfo {IP=" + HttpContext.Current.Request.UserHostAddress + ",Username="******"} " + request.ToString()); //} //catch (Exception) //{ // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [INPUT] UserInfo {IP=" + "NULL" + ",Username="******"} " + request.ToString()); //} #endregion PrintLoginValues(request); #region antes //if (request.DeviceType == cons.ACCESS_H2H) //{ // if (!NetWorkSecurity.IpIsWithinRangeH2H(HttpContext.Current.Request.UserHostAddress)) // { // string message = String.Concat("[LA IP NO ESTA REGISTRADA EN EL RANGO PERMITIDO H2H (", HttpContext.Current.Request.UserHostAddress, ")]"); // logger.ErrorHigh(() => TagValue.New().Message("[ERROR DE PERMISOS H2H]").Message(message).Tag("[PARA ACCESO]").Value(request.AuthenticationData)); // throw new Exception(message); // } //} #endregion //si no se activa la optimizacion de seguridad //siempre ejecuta las validaciones de seguridad //if (!ApiConfiguration.API_SECURE_OPTIMIZATION) SecureValidation(request); //la restriccion se mantiene con el fin de que se pueda volver a validar el tiempo del session ID String sessionID = null; if (!(request is GetSessionRequestBody)) { sessionID = GetSessionID(request); } SaleInterface kinacuWS = new SaleInterface(); // CONDIGURACION INTERFAZ int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]); kinacuWS.Timeout = timeOutSeconds * 1000; response = PerformKinacuOperation(request, kinacuWS, sessionID); // no deberia lanzar second request deberia solo se responsabilidad #region secondrequest //if (!ValidateNumberOfExecution(request)) // response = PerformKinacuOperation(request, kinacuWS, sessionID); //else //{ // if (_delegateSecondExecution == null) // throw new Exception("NO SE HA DEFINIDO EL MANEJADOR PARA LA SEGUNDA PETICION"); // bool isNew = false; // Func<int> callback = delegate() // { // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS NEW]"); // isNew = true; // return 1; // }; // int hascode = request.GetHashCode(); // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST VALIDATION] [" + hascode + "] "+_cacheRequest.ToString()); // //Action<object,object> oncache= delegate(object k , object v) // // { // // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [DOUBLE REQUEST] [CALL BACK] [IS DOUBLE]"); // // isNew = false; // // }; // _cacheRequest.GetValue<int>(hascode, callback);//, oncache); // if (isNew) // { // response = PerformKinacuOperation(request, kinacuWS, sessionID); // } // else // { // logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [SecondExecution]"); // response = _delegateSecondExecution (request, kinacuWS, sessionID); // } //} #endregion if (!(request is GetSessionRequestBody)) { if (bool.Parse(ConfigurationManager.AppSettings["LogoffAuto"] ?? "true")) { logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [SEND-DATA] logoffParameters {userid=" + sessionID + "}"); kinacuWS.LogOff(int.Parse(sessionID)); logger.InfoLow("[KIN] " + this.LOG_PREFIX + "[LogOffProvider] [RECV-DATA] logoffResult {nothing}"); } } logger.InfoLow("[API] " + LOG_PREFIX + "[KinacuProvider] [OUTPUT] " + response.ToString()); } catch (Exception e) { logger.ErrorLow("[API] " + LOG_PREFIX + "[KinacuProvider] [EXCEPTION] Exception trying to serve KINACU Operation {message=" + e.Message + ",stackTrace=" + e.StackTrace + "}"); //SE DELEGA EL MANEJO DE LA EXPECION A QUIEN LO INVOCA GENERALMENTE SERVICEEXECUTIONDELEGATOR throw; #region intento de respuesta anterior //Type a = this.GetType().GetMethod("PerformOperation").ReturnType; //response = new AGenericApiResponse() { ResponseCode = 99, ResponseMessage = e.Message, TransactionID = 0 }; //Type name = MethodBase.GetCurrentMethod().GetType(); //ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e)); #endregion } return(response); }
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); } } }
private String GetSessionID(IMovilwayApiRequest request) { if (request is TopUpRequestBody) { try { //No hacer resolveRquestsi no ResoveRquestScure //TODO CACHE NO VALIDO NECESITO CACHE POR SESSION Func <string> callback = delegate() { //logger.InfoLow(String.Concat("[API] ", LOG_PREFIX, " EJECUTANDO CALLBACK DE CACHE ", request.AuthenticationData.Username)); logger.InfoLow(String.Concat("[API] ", LOG_PREFIX, " Session Not Found in Cache ", request.AuthenticationData.Username)); //try //{ // var copyrequest = Reflection.FactoryObject<ASecuredApiRequest>(request.GetType()); // copyrequest.AuthenticationData = new AuthenticationData(); // copyrequest.AuthenticationData.Username = request.AuthenticationData.Username; // copyrequest.AuthenticationData.Password = request.AuthenticationData.Password; // copyrequest.AuthenticationData.SessionID = request.AuthenticationData.SessionID; //} //catch (Exception ex) //{ //} return(GetSessionIDEL(request)); }; Action <Object, Object> accion = delegate(Object key2, Object val) { logger.InfoLow(String.Concat("[API] ", LOG_PREFIX, " Session Found in Cache [", key2, "]")); }; String llave = String.Concat(request.AuthenticationData.Username, " ", request.AuthenticationData.Password);//String.Concat(cons.CACHE_SESSION_PREFIX, request.AuthenticationData.Username); //String.Concat(request.AuthenticationData.Username," " ,request.AuthenticationData.Password);// "llaveunica";//debeser el tokken //HttpContext.Current.Session.SessionID; string ID = _cache.GetValue <String>(llave, callback, accion); return(ID); } catch (Exception ex) { //DESACTIVAR CACHE logger.ErrorHigh(String.Concat("[API] ", LOG_PREFIX, "[KinacuProvider] [EXCEPTION] [", ex.GetType().Name.ToUpper(), "] ACCEDIENDO AL CACHE VALIDANDO SECURITY {message=", ex.Message, ",stackTrace=", ex.StackTrace, "}")); throw; } } else { return(GetSessionIDEL(request, LOG_PREFIX)); } //IMPLEMENTACION ANTIGUA #region Implementacion antigua //string username = request.AuthenticationData.Username, platform = request.Platform ?? ConfigurationManager.AppSettings["DefaultPlatform"]; //var cacheObj = new LoginDataCache(); //if (request != null) //{ // //ObjectCache cache = MemoryCache.Default; // //var cacheKey = username + platform; // // // //ProviderLogger.InfoLow("*** Chequeo de cache ***"); // //foreach (var item in cache) // // ProviderLogger.InfoLow(item.Key + ": " + item.Value); // //ProviderLogger.InfoLow("************************"); // if (!String.IsNullOrEmpty(request.AuthenticationData.SessionID)) // { // int userId; // long timeOut; // string userName, userLastName, userAddress, message; // ManagementInterface managementWS = new ManagementInterface(); // if (managementWS.GetUserInfo(int.Parse(request.AuthenticationData.SessionID), out userId, out userName, out userLastName, out userAddress, out timeOut, out message)) // { // return (request.AuthenticationData.SessionID); // } // else // { // if (!string.IsNullOrEmpty(request.AuthenticationData.Username) && // !string.IsNullOrEmpty(request.AuthenticationData.Password)) // { // var getSessionResponse = new ServiceExecutionDelegator // <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( // new GetSessionRequestBody() // { // Username = request.AuthenticationData.Username, // Password = request.AuthenticationData.Password, // DeviceType = request.DeviceType // }, ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); // if (getSessionResponse.ResponseCode == 0 && // !string.IsNullOrEmpty(getSessionResponse.SessionID) && // !getSessionResponse.SessionID.Equals("0")) // return getSessionResponse.SessionID; // else // throw new Exception(getSessionResponse.ResponseMessage); // } // //SI NO REALIZO RETURN ENTONCES LANZA LA EXCEPCION // throw new Exception("DATOS DE AUTENTICACION INVALIDOS"); // } // } // else // { // //if (cache.Contains(cacheKey)) // // cacheObj = (LoginDataCache)cache.Get(cacheKey); // //else // //{ // //TODO CACHE // var getSessionResponse = new ServiceExecutionDelegator // <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( // new GetSessionRequestBody() // { // Username = request.AuthenticationData.Username, // Password = request.AuthenticationData.Password, // DeviceType = request.DeviceType // }, ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); // if (getSessionResponse.ResponseCode == 0 && // !string.IsNullOrEmpty(getSessionResponse.SessionID) && // !getSessionResponse.SessionID.Equals("0")) // return getSessionResponse.SessionID; // else // throw new Exception(getSessionResponse.ResponseMessage); // //SI NO REALIZO RETURN ENTONCES LANZA LA EXCEPCION // throw new Exception("DATOS DE AUTENTICACION INVALIDOS"); // /*var newCacheObject = new LoginDataCache() // { // UserName = username, // Platform = platform, // Token = getSessionResponse.SessionID // }; // // Store data in the cache // var cacheMinutes = ConfigurationManager.AppSettings["UtibaSessionTTL"] ?? "10"; // var cacheItemPolicy = new CacheItemPolicy { AbsoluteExpiration = DateTime.Now.AddSeconds(Convert.ToInt32(cacheMinutes) * 1000) }; // //cache.Add(cacheKey, newCacheObject, cacheItemPolicy); // ProviderLogger.InfoHigh("cacheKey: " + cacheKey + " - newCacheObject: {" + newCacheObject.UserName + "," + newCacheObject.Platform + "," + newCacheObject.Token + "} - cacheItemPolicy: " + cacheItemPolicy.AbsoluteExpiration); // cacheObj = newCacheObject;*/ // //} // } //} //return "error"; #endregion }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0")) { return new GetAgentInfoResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0, AgentInfo = new AgentInfo() } } ; GetAgentInfoRequestBody request = requestObject as GetAgentInfoRequestBody; GetAgentInfoResponseBody response = null; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [SEND-DATA] getAgentInfoParameters {agentReference=" + request.Agent + "}"); AgentInfo agentInfo = new AgentInfo(); string validatedEmail = ""; if (request.SearchById ?? false) { agentInfo = Utils.GetAgentInfoById(request.AgentId); validatedEmail = Utils.GetValidatedEmailById(request.AgentId); } else { agentInfo = Utils.GetAgentInfo(request.Agent); validatedEmail = Utils.GetValidatedEmailByLogin(request.Agent); } logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[GetAgentInfoProvider] [RECV-DATA] getAgentInfoResult {response={" + DataContract.Utils.logFormat(agentInfo) + "}}"); if (agentInfo.BranchID >= 0) //userInfo && retailerInfo) { response = new GetAgentInfoResponseBody() { ResponseCode = 0, ResponseMessage = "exito", TransactionID = 0, AgentInfo = new AgentInfo() { Agent = request.Agent, NationalIDType = agentInfo.NationalIDType, NationalID = agentInfo.NationalID, Address = agentInfo.Address, Name = agentInfo.Name, LegalName = agentInfo.LegalName, Email = String.IsNullOrEmpty(validatedEmail) ? agentInfo.Email : validatedEmail, // Elementos privados AgentID = agentInfo.AgentID, OwnerID = agentInfo.OwnerID, BranchID = agentInfo.BranchID, // Grupo de comisiones nuevo CommissionGroups = agentInfo.CommissionGroups, // Nuevo subniveles SubLevel = agentInfo.SubLevel, // Nuevo PDV Id PDVID = agentInfo.PDVID, PhoneNumber = agentInfo.PhoneNumber, TaxCategory = agentInfo.TaxCategory, TaxCategories = agentInfo.TaxCategories, SegmentId = agentInfo.SegmentId, SegmentList = agentInfo.SegmentList } }; } else { response = new GetAgentInfoResponseBody { ResponseCode = 99, ResponseMessage = "El agente consultado no existe" }; } return(response); } }
public abstract IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID);
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID) { if (sessionID.Equals("0")) { return new GetLoanTokenResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0 } } ; GetLoanTokenRequestBody request = requestObject as GetLoanTokenRequestBody; //string message; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetLoanTokenProvider] [SEND-DATA] GetLoanTokenParameters {UserId=" + sessionID + "}"); string id = Utils.GetAgentIdByAccessPosWeb(request.AuthenticationData.Username).ToString(); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage webResponse = new HttpResponseMessage(); string data = ""; Token token = new Token() { token = "nill" }; logger.InfoLow(String.Concat("[MO] [SEND-DATA] agentId=", id)); webResponse = client.PostAsync(String.Concat(ConfigurationManager.AppSettings["URL_MO"], "token"), new StringContent("{\"external_id\":" + id + "}", Encoding.UTF8, "application/json")).Result; logger.InfoLow(String.Concat("[MO] [RESPONSE-CODE] HttpStatusCode: ", (int)webResponse.StatusCode)); JavaScriptSerializer JSserializer = new JavaScriptSerializer(); GetLoanTokenResponseBody response; try { data = webResponse.Content.ReadAsStringAsync().Result; if (webResponse.IsSuccessStatusCode) { token = JSserializer.Deserialize <Token>(data); logger.InfoLow(String.Concat("[MO] [RESPONSE-DATA] Raw Data: ", data)); logger.InfoLow(String.Concat("[MO] [RESPONSE-DATA] token: ", token.token)); response = new GetLoanTokenResponseBody() { ResponseCode = 0, ResponseMessage = "Exito", TransactionID = new Random().Next(100000, 999999), Token = token.token }; } else { logger.InfoLow(String.Concat("[MO] [RESPONSE-DATA] ERROR Raw Data: ", data)); response = new GetLoanTokenResponseBody() { ResponseCode = 98, ResponseMessage = "Error", TransactionID = new Random().Next(100000, 999999), Token = "" }; } } catch (Exception ex) { logger.ErrorLow(String.Concat(" [RECEIVED-DATA] Error recibiendo la data. ", ex.InnerException)); response = new GetLoanTokenResponseBody() { ResponseCode = 99, ResponseMessage = "Excepcion", TransactionID = new Random().Next(100000, 999999), Token = "" }; } //long balance = kinacuWS.GetAccountBalance(int.Parse(sessionID), out message); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[GetLoanTokenProvider] [RECV-DATA] GetLoanTokenResult {response=Exito,message=ok,token=eyJjdXN0b21lcl9pZCI6MTU4fQ.DnrUTA.XHKdo08zgauO6JjwP-T2G6VjX6I}"); return(response); } }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, string sessionID) { string providerName = "DebitNoteProvider"; DebitNoteRequestBody request = requestObject as DebitNoteRequestBody; DebitNoteResponseBody response = new DebitNoteResponseBody() { ResponseCode = 90, ResponseMessage = "Error inesperado", TransactionID = 0 }; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [SEND-DATA] DebitNoteProvider {AgentId=" + request.AgentId + ",Amount=" + request.Amount + ",Comment=" + request.Comment + ",SupportDocument=" + request.SupportDocument + "}"); if (sessionID.Equals("0")) { response.ResponseMessage = "Error de sesion"; logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [RECV-DATA] DebitNoteResult {response={" + response + "}}"); return(response); } API.Utils.KinacuDb db = new API.Utils.KinacuDb(); do { SqlConnection connection = Movilway.API.Utils.Database.GetKinacuDbConnection(); SqlTransaction trx = null; bool success = false; try { connection.Open(); db.db = connection; InfoAgente originador = db.GetInfoAgente(null, request.AuthenticationData.Username); InfoAgente agencia = db.GetInfoAgente(request.AgentId); if (agencia == null || agencia.OwnerId != originador.BranchId) { response.ResponseMessage = "Agencia inválida"; break; } trx = connection.BeginTransaction(); db.databaseTransaction = trx; string comentario = string.Concat( "Agente ", originador.BranchId, ": ", string.IsNullOrEmpty(request.SupportDocument) ? string.Empty : string.Concat("Comp. ", request.SupportDocument, "-"), request.Comment); int id = db.CrearMovimientoCuentaCorriente((int)agencia.BranchId, request.Amount, comentario, false, Core.cons.TtrIdMovimientoCuentaCorrienteNotaDebito); if (id != 0) { success = true; response.ResponseCode = 0; response.ResponseMessage = string.Empty; response.TransactionID = id; db.InsertarMovimientoAuditoria((int)originador.BranchId, null, comentario, id, "FINANCIERO", "DECREMENTO"); trx.Commit(); // trx.Rollback(); trx.Dispose(); trx = null; db.databaseTransaction = null; } } catch (Exception ex) { ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(providerName) .Exception(ex)); } finally { if (!success && trx != null) { try { trx.Rollback(); } catch (Exception) { } } try { connection.Close(); } catch (Exception) { } } }while (false); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[" + providerName + "] [RECV-DATA] DebitNoteResult {response={" + response + "}}"); return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { TransferCommissionRequestBody request = requestObject as TransferCommissionRequestBody; TransferCommissionResponseBody response = null; string rootagency = ConfigurationManager.AppSettings["rootagency"] ?? "4"; int sourceUserId = 0, recipientAgentId = 0; string accessReceiver = ""; bool requestHasPDV = !String.IsNullOrEmpty(request.RecipientPdv); //LA AGENCIA RAIZ PUEDE TRANSFERIR UNA COMISION AL PDV //LA AGENCIA RAIZ BUSCA EL PADRE Y HACE QUE EL PADRE TRANSFIERA LA COMISION if (sessionID.Equals("0")) { response = new TransferCommissionResponseBody() { ResponseCode = requestHasPDV ? 3 : 90, ResponseMessage = requestHasPDV ? "ID Inactivo" : "error session", TransactionID = 0, StockBalance = 0m }; response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); return(response); } try { sourceUserId = new IBank.Utils().GetUserId(request.AuthenticationData.Username); } catch (Exception) { response = new TransferCommissionResponseBody() { ResponseCode = 99, ResponseMessage = "ERROR OBTENIENDO USUARIO ID", TransactionID = 0, StockBalance = 0m }; return(response); } int recipientId = 0; bool recipientIsNumeric = int.TryParse(request.Recipient, out recipientId); if (!recipientIsNumeric && String.IsNullOrEmpty(request.RecipientPdv)) { response = new TransferCommissionResponseBody() { ResponseCode = 99, ResponseMessage = "RecipientPdv NO PUEDE SER VACIO", TransactionID = 0, StockBalance = 0m }; return(response); } if (recipientIsNumeric) { recipientAgentId = recipientId; } if (!recipientIsNumeric) { try { recipientAgentId = new IBank.Utils().GetAgentIdByPdv(request.RecipientPdv); accessReceiver = request.Recipient; } catch (Exception ex) { //if (requestHasPDV) // throw e; //else return(new TransferCommissionResponseBody() { ResponseCode = 3, ResponseMessage = "PDV Inactivo", TransactionID = 0, StockBalance = 0m, ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") }); } } if (recipientAgentId != 0) { request.Recipient = recipientAgentId.ToString(); } int sourceAgentId = new IBank.Utils().GetAgentId(request.AuthenticationData.Username); bool isChild = false; IBank.Utils.TransferInfo info = new IBank.Utils.TransferInfo(); info.OverrideRequestCode = request.Code > 0? request.Code: 501; info.OverrideReverseCode = 205; logger.InfoHigh(LOG_PREFIX + " get agent data "); //Ariel 2021-Ma-09 Comentado // var agentinfo = Utils.GetAgentData(base.LOG_PREFIX, recipientAgentId); logger.InfoHigh(LOG_PREFIX + " agent data ok"); switch (request.TransferRequestType) { case TransferRequestType.FromParentToBranch: if (sourceAgentId.ToString() == rootagency) { isChild = true; // seleccionar agencia padre y usuario //Ariel 2021-Ma-09 Comentado asignamos 0 info.AgentParent = 0; // Convert.ToInt32(agentinfo["age_id_sup"]); info.UserTransacctionId = sourceUserId; // info.AgentParent = (int) agentinfo.AgentID; } else { // validar si la agencia es padre //Ariel 2021-Ma-09 Comentado asignamos 0 info.AgentParent = 0;// Convert.ToInt32(agentinfo["age_id_sup"]); info.UserTransacctionId = sourceUserId; if (info.AgentParent != sourceAgentId) { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = 99, ResponseMessage = "No puede hacer asginacion de comision a una agencia que no es hija directa.", //ResponseCode = 90, //ResponseMessage = "Distribución de Saldo Fallida, agencia destino igual a agencia origen", TransactionID = 0 }; return(response); } } break; } if (sourceAgentId == recipientAgentId) { response = new TransferCommissionResponseBody() { Fee = 0, // ResponseCode = requestHasPDV ? 3 : 90, // ResponseMessage = requestHasPDV ? "ID Inactivo" : "Distribución de Saldo Fallida, agencia destino igual a agencia origen", ResponseCode = 90, ResponseMessage = "Comision Fallida, agencia destino igual a agencia origen", //ResponseCode = 90, //ResponseMessage = "Distribución de Saldo Fallida, agencia destino igual a agencia origen", TransactionID = 0 }; // if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); return(response); } bool isNegativeAmount = false; bool acceptReverse = false; if (request.Amount < 0) { isNegativeAmount = true; acceptReverse = new IBank.Utils().CheckReverse(request.Recipient); } if ((isChild && !isNegativeAmount && request.DBTransferIfChild) || (!isChild && !isNegativeAmount) || (isChild && isNegativeAmount && acceptReverse)) { // Acá resultó NO ser hijo(o hijo pero no se quiere afectar cta corriente), así que procedo con la distribución vía SP string autorization = "", messageOut = "", responseCode = "99"; DateTime myNow = Utils.GetLocalTimeZone(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bCommissionParameters {info=" + info.ToString() + "} {agent_reciver=" + request.Recipient + ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) + ",reference_number=" + request.ExternalTransactionReference); // + ",date=" + myNow + "}"); //Se valida que el maximo a transferir si es hijo no exceda el límite de crédito (Condición Proesa) if (isChild && !isNegativeAmount && request.DBTransferIfChild) { //Ariel 2021-Ma-09 Comentado devolvemos 0 decimal maxCredit = 0;//Utils.GetAgentMaxCreditAvailable(request.Recipient); if (request.Amount > maxCredit) { logger.ErrorHigh(base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bCommission El monto Excede el máximo de crédito disponible Amount:" + request.Amount + " Limite Credito: " + maxCredit); return(new TransferCommissionResponseBody() { ResponseCode = 99, ResponseMessage = "EL MONTO EXCEDE EL LIMITE DE CREDITO CONFIGURADO", TransactionID = 0, StockBalance = 0m }); } } //decimal newAmount = 0m; var distributionResponse = new IBank.Utils().transferb2bCommission(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode, info); //, ref newAmount); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[transferb2bCommission] [RECV-DATA] createCommissionResult {response=" + distributionResponse + ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}"); if (int.Parse(responseCode ?? "99") == 0) { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = 0, //ResponseMessage = requestHasPDV ? "activado" : messageOut, ResponseMessage = messageOut, TransactionID = int.Parse(autorization) }; // if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } else { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"), ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut, TransactionID = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization) }; // if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else if (!isChild && isNegativeAmount) { // TODO NEW CONDITION TO MO - Done int[] branchsAllowed = Array.ConvertAll <string, int>(ConfigurationManager.AppSettings["ReversesBranchesAllowed"].Split(','), int.Parse); if (branchsAllowed.Contains(sourceAgentId)) { // TODO Check the debt_amount var debtAmount = Utils.GetTotalDebt(request.Recipient); logger.InfoLow("[MO] " + base.LOG_PREFIX + "[MOApiProvider] [RECV-DATA] totalDebtAmount {response=" + debtAmount + "}"); if (Math.Abs(request.Amount) <= debtAmount) { // Mismo código que arriba string autorization = "", messageOut = "", responseCode = "99"; DateTime myNow = Utils.GetLocalTimeZone(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters {agent_reciver=" + request.Recipient + ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) + ",reference_number=" + request.ExternalTransactionReference + ",date=" + myNow + "}"); //decimal newAmount = 0m; var distributionResponse = new IBank.Utils().transferb2b(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode); //, ref newAmount, partialCharge: true); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + distributionResponse + ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}"); if (int.Parse(responseCode ?? "99") == 0) { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : messageOut, TransactionID = int.Parse(autorization) }; //if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } else { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"), ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut, TransactionID = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization) }; //if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); //if (!newAmount.Equals(request.Amount)) // response.ChargedAmount = newAmount; } // End } else { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : "El monto a debitar es superior a la deuda actual", TransactionID = 99 }; // if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : "Debito de stock no permitido", TransactionID = 99 }; //if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } // Validate if the branch is MO (allowed from .config) // if true // query debt amount // if amount <= debt amount // transfer code (up) // else // return error amount too high // else // return error } else { response = new TransferCommissionResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : (isChild && isNegativeAmount && !acceptReverse ? "La agencia no acepta quitas automáticas" : "Error no identificado"), TransactionID = 99 }; //if (requestHasPDV) response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } // Envío de SMS VE si lo tiene habilitado try { if (response.ResponseCode.Equals(0)) { var sendTransferSMS = ConfigurationManager.AppSettings["SendTransferSMS"]; if (!String.IsNullOrEmpty(sendTransferSMS) ? bool.Parse(sendTransferSMS) : false) { var mobilePhone = new IBank.Utils().GetAgentMobilePhone(int.Parse(request.Recipient)); var stockFinal = new IBank.Utils().GetAgentFinalStock(int.Parse(request.Recipient)); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] phone " + mobilePhone); if (mobilePhone.Length.Equals(int.Parse(ConfigurationManager.AppSettings["TelemoPhoneLength"]))) { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer begin"); Util.SMSTelemoDispatcher.SmsToCustomer(ConfigurationManager.AppSettings["TelemoClientId"], ConfigurationManager.AppSettings["TelemoCustomerId"], mobilePhone, String.Format(ConfigurationManager.AppSettings["TelemoMessageTemplate"], request.Amount.ToString("C"), stockFinal, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()).ToString("HH:mm:ss"))); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer end"); } } } } catch (Exception ex) { logger.ErrorHigh("[SMS] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] " + ex.Message + ", " + ex.StackTrace); } return(response); }