private String GetSessionId(DataContract.MacroInternational.GetMacroProductInternationalRequest request) { string username = request.AuthenticationData.Username, platform = request.Platform ?? ConfigurationManager.AppSettings["DefaultPlatform"]; var cacheObj = new LoginDataCache(); if (request != null) { ObjectCache cache = MemoryCache.Default; var cacheKey = username + platform; ProviderLogger.InfoLow("*** Chequeo de cache ***"); foreach (var item in cache) { ProviderLogger.InfoLow(item.Key + ": " + item.Value); } ProviderLogger.InfoLow("************************"); if (!String.IsNullOrEmpty(request.AuthenticationData.SessionID)) { return(request.AuthenticationData.SessionID); } else { if (cache.Contains(cacheKey)) { cacheObj = (LoginDataCache)cache.Get(cacheKey); } else { var getSessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); var newCacheObject = new LoginDataCache() { UserName = username, Platform = platform, Token = getSessionResponse.SessionID }; // Store data in the cache var cacheMinutes = ConfigurationManager.AppSettings["UtibaSessionTTL"] ?? "10"; var cacheItemPolicy = new CacheItemPolicy { AbsoluteExpiration = DateTime.Now.AddSeconds(Convert.ToInt32(cacheMinutes) * 1000) }; //cache.Add(cacheKey, newCacheObject, cacheItemPolicy); ProviderLogger.InfoHigh("cacheKey: " + cacheKey + " - newCacheObject: {" + newCacheObject.UserName + "," + newCacheObject.Platform + "," + newCacheObject.Token + "} - cacheItemPolicy: " + cacheItemPolicy.AbsoluteExpiration); cacheObj = newCacheObject; } } } return(cacheObj.Token); }
public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject) { var request = (GetExternalBalanceRequestBody)requestObject; var response = new GetExternalBalanceResponseBody(); var ibankClient = GetProviderForEntity(request.TargetEntity); logger.InfoHigh("Comienza el GetExternalBalance"); // Need to get the national ID: var agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest( new GetAgentInfoRequestBody() { AuthenticationData = request.AuthenticationData, Agent = request.Agent, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetAgentInfo); logger.InfoHigh("Se ejecutó GetAgentInfo, el resultado fue: ResponseCode " + agentInfo.ResponseCode + ", NationalId " + agentInfo.AgentInfo.NationalID); var getExternalBalanceResponse = ibankClient.GetBalance(new API.IBank.GetBalanceRequest { Agent = request.Agent, AgentNationalID = agentInfo.AgentInfo.NationalID }); logger.InfoHigh("Se ejecutó GetBalance en IBank, el resultado fue: ResponseCode " + getExternalBalanceResponse.ResponseCode + ", Balance disponible " + getExternalBalanceResponse.AvailableAmount); if (getExternalBalanceResponse != null) { response.ResponseCode = getExternalBalanceResponse.Result ? 0 : 99; response.ResponseMessage = "External Reference: " + getExternalBalanceResponse.ExternalTransactionReference; response.ApprovedAmount = getExternalBalanceResponse.ApprovedAmount; response.ConsumedAmount = getExternalBalanceResponse.ConsumedAmount; response.AvailableAmount = getExternalBalanceResponse.AvailableAmount; response.NextPaymentAmount = getExternalBalanceResponse.NextPaymentAmount; response.NextPaymentDate = getExternalBalanceResponse.NextPaymentDate; //if (getExternalBalanceResponse.Balances != null && getExternalBalanceResponse.Balances.Any()) //{ //response.Balances = new ExternalBalances(); //foreach (var balance in getExternalBalanceResponse.Balances) //{ // response.Balances.Add(new ExternalBalanceDetail() // { // Amount = balance.Amount, // Description = balance.Type // }); //} //} } else { response.ResponseCode = 99; response.ResponseMessage = "Su transaccion no pudo ser procesada"; } return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { if (sessionID.Equals("0") && !sessionID.Equals("1013")) { return new ChangePinResponseBody() { ResponseCode = 90, ResponseMessage = "error session", TransactionID = 0 } } ; ChangePinRequestBody request = requestObject as ChangePinRequestBody; ChangePinResponseBody response = null; string message; ManagementInterface managementWS = new ManagementInterface(); var session = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); if (session.ResponseCode == 1013 || session.ResponseCode == 10133 || session.ResponseCode == 1017) { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [SEND-DATA] ChangeUserPasswordByAccessIdParameters {AccessId=" + request.AuthenticationData.Username + ",OldPassword=******,NewPassword=******,AccessType=" + request.DeviceType + "}"); bool result = managementWS.ChangeUserPasswordByAccessId(request.AuthenticationData.Username, request.OldPin, request.NewPin, request.DeviceType, out message); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [RECV-DATA] ChangeUserPasswordByAccessIdResult {response=" + result + ",message=" + message + "}"); response = new ChangePinResponseBody() { ResponseCode = (result ? 0 : 99), ResponseMessage = (result ? "exito" : message), TransactionID = new Random().Next(100000, 999999) }; } else { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [SEND-DATA] ChangeUserPasswordParameters {UserId=" + sessionID + ",OldPassword=******,NewPassword=******}"); bool result = managementWS.ChangeUserPassword(int.Parse(sessionID), request.OldPin, request.NewPin, out message); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[ChangePinProvider] [RECV-DATA] ChangeUserPasswordResult {response=" + result + ",message=" + message + "}"); response = new ChangePinResponseBody() { ResponseCode = (result ? 0 : 99), ResponseMessage = (result ? "exito" : message), TransactionID = new Random().Next(100000, 999999) }; } return(response); } }
public decimal[] HandlerCache(AuthenticationData cascadeAuth, TopUpRequestBody request) { //se inicializa con valores por defecto List <decimal> lista = new List <decimal>(3) { 0m, 0m, 0m }; GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = cascadeAuth, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if (balanceResponse.StockBalance.HasValue) { lista[0] = balanceResponse.StockBalance.Value; } if (balanceResponse.WalletBalance.HasValue) { lista[1] = balanceResponse.WalletBalance.Value; } if (balanceResponse.PointsBalance.HasValue) { lista[2] = balanceResponse.PointsBalance.Value; } return(lista.ToArray <decimal>()); }
/// <summary> /// Retorna el saldo de kinacu o de inventario si las credenciales de usaurio son valida /// </summary> /// <param name="request">credenciales del usuario</param> /// <returns>saldo de kinacu o en cache o cero si es en caso de ocurrir un error</returns> private Decimal GetBalance(GetTransactionRequestBody request) { Decimal result = 0.0m; try { if (!string.IsNullOrEmpty(request.AuthenticationData.Username)) { string llave = request.DeviceType + "-" + request.AuthenticationData.Username; //CUANDO SE RECARGA EL SALDO Func <decimal> callback = delegate() { try { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[GetTransactionProvider] SALDO NOT FOUND CACHE ")); GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = request.AuthenticationData, DeviceType = request.DeviceType, }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); return(balanceResponse.StockBalance.Value); //lista.Add(balanceResponse.WalletBalance.Value); //lista.Add(balanceResponse.PointsBalance.Value); } catch (Exception exin) { logger.ErrorLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[GetTransactionProvider] ERROR EN CACHE CALLBACK SALDO" + exin.Message + " " + exin.GetType().Name)); return(0.0m); } }; Action <Object, Object> accion = delegate(Object key2, Object value) { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[GetTransactionProvider] SALDO FOUND CACHE [", key2, "]")); }; var aux = _cacheSaldo.GetValue <decimal>(llave, callback, accion); result = aux;// != null || aux.Length > 0? aux[0]: 0.0m; } } catch (Exception ex) { logger.ErrorMedium("[" + base.LOG_PREFIX + "] ERROR OBTENIENDO BALANCE " + ex.Message + " " + ex.GetType().Name); } return(result); }
public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { GetParentListRequestBody request = requestObject as GetParentListRequestBody; GetParentListResponseBody response = null; GetAgentInfoResponseBody agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest( new GetAgentInfoRequestBody() { AuthenticationData = new AuthenticationData() { SessionID = sessionID }, Agent = request.Agent, DeviceType = request.DeviceType }, ApiTargetPlatform.Utiba, ApiServiceName.GetAgentInfo); getParentListByReferenceIDResponse utibaGetParentListResponse = utibaClientProxy.getParentListByReferenceID(new getParentListByReferenceIDRequest() { getParentListByReferenceIDRequestType = new getParentListByReferenceIDRequestType() { sessionid = sessionID, device_type = request.DeviceType, agentReferenceID = agentInfo.AgentInfo.ReferenceID } }); //logger.InfoLow("Ajá: " + request.Agent + " vs " + agentInfo.AgentInfo.ReferenceID); if (utibaGetParentListResponse != null) { response = new GetParentListResponseBody() { ResponseCode = Utils.BuildResponseCode(utibaGetParentListResponse.getParentListByReferenceIDResponseType.result, utibaGetParentListResponse.getParentListByReferenceIDResponseType.result_namespace), ResponseMessage = utibaGetParentListResponse.getParentListByReferenceIDResponseType.result_message, TransactionID = utibaGetParentListResponse.getParentListByReferenceIDResponseType.transid }; if (utibaGetParentListResponse.getParentListByReferenceIDResponseType.agentList != null && utibaGetParentListResponse.getParentListByReferenceIDResponseType.agentList.Length > 0) { response.ParentList = new ParentList(); foreach (Agent agent in utibaGetParentListResponse.getParentListByReferenceIDResponseType.agentList) { response.ParentList.Add(new BasicAgentInfo() { Agent = agent.reference, Name = agent.name }); } } } return(response); }
public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { GetAgentGroupsRequestBody request = requestObject as GetAgentGroupsRequestBody; GetAgentGroupsResponseBody response = null; GetAgentInfoResponseBody agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest( new GetAgentInfoRequestBody() { AuthenticationData = new AuthenticationData() { SessionID = sessionID }, Agent = request.Agent, DeviceType = request.DeviceType }, ApiTargetPlatform.Utiba, ApiServiceName.GetAgentInfo); AgentGroupsResponse utibaAgentGroupsResponse = utibaClientProxy.getAgentGroupByAgentID(new getAgentGroupByAgentID() { getAgentGroupByAgentIDRequest = new getAgentGroupByAgentIDRequest() { sessionid = sessionID, device_type = request.DeviceType, agentID = agentInfo.AgentInfo.AgentID } }); if (utibaAgentGroupsResponse != null) { response = new GetAgentGroupsResponseBody() { ResponseCode = Utils.BuildResponseCode(utibaAgentGroupsResponse.AgentGroupsReturn.result, utibaAgentGroupsResponse.AgentGroupsReturn.result_namespace), ResponseMessage = utibaAgentGroupsResponse.AgentGroupsReturn.result_namespace, TransactionID = utibaAgentGroupsResponse.AgentGroupsReturn.transid }; if (utibaAgentGroupsResponse.AgentGroupsReturn.agentGroups != null && utibaAgentGroupsResponse.AgentGroupsReturn.agentGroups.Length > 0) { response.GroupList = new GroupList(); foreach (AgentGroup agentGroup in utibaAgentGroupsResponse.AgentGroupsReturn.agentGroups) { response.GroupList.Add(new GroupInfo() { GroupID = agentGroup.ID, Name = agentGroup.name, Category = agentGroup.category, Type = agentGroup.type }); } } } return(response); }
/// <summary> /// Paso llamado método TopUp con el producto de CashIn, para que el protocolo realice el llamado /// de constitución y emisión en el WS de MultiPay 472 /// </summary> /// <param name="request">Objeto que contiene la información del giro</param> /// <param name="idGiro">ID del giro creado en base de datos MW</param> /// <param name="sessionId">ID de sesión para poner en los mensajes de log</param> /// <param name="exc">Excepción generada al llamar el método del API</param> /// <returns>Respuesta del TopUp</returns> private DataContract.TopUpResponseBody EmitirPaso2(EmitirRequest request, int idGiro, string sessionId, out Exception exc) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); exc = null; DataContract.TopUpResponseBody resp = null; string endpointName = "TopUp"; try { this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Llamando método \"" + endpointName + "\" ...")); resp = new ServiceExecutionDelegator <DataContract.TopUpResponseBody, DataContract.TopUpRequestBody>().ResolveRequest( new DataContract.TopUpRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password }, DeviceType = request.DeviceType, Platform = request.Platform, WalletType = DataContract.WalletType.Stock, ExternalTransactionReference = sessionId, Amount = request.ValorRecibido, TerminalID = request.Pdv, Recipient = idGiro.ToString(), MNO = this.multipayTopUpMno }, ApiTargetPlatform.Kinacu, ApiServiceName.TopUp); this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Respuesta método \"" + endpointName + "\"") .Tag("ResponseCode").Value(resp != null && resp.ResponseCode.HasValue ? resp.ResponseCode.Value.ToString() : "NULL") .Tag("ResponseMessage").Value(resp != null && !string.IsNullOrEmpty(resp.ResponseMessage) ? resp.ResponseMessage : "vacío")); } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error llamando método \"" + endpointName + "\"") .Exception(ex)); this.errorMessage = ErrorMessagesMnemonics.ApiMethodException; exc = ex; } return(resp); }
public decimal[] HandlerCache() { List <decimal> lista = new List <decimal>(3); GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = _cascadeAuth, DeviceType = _request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); lista.Add(balanceResponse.StockBalance.Value); lista.Add(balanceResponse.WalletBalance.Value); lista.Add(balanceResponse.PointsBalance.Value); return(lista.ToArray <decimal>()); }
public override DataContract.Common.IMovilwayApiResponse PerformKinacuOperation(DataContract.Common.IMovilwayApiRequest requestObject, KinacuWebService.SaleInterface kinacuWS, string sessionID) { logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "INICIO"); if (!IsThereProducts()) { logger.ErrorHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] NO SE HAN CARGADO PRODUCTOS PARA REALIZAR CONSULTAS"); return(new QueryPaymentResponseBody() { ResponseCode = 99, ResponseMessage = "El producto a comprar no esta configurado para la consulta." }); } var response = new QueryPaymentResponseBody() { ResponseCode = 99, ResponseMessage = "Ocurrio un error, realizando la consulta del pago intente mas tarde." }; try { QueryPaymentRequestBody request = requestObject as QueryPaymentRequestBody; if (request == null) { throw new Exception("EL REQUEST A PROCESAR NO PUEDE SER NULO"); } var product = MapMNOtoProductId(request.MNO); ProductInfo productInfo = null; if (!_productsInfo.TryGetValue(product, out productInfo)) { response.ResponseMessage = "El producto a comprar no esta configurado para la consulta."; return(response); } int userid; int agencyid; string pdv = ""; // KinacuLogisticsWebService.LogisticsInterface client = new KinacuLogisticsWebService.LogisticsInterface(); KinacuManagementWebService.ManagementInterface client = new KinacuManagementWebService.ManagementInterface(); int Id; string UserName = null; string UserLastName = null; string UserAddress = null; long SessionTimeOut = 0; string Message = null; client.GetUserInfo(int.Parse(sessionID), out Id, out UserName, out UserLastName, out UserAddress, out SessionTimeOut, out Message); userid = Id; logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "Obteniendo usuario " + userid); int _RetailerId; string _RetailerName; string _RetailerAddress; string _RetailerLegalId; int _VoucherQuantityDownload; string _TicketHeader; string _CurrentTime; string _Message = ""; client.GetRetailerInfo(int.Parse(sessionID), out _RetailerId, out _RetailerName, out _RetailerAddress, out _RetailerLegalId, out _VoucherQuantityDownload, out _TicketHeader, out _CurrentTime, out _Message); agencyid = _RetailerId; logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "Obteniendo agencia " + userid); //var agentInfo = Utils.GetAgentInfoById(agencyid.ToString()); GetAgentInfoResponseBody balanceResponse = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest(new GetAgentInfoRequestBody() //GetAgentInfoResponseBody { AuthenticationData = request.AuthenticationData, DeviceType = request.DeviceType, SearchById = true, AgentId = agencyid.ToString() }, ApiTargetPlatform.Kinacu, ApiServiceName.GetAgentInfo); pdv = balanceResponse.AgentInfo.PDVID;//.PDVID; var ApiReference = (System.Threading.Thread.CurrentThread.ManagedThreadId * 10).ToString() + DateTime.Now.Ticks.ToString(); QueryPaymentReference.Input input = new QueryPaymentReference.Input() { Amount = "", Client = request.Recipient, Product = product, DateTime = DateTime.UtcNow.ToString("yyyyMMdd HH:mm:ss"), ReferenceNumber = ApiReference, ExtendedData = new QueryPaymentReference.Input.ArrayOfString() { pdv, request.TerminalID, agency_prefix + agencyid.ToString(), user_prefix + userid, request.ExternalTransactionReference, request.DeviceType.ToString() } }; QueryPaymentReference.queriesClient clientquery = new QueryPaymentReference.queriesClient(); clientquery.Endpoint.Address = new EndpointAddress(productInfo.Url); clientquery.Endpoint.Binding.SendTimeout = TimeSpan.FromMilliseconds(productInfo.Timeout); logger.InfoHigh("[KIN] " + base.LOG_PREFIX + " [QueryPaymentProvider] SEND-DATA " + "Amount =" + input.Amount + "|" + "Client =" + input.Client + "|" + "Product =" + input.Product + "|" + "DateTime =" + input.DateTime + "|" + "ReferenceNumber =" + input.ReferenceNumber + "|" + "ExtendedData =" + String.Join(",", input.ExtendedData)); QueryPaymentReference.OutputQuery queryresponse = clientquery.Query(input); if (queryresponse != null) { logger.InfoHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] REC-DATA " + "Id = " + queryresponse.Id + "|" + "IdAutorization = " + queryresponse.IdAutorization + "|"); response.ResponseCode = queryresponse.Result ? 0 : 99; response.ResponseMessage = queryresponse.Result ? "OK" : "Error en la consulta"; response.TransactionID = Convert.ToInt32(queryresponse.Id); response.Fee = queryresponse.Fee; response.ResponseCodeOpetator = queryresponse.ResponseCode; response.DetailsOperator = queryresponse.Details; response.Data = queryresponse.Data; response.DataDescriptor = queryresponse.DataDescriptor; response.Result = queryresponse.Result; response.QueryResultType = queryresponse.QueryResultType.ToString(); response.IdAutorization = queryresponse.IdAutorization; response.Amount = queryresponse.Amount; } else { logger.ErrorHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] REC-DATA OutputQuery [null]"); return(new QueryPaymentResponseBody() { ResponseCode = 99, ResponseMessage = "No se recibio respuesta, de la consulta intente mas tarde." }); } } catch (Exception ex) { logger.ErrorHigh("[KIN] " + base.LOG_PREFIX + "[QueryPaymentProvider] ERROR EN LA CONSULTA DEL PAGO. " + ex.GetType().Name + " " + ex.Message + " " + ex.StackTrace); response = new QueryPaymentResponseBody() { ResponseCode = 99, ResponseMessage = "Ocurrio un error, realizando la consulta del pago intente mas tarde." }; } return(response); }
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"); }
/// <summary> /// Realiza la autenticacion en la plataforma y retorna el SessionId /// </summary> /// <param name="request">Objeto que contiene las credenciales del usuario</param> /// <param name="returnCode">Codigo de error en caso de que algo falle (-1 = OK, >-1 = Error)</param> /// <returns>Un <c>string</c> que contiene el <c>SessionId</c> del usuario autenticado</returns> protected string GetSessionId(ASecuredApiRequest request, out ErrorMessagesMnemonics returnCode) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); returnCode = ErrorMessagesMnemonics.None; this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("Obteniendo sesion ...") .Tag("Login").Value((request.AuthenticationData != null && request.AuthenticationData.Username != null) ? request.AuthenticationData.Username : "******") .Tag("DeviceType").Value(request.DeviceType) .Tag("RequestPlatformId").Value(string.IsNullOrEmpty(request.Platform) ? string.Empty : request.Platform)); if (!this.ValidSecureApiRequest(request)) { this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("Imposible obtener sesion") .Tag("Login").Value((request.AuthenticationData != null && request.AuthenticationData.Username != null) ? request.AuthenticationData.Username : "******") .Tag("DeviceType").Value(request.DeviceType) .Tag("RequestPlatformId").Value(string.IsNullOrEmpty(request.Platform) ? string.Empty : request.Platform)); returnCode = ErrorMessagesMnemonics.MissingAuthenticationInformation; return(string.Empty); } GetSessionResponseBody sessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>() .ResolveRequest( new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }, request.Platform ?? string.Empty, ApiServiceName.GetSession); if (sessionResponse == null || string.IsNullOrEmpty(sessionResponse.SessionID) || sessionResponse.SessionID.Equals("0") || sessionResponse.SessionID.Equals("error")) { this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("Imposible obtener sesion") .Tag("Login").Value((request.AuthenticationData != null && request.AuthenticationData.Username != null) ? request.AuthenticationData.Username : "******") .Tag("DeviceType").Value(request.DeviceType) .Tag("RequestPlatformId").Value(string.IsNullOrEmpty(request.Platform) ? string.Empty : request.Platform)); returnCode = this.MapAuthenticationErrorMessageToErrorMnemonic(sessionResponse != null ? sessionResponse.ResponseMessage : null); return(string.Empty); } else { this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionResponse.SessionID + "] " + "Sesion obtenida") .Tag("SessionId").Value(sessionResponse.SessionID)); } return(sessionResponse.SessionID); }
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) { var request = requestObject as ConsolidateMoviPinRequestBody; Logger.BeginLow(() => TagValue.New().Tag("Request").Value(request)); var response = new ConsolidateMoviPinResponseBody { ResponseCode = 0, ResponseMessage = "Sus Movipins han sido consolidados.", TransactionID = 0, MoviPins = new MoviPins() }; if (request != null) { decimal consolidatedAmount = 0; string recipient = null; var pines = new List <MoviPinDetails>(); // Busco el detalle de cada pin recibido foreach (var movipin in request.MoviPins) { pines.Add(Utils.GetMoviPinDetails(movipin.Number)); } // Reviso que no existan pines repetidos if (pines.Select(m => m.Number).Distinct().Count() != pines.Count()) { response.ResponseCode = 99; response.ResponseMessage = "Existen pines repetidos en la solicitud"; Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response)); return(response); } // Reviso que exista más de un pin válido, ya que no tiene sentido validar un solo pin if (pines.Count(p => p.IsValid == true) <= 1) { response.ResponseCode = 99; response.ResponseMessage = "Existen menos de dos pines validos"; Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response)); return(response); } // Reviso que todos los pines sean del mismo user if (pines.Select(p => p.Agent).Distinct().Count() != 1) { response.ResponseCode = 99; response.ResponseMessage = "No todos los pines son del mismo usuario"; Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response)); return(response); } // Seteo el agente a utilizar más adelante al crear el nuevo pin consolidado recipient = pines.First().Agent; // Reviso que el pin a crear sea de un monto válido if (pines.Sum(p => p.RemainingAmount) == 0) { response.ResponseCode = 99; response.ResponseMessage = "No puede crearse un nuevo PIN por cero D2"; Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response)); return(response); } // En esta parte se redimen uno a uno los pines foreach (var movipin in request.MoviPins) { if (pines.Single(p => p.Number == movipin.Number).IsValid != null && pines.Single(p => p.Number == movipin.Number).IsValid.Value) { var movipaymentRequest = new MoviPaymentRequestBody { AuthenticationData = new AuthenticationData() { Username = _redeemUser, Password = _redeemPassword }, DeviceType = request.DeviceType, Amount = pines.Single(p => p.Number == movipin.Number).RemainingAmount.Value, ExternalTransactionReference = "", MoviPin = movipin.Number }; var redeeemResponse = new ServiceExecutionDelegator <MoviPaymentResponseBody, MoviPaymentRequestBody>(). ResolveRequest(movipaymentRequest, ApiTargetPlatform.Utiba, ApiServiceName.MoviPayment); if (redeeemResponse.ResponseCode.Value == 0) { consolidatedAmount += pines.Single(p => p.Number == movipin.Number).RemainingAmount.Value; } else { movipin.IsValid = false; movipin.Agent = null; movipin.RemainingAmount = null; } } response.MoviPins.Add(pines.Single(p => p.Number == movipin.Number)); } // Acá procedemos a crear el nuevo pin por el monto que redimimos if (consolidatedAmount > 0) { var createMoviPinRequest = new CreateMoviPinRequestBody() { AuthenticationData = new AuthenticationData() { Username = _consolidateUser, Password = _consolidatePassword }, Amount = consolidatedAmount, DeviceType = request.DeviceType, ExternalTransactionReference = "", Recipient = recipient }; var createMoviPinResponse = new ServiceExecutionDelegator <CreateMoviPinResponseBody, CreateMoviPinRequestBody>(). ResolveRequest(createMoviPinRequest, ApiTargetPlatform.Utiba, ApiServiceName.CreateMoviPin); if (createMoviPinResponse.ResponseCode.Value == 0) { response.ConsolidatedMoviPin = createMoviPinResponse.MoviPin; response.ConsolidatedAmount = consolidatedAmount; response.ExpiryDate = createMoviPinResponse.ExpiryDate; } else { response.ResponseCode = 99; response.ResponseMessage = "Operacion fallida"; } } else { response.ResponseCode = 99; response.ResponseMessage = "El pin se quería generar con monto cero"; } } Logger.CheckPointLow(() => TagValue.New().Tag("Response").Value(response)); return(response); }
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); } } }
public override IMovilwayApiResponse PerformUtibaOperation(IMovilwayApiRequest requestObject, UMarketSCClient utibaClientProxy, String sessionID) { GetSessionRequestBody request = requestObject as GetSessionRequestBody; GetSessionResponseBody response = null; createsessionResponse newSessionResponse = utibaClientProxy.createsession(new createsession()); String PIN = Utils.GenerateHash(newSessionResponse.createsessionReturn.sessionid, request.Username, request.Password); logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetSessionProvider] [SEND-DATA] loginRequest {sessionid=" + newSessionResponse.createsessionReturn.sessionid + ",device_type=" + request.DeviceType + ",initiator=" + request.Username + ",pin=" + PIN + "}"); loginResponse loginResponse = utibaClientProxy.login(new login() { loginRequest = new loginRequestType() { sessionid = newSessionResponse.createsessionReturn.sessionid, device_type = request.DeviceType, initiator = request.Username, pin = PIN } }); logger.InfoLow("[UTI] " + base.LOG_PREFIX + "[GetSessionProvider] [RECV-DATA] loginResponse {result=" + loginResponse.loginReturn.result + ",result_namespace=" + loginResponse.loginReturn.result_namespace + "}"); response = new GetSessionResponseBody() { ResponseCode = Utils.BuildResponseCode(loginResponse.loginReturn.result, loginResponse.loginReturn.result_namespace), ResponseMessage = loginResponse.loginReturn.result_message, TransactionID = loginResponse.loginReturn.transid, SessionID = newSessionResponse.createsessionReturn.sessionid }; if (response.ResponseCode == 0) { if (ConfigurationManager.AppSettings["ProcessMigration"].ToLower() == "true") { //logger.InfoHigh("Comienza la migración del usuario: " + request.AuthenticationData.Username); bool migrateAgent = MigrateAgent(request.AuthenticationData.Username); int deviceType = GetDeviceType(request.AuthenticationData.Username); if (migrateAgent) { // Cambio de password Kinacu var changePinResponse = new ServiceExecutionDelegator <ChangePinResponseBody, ChangePinRequestBody>().ResolveRequest( new ChangePinRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = ConfigurationManager.AppSettings["StandardOldPin"] }, DeviceType = deviceType, /*int.Parse(ConfigurationManager.AppSettings["StandardNewDeviceType"]),*/ Agent = request.AuthenticationData.Username, OldPin = ConfigurationManager.AppSettings["StandardOldPin"], NewPin = request.AuthenticationData.Password }, ApiTargetPlatform.Kinacu, ApiServiceName.ChangePin); // Login con Kinacu - NOT NOW - La proxima vez que entre va por Kinacu de una //logger.InfoHigh("Resultado del cambio de clave del usuario: " + changePinResponse.ResponseCode); // Save in DB if (changePinResponse.ResponseCode == 0) { //logger.InfoHigh("Se migró exitosamente la clave del usuario: " + request.AuthenticationData.Username); SaveAgentMigrated(request.AuthenticationData.Username); } } } // REPG2013 - esto queda deshabilitado por ahora // For speeding up, I'm caching the session value: //-var couchBaseClient = new CouchbaseClient(); //-couchBaseClient.Store(StoreMode.Set, Utils.GetSessionForUserKey(request.Username, request.Password), response.SessionID, new TimeSpan(0, UtibaUtils.SessionTTL, 0)); // Also caching the //-couchBaseClient.Store(StoreMode.Set, Utils.GetUserForSessionKey(response.SessionID), request.Username, new TimeSpan(0, UtibaUtils.SessionTTL, 0)); } return(response); }
public DataContract.MacroInternational.GetMacroProductInternationalResponse GetMacroProductsInter(DataContract.MacroInternational.GetMacroProductInternationalRequest request) { var response = new DataContract.MacroInternational.GetMacroProductInternationalResponse(); try { LogRequest(request); var sessionId = GetSessionId(request); //var platformId = Convert.ToInt32(request.Platform); //1 //var countryId = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10 //Platform products. var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>(). ResolveRequest(new GetProductListRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, SessionID = sessionId }, Agent = request.Agent, DeviceType = request.DeviceType }, request.Platform, ApiServiceName.GetProductList); if (productList.ProductList == null) { response = new DataContract.MacroInternational.GetMacroProductInternationalResponse { ResponseCode = 99, ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.", TransactionID = 0 }; } else { var dm = new Movilway.API.Data.MacroProduct.MacroProductInterDataManager(); if (String.IsNullOrEmpty(request.CountryId)) { request.CountryId = "0"; } response = dm.GetMacroProductsInter(Convert.ToInt32(request.CountryId), productList.ProductList, request.DeviceType); response.ResponseCode = 0; response.ResponseMessage = "Exito."; response.TransactionID = 0; } LogResponse(response); return(response); } catch (Exception e) { ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e)); } return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { //if (sessionID.Equals("0")) // return new TopUpResponseBody() // { // ResponseCode = 90, // ResponseMessage = "error session", // TransactionID = 0, // ExternalTransactionReference = "", // PointBalance = 0m, // StockBalance = 0m, // WalletBalance = 0m // }; TopUpRequestBody request = requestObject as TopUpRequestBody; int timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["DefaultTimeout"]); if (ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()] != null) { timeOutSeconds = int.Parse(ConfigurationManager.AppSettings["TopUp_Timeout_" + request.MNO.ToLower()]); } kinacuWS.Timeout = timeOutSeconds * 1000; int transactionId; string saleData = ""; string message = ""; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [SEND-DATA] newSaleWithExternalIdParameters {UserId=" + sessionID + ",IdProduct=" + MapMNOtoProductId(request.MNO) + ",Customer=" + request.Recipient + ",Amount=" + (request.Amount * 100) + ",CommitSale=" + "1" + ",ExternalId=" + request.ExternalTransactionReference + ",PdvRepresented=" + (request.TerminalID ?? "") + "}"); TopUpResponseBody response = null; bool kinacuTopUpResponse = false; int _Amount = (int)(request.Amount * 100); if (_cacheSession.IsActiveCache()) { //logger.ErrorHigh(String.Concat("[API] ", LOG_PREFIX, "[KinacuProvider] [EXCEPTION] [", ex.GetType().Name.ToUpper(), "] ACCEDIENDO AL CACHE VALIDANDO SECURITY {message=", ex.Message, ",stackTrace=", ex.StackTrace, "}")); logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "CACHE ACTIVO TOPUP")); /// kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; //CODIGO REPETIDO logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] newSaleWithExternalIdResult {response=" + kinacuTopUpResponse + ",IdTransaction=" + transactionId + ",SaleData=" + saleData + ",message=" + message + "}"); bool errorSession = GetResponseCode(message) == 21; if (errorSession) { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, " TOP UP ID DE SESSION INVALIDO RECALCULAR SESSION")); //solicitar de nuevo session var sessionRequest = new GetSessionRequestBody() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, DeviceType = request.DeviceType }; var getSessionResponse = new ServiceExecutionDelegator <GetSessionResponseBody, GetSessionRequestBody>().ResolveRequest( sessionRequest , ApiTargetPlatform.Kinacu, ApiServiceName.GetSession); sessionID = getSessionResponse.SessionID; logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, " NUEVO ID ", IsValidId(sessionID))); //String llave = String.Concat(cons.CACHE_SESSION_PREFIX, request.AuthenticationData.Username); String llave = String.Concat(request.AuthenticationData.Username, " ", request.AuthenticationData.Password); _cacheSession.AddOrUpdate <String>(llave, sessionID); kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; } } else { kinacuTopUpResponse = kinacuWS.NewSaleWithExternalId(int.Parse(sessionID), int.Parse(MapMNOtoProductId(request.MNO)), request.Recipient, //(int)(request.Amount * 100) _Amount , 1, request.ExternalTransactionReference, (request.TerminalID ?? ""), out transactionId, out saleData, out message); saleData = Movilway.API.Utils.ApiTicket.FormatSaledataTopUp(logger, this.GetType().Name, base.LOG_PREFIX, request, kinacuTopUpResponse, transactionId, saleData); response = new TopUpResponseBody() { ResponseCode = Utils.BuildResponseCode(kinacuTopUpResponse, message), ResponseMessage = kinacuTopUpResponse ? saleData : message, TransactionID = transactionId, ExternalTransactionReference = request.ExternalTransactionReference, Fee = 0 }; //CODIGO REPETIDO logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] [RECV-DATA] newSaleWithExternalIdResult {response=" + kinacuTopUpResponse + ",IdTransaction=" + transactionId + ",SaleData=" + saleData + ",message=" + message + "}"); } if (request.DeviceType == cons.ACCESS_H2H) { string llave = String.Concat(request.AuthenticationData.Username); decimal[] result = { 0.0m, 0.0m, 0.0m }; //try //{ // Func<decimal[]> callback = delegate()//null; // { // logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] CALLBACK SALDO"); // List<decimal> lista = new List<decimal>(); // AuthenticationData cascadeAuth = new AuthenticationData() // { // SessionID = sessionID // }; // GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator<GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() // { // AuthenticationData = cascadeAuth, // DeviceType = request.DeviceType // }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); // lista.Add(balanceResponse.StockBalance.Value); // lista.Add(response.WalletBalance = balanceResponse.WalletBalance.Value); // lista.Add(response.PointBalance = balanceResponse.PointsBalance.Value); // return lista.ToArray<decimal>(); // }; // // ()=>{ // // new int[]{0,0,0}; // //}; // result = _cacheSaldo.GetValue<decimal[]>(llave, callback); //} //catch (Exception ex) //{ // logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] ERROR AL CONSULTAR CHACHE SALDO 1"); // // throw; //} try { //CUANDO SE RECARGA EL SALDO Func <decimal[]> callback = delegate() { logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] SALDO NOT FOUND CACHE ")); return(new HandlerCacheSaldo().HandlerCache(new AuthenticationData() { SessionID = sessionID }, request)); }; bool inCache = false; //CUANDO SE ENCUENTRA EL SALDO EN CACHE //TODO plantear un accion por referencia //TODO se puede lanzar la actualizacion en cache asincrona Action <Object, Object> accion = delegate(Object key2, Object value) { inCache = true; logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] SALDO FOUND CACHE [", key2, "]")); }; result = _cacheSaldo.GetValue <decimal[]>(llave, callback, accion); //si la respuesta es valid //if (inCache && response.ResponseCode == 0) //{ // result[0] -= _Amount; // logger.InfoLow(String.Concat("[KIN] ", base.LOG_PREFIX, "[TopUpProvider] ACTUALIZANDO STOCKBALANCE EN CACHE [", result[0], "]")); // _cacheSaldo.AddOrUpdate(llave, result); //} } catch (Exception ex) { logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TopUpProvider] ERROR AL CONSULTAR CHACHE SALDO "); throw; } //AuthenticationData cascadeAuth = new AuthenticationData() //{ // SessionID = sessionID //}; //GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator<GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() //{ // AuthenticationData = cascadeAuth, // DeviceType = request.DeviceType //}, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); //if (response != null) //{ // response.StockBalance = balanceResponse.StockBalance.Value; // response.WalletBalance = balanceResponse.WalletBalance.Value; // response.PointBalance = balanceResponse.PointsBalance.Value; //} if (result.Length == 3) { response.StockBalance = result[0]; response.WalletBalance = result[1]; response.PointBalance = result[2]; } } else { AuthenticationData cascadeAuth = new AuthenticationData() { SessionID = sessionID }; GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = cascadeAuth, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if (response != null) { response.StockBalance = balanceResponse.StockBalance.Value; response.WalletBalance = balanceResponse.WalletBalance.Value; response.PointBalance = balanceResponse.PointsBalance.Value; } } if (response.ResponseCode.Equals(0) && (ConfigurationManager.AppSettings["IncludeTopupMessageExtended"] ?? "").ToLower().Equals("true")) { // Acá concatenar el mensaje del macroproducto en caso de ser necesario response.ResponseMessage = String.Concat(response.ResponseMessage, new MacroProductDataManager().GetMacroProductMessage(int.Parse(ConfigurationManager.AppSettings["CountryID"]), int.Parse(MapMNOtoProductId(request.MNO)))); } return(response); }
public IMovilwayApiResponse PerformOperation(IMovilwayApiRequest requestObject) { var request = (ProcessExternalTransactionRequestBody)requestObject; var response = new ProcessExternalTransactionResponseBody(); // Get a session for the configured super user var balance = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest( new GetBalanceRequestBody { AuthenticationData = new AuthenticationData() { Username = ConfigurationManager.AppSettings["ProincoLogin"], Password = ConfigurationManager.AppSettings["ProincoPwd"] }, DeviceType = int.Parse(ConfigurationManager.AppSettings["ProincoDeviceType"]), Platform = request.Platform }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if ((balance.ResponseCode ?? -1) != 0) { response.ResponseCode = 96; response.ResponseMessage = (balance.ResponseCode ?? 0) + "-Su transaccion no pudo ser procesada por problemas al consultar el stock"; return(response); } if (balance.StockBalance < request.Amount) { response.ResponseCode = 97; response.ResponseMessage = "Su transaccion no pudo ser procesada por falta de stock"; return(response); } var ibankClient = GetProviderForEntity(request.TargetEntity); logger.InfoLow("Comienza el ProcessExternalTransaction"); string myAgent = new Utils().GetAgentPdv(request.Agent); // Need to get the national ID: var agentInfo = new ServiceExecutionDelegator <GetAgentInfoResponseBody, GetAgentInfoRequestBody>().ResolveRequest( new GetAgentInfoRequestBody() { AuthenticationData = request.AuthenticationData, Agent = request.Agent, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetAgentInfo); logger.InfoLow("Params: " + request.Agent + " - " + agentInfo.AgentInfo.NationalID + " - " + request.Amount + " - " + request.ExternalTransactionReference); var petr = new API.IBank.ProcessTransactionRequest { Agent = request.Agent, AgentNationalID = agentInfo.AgentInfo.NationalID, Amount = request.Amount, TransactionType = "transfer", //request.TransactionType, TransactionReference = request.ExternalTransactionReference }; if (request.AdditionalData != null && request.AdditionalData.Any()) { petr.AdditionalData = new API.IBank.AdditionalData(); foreach (var item in request.AdditionalData) { petr.AdditionalData.Add(item.Key, item.Value); } } logger.InfoLow("request " + petr.Amount + " - " + petr.TransactionReference); ProcessTransactionResponse processExternalTransactionResponse = new ProcessTransactionResponse(); try { processExternalTransactionResponse = ibankClient.ProcessTransaction(petr); } catch (Exception ex) { logger.InfoLow("EX " + ex.Message + " - " + ex.StackTrace); } logger.InfoLow("response " + processExternalTransactionResponse.ResponseCode + " - " + processExternalTransactionResponse.ResponseMessage); if (processExternalTransactionResponse != null) { if (int.Parse(processExternalTransactionResponse.ResponseCode) == 1) { var config = ConfigurationManager.GetSection("Movilway.API.Config") as ApiConfiguration; var adjustmentsUser = config.ManagementUsers["adjustmentsAgent"]; string myAutorization = "", myMessage = "", myResponseCode = ""; var externalTransferResponse = new Utils().Externaltransfer(decimal.Parse(agentInfo.AgentInfo.BranchID.ToString()), ConfigurationManager.AppSettings["AccountProinco"], int.Parse(ConfigurationManager.AppSettings["ProincoUser"]), double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, DateTime.Now, ref myAutorization, ref myMessage, ref myResponseCode); if (myResponseCode == "00") { response.ResponseCode = 0; response.ResponseMessage = myMessage; response.ExternalTransactionReference = myAutorization; } else { response.ResponseCode = int.Parse(myResponseCode); response.ResponseMessage = myMessage; response.ExternalTransactionReference = myAutorization; } } else { response.ResponseCode = int.Parse(processExternalTransactionResponse.ResponseCode); response.ResponseMessage = processExternalTransactionResponse.ResponseMessage; response.ExternalTransactionReference = processExternalTransactionResponse.ExternalTransactionReference; } } else { response.ResponseCode = 99; response.ResponseMessage = "Su transaccion no pudo ser procesada"; } return(response); }
public DataContract.Macro.GetMacroProductListByCategoryResponse GetMacroProductsByCategory(DataContract.Macro.GetMacroProductListRequest request) { LogRequest(request); var response = new DataContract.Macro.GetMacroProductListByCategoryResponse(); var sessionId = GetSessionId(request, out errorMessage); logger.InfoLow("[API] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory {sessionId = " + sessionId + ", UserId=" + request.Agent + ", DeviceType=" + request.DeviceType + "}"); if (errorMessage != ErrorMessagesMnemonics.None) { response.ResponseCode = (int)errorMessage; response.ResponseMessage = errorMessage.ToDescription(); logger.InfoLow("[API Binwus] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory Error: " + errorMessage.ToDescription()); return(response); } try { var platformId = Convert.ToInt32(request.Platform); //1 var countryId = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10 logger.InfoLow("[API BinwusA] [MacroProductProvider]"); //Platform products. var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>(). ResolveRequest(new GetProductListRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, SessionID = sessionId }, Agent = request.Agent, DeviceType = request.DeviceType }, request.Platform, ApiServiceName.GetProductList); logger.InfoLow("[API BinwusB] [MacroProductProvider]"); if (productList.ProductList == null) { response = new GetMacroProductListByCategoryResponse { ResponseCode = 99, ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.", TransactionID = 0 }; logger.InfoLow("[API Binwus1] [" + sessionId + "] [MacroProductProvider] [SEND-DATA] GetMacroProductsByCategory Error: El usuario no tiene productos asignados en la plataforma."); } else { logger.InfoLow("[API BinwusC.] [MacroProductProvider]"); var dm = new Movilway.API.Data.MacroProduct.MacroProductDataManager(); logger.InfoLow("[API BinwusD.] [MacroProductProvider]"); response = dm.GetMacroProductsByCategory(platformId, countryId, productList.ProductList, request.DeviceType); logger.InfoLow("[API BinwusE.] [MacroProductProvider]"); logger.InfoLow("[API Binwus2] [" + sessionId + "] [MacroProductProvider] [RECV-DATA] GetMacroProductsByCategory {response={" + productList.ProductList.ToString() + "}}"); response.ResponseCode = 0; response.ResponseMessage = "Exito."; response.TransactionID = 0; } } catch (Exception e) { logger.InfoLow("[API Binwus3] [" + sessionId + "] [MacroProductProvider] [RECV-DATA] GetMacroProductsByCategory Error: " + e.Message); ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e)); } LogResponse(response); return(response); }
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 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); }
internal GetFavoriteAmountsResponse GetFavoriteAmounts(GetFavoriteAmountsRequest request) { LogRequest(request); var response = new GetFavoriteAmountsResponse(); var sessionId = GetSessionId(request, out errorMessage); if (errorMessage != ErrorMessagesMnemonics.None) { response.ResponseCode = (int)errorMessage; response.ResponseMessage = errorMessage.ToDescription(); return(response); } try { var platformId = Convert.ToInt32(request.Platform); //1 var countryId = Convert.ToInt32(ConfigurationManager.AppSettings["CountryId"]); //10 //Platform products. var productList = new ServiceExecutionDelegator <GetProductListResponseBody, GetProductListRequestBody>(). ResolveRequest(new GetProductListRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password, SessionID = sessionId }, Agent = request.Agent, DeviceType = request.DeviceType }, request.Platform, ApiServiceName.GetProductList); if (productList.ProductList == null) { response = new GetFavoriteAmountsResponse() { ResponseCode = 99, ResponseMessage = "Error: El usuario no tiene productos asignados en la plataforma.", TransactionID = 0 }; } else { var dm = new MacroProductDataManager(); response.FavoriteAmounts = dm.GetFavoriteAmounts(countryId); response.ResponseCode = 0; response.ResponseMessage = "Exito."; response.TransactionID = 0; } } catch (Exception e) { ProviderLogger.ExceptionLow(() => TagValue.New().Message("Exception trying to serve KINACU Operation").Exception(e)); } LogResponse(response); return(response); }
public override IMovilwayApiResponse PerformKinacuOperation(IMovilwayApiRequest requestObject, SaleInterface kinacuWS, String sessionID) { TransferRequestBody request = requestObject as TransferRequestBody; TransferResponseBody response = null; int sourceUserId = 0, recipientAgentId = 0; string accessReceiver = ""; bool requestHasPDV = !String.IsNullOrEmpty(request.RecipientPdv); if (sessionID.Equals("0")) { response = new TransferResponseBody() { ResponseCode = requestHasPDV ? 3 : 90, ResponseMessage = requestHasPDV ? "ID Inactivo" : "error session", TransactionID = 0, StockBalance = 0m }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } return(response); } try { sourceUserId = new IBank.Utils().GetUserId(request.AuthenticationData.Username); } catch (Exception) { } int recipientId = 0; bool recipientIsNumeric = int.TryParse(request.Recipient, out recipientId); if (!String.IsNullOrEmpty(request.RecipientPdv)) { try { recipientAgentId = new IBank.Utils().GetAgentIdByPdv(request.RecipientPdv); accessReceiver = request.Recipient; } catch (Exception e) { if (requestHasPDV) { throw e; } else { return new TransferResponseBody() { ResponseCode = 3, ResponseMessage = "ID Inactivo", TransactionID = 0, StockBalance = 0m, ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") } }; } } else if (String.IsNullOrEmpty(request.RecipientAccessId)) { try { recipientAgentId = new IBank.Utils().GetAgentId(request.Recipient); accessReceiver = request.Recipient; } catch (Exception) { } } else { try { //TODO PROBLEMA NAMESAPCE Movilway.API.Service.ExtendedApi.Provider.IBank.Utils().GetAgentId(request.RecipientAccessId); recipientAgentId = new IBank.Utils().GetAgentId(request.RecipientAccessId); accessReceiver = request.RecipientAccessId; } catch (Exception) { if (requestHasPDV) { return new TransferResponseBody() { ResponseCode = 3, ResponseMessage = "ID Inactivo", TransactionID = 0, StockBalance = 0m, ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") } } ; /*request.Recipient = request.RecipientAccessId;*/ } } if (recipientAgentId != 0) { request.Recipient = recipientAgentId.ToString(); } bool isChild = false; bool isNegativeAmount = false; bool acceptReverse = false; int sourceAgentId = new IBank.Utils().GetAgentId(request.AuthenticationData.Username); if (sourceAgentId == recipientAgentId) { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 90, ResponseMessage = requestHasPDV ? "ID Inactivo" : "Distribución de Saldo Fallida, agencia destino igual a agencia origen", //ResponseCode = 90, //ResponseMessage = "Distribución de Saldo Fallida, agencia destino igual a agencia origen", TransactionID = 0 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } return(response); } if (request.Amount < 0) { isNegativeAmount = true; acceptReverse = new IBank.Utils().CheckReverse(request.Recipient); } var getChildListResponse = new ServiceExecutionDelegator <GetChildListResponseBody, GetChildListRequestBody>().ResolveRequest( new GetChildListRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password }, DeviceType = request.DeviceType, Agent = request.AuthenticationData.Username, Platform = "1" }, ApiTargetPlatform.Kinacu, ApiServiceName.GetChildList); if (getChildListResponse.ChildList != null && getChildListResponse.ChildList.Count(ch => ch.Agent == request.Recipient) > 0) { isChild = true; } if (isChild && !isNegativeAmount && !request.DBTransferIfChild) { // Acá resultó ser hijo y debe afectarse la cuenta corriente, así que procedo con la distribución a hijo vía WS LogisticsInterface logisticsWS = new LogisticsInterface(); string message = ""; logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] createProductDistributionParameters {UserId=" + sessionID + ",RetailerIdTo=" + decimal.Parse(request.Recipient) + ",IdProduct=0,Amount=" + int.Parse((request.Amount * 100).ToString("#")) + "}"); var result = logisticsWS.CreateProductDistribution(int.Parse(sessionID), decimal.Parse(request.Recipient), 0, int.Parse((request.Amount * 100).ToString("#")), out message); var transactionId = new IBank.Utils().GetDistributionId(DateTime.Now, Convert.ToDecimal(sourceAgentId), decimal.Parse(request.Recipient), request.Amount); logger.InfoLow("[KIN] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + result + ",message=" + message + "}"); if (result) { response = new TransferResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : String.Format("Distribución de Saldo Exitosa\nFECHA: {0}\nVENDEDOR: {1}\nID PDV: {2}\nMONTO: {3}", DateTime.Now.ToString("dd/MM/yyyy"), request.AuthenticationData.Username, getChildListResponse.ChildList.Single(ch => ch.Agent == request.Recipient).Name, request.Amount.ToString("N2")), //message, TransactionID = transactionId }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : Utils.BuildResponseCode(result, message), ResponseMessage = requestHasPDV ? "ID Inactivo" : (String.IsNullOrEmpty(message) ? "La distribución es fallida, por favor valide que ingreso el ID correcto del PDV Hijo o que tiene suficiente saldo." : message), //ResponseCode = Utils.BuildResponseCode(result,message), //ResponseMessage = String.IsNullOrEmpty(message) ? "La distribución es fallida, por favor valide que ingreso el ID correcto del PDV Hijo o que tiene suficiente saldo." : message, //message, TransactionID = transactionId }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } } else if ((isChild && !isNegativeAmount && request.DBTransferIfChild) || (!isChild && !isNegativeAmount) || (isChild && isNegativeAmount && acceptReverse)) { // Acá resultó NO ser hijo(o hijo pero no se quiere afectar cta corriente), así que procedo con la distribución vía SP string autorization = "", messageOut = "", responseCode = "99"; DateTime myNow = Utils.GetLocalTimeZone(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters {agent_reciver=" + request.Recipient + ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) + ",reference_number=" + request.ExternalTransactionReference); // + ",date=" + myNow + "}"); //Se valida que el maximo a transferir si es hijo no exceda el límite de crédito (Condición Proesa) if (isChild && !isNegativeAmount && request.DBTransferIfChild) { //Ariel 2021-Ma-09 Comentado ponemos cero decimal maxCredit = 0; //Utils.GetAgentMaxCreditAvailable(request.Recipient); if (request.Amount > maxCredit) { logger.ErrorHigh(base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters El monto Excede el máximo de crédito disponible Amount:" + request.Amount + " Limite Credito: " + maxCredit); return(new TransferResponseBody() { ResponseCode = 99, ResponseMessage = "EL MONTO EXCEDE EL LIMITE DE CREDITO CONFIGURADO", TransactionID = 0, StockBalance = 0m }); } } //decimal newAmount = 0m; var distributionResponse = new IBank.Utils().transferb2b(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode); //, ref newAmount); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + distributionResponse + ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}"); if (int.Parse(responseCode ?? "99") == 0) { response = new TransferResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : messageOut, TransactionID = int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"), ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut, TransactionID = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } } else if (!isChild && isNegativeAmount) { // TODO NEW CONDITION TO MO - Done int[] branchsAllowed = Array.ConvertAll <string, int>(ConfigurationManager.AppSettings["ReversesBranchesAllowed"].Split(','), int.Parse); if (branchsAllowed.Contains(sourceAgentId)) { // TODO Check the debt_amount var debtAmount = Utils.GetTotalDebt(request.Recipient); logger.InfoLow("[MO] " + base.LOG_PREFIX + "[MOApiProvider] [RECV-DATA] totalDebtAmount {response=" + debtAmount + "}"); if (Math.Abs(request.Amount) <= debtAmount) { // Mismo código que arriba string autorization = "", messageOut = "", responseCode = "99"; DateTime myNow = Utils.GetLocalTimeZone(); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-DATA] transferb2bParameters {agent_reciver=" + request.Recipient + ",cuenta=" + ConfigurationManager.AppSettings["TransferAccount"] + ",usr_id=" + sourceUserId + ",amount=" + double.Parse(request.Amount.ToString()) + ",reference_number=" + request.ExternalTransactionReference + ",date=" + myNow + "}"); //decimal newAmount = 0m; var distributionResponse = new IBank.Utils().transferb2b(request.Recipient, accessReceiver, ConfigurationManager.AppSettings["TransferAccount"], sourceUserId, double.Parse(request.Amount.ToString()), request.ExternalTransactionReference, myNow, (isChild && isNegativeAmount && acceptReverse), ref autorization, ref messageOut, ref responseCode); //, ref newAmount, partialCharge: true); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [RECV-DATA] createProductDistributionResult {response=" + distributionResponse + ",autorization=" + autorization + ",message=" + messageOut + ",response_code=" + responseCode + "}"); if (int.Parse(responseCode ?? "99") == 0) { response = new TransferResponseBody() { Fee = 0, ResponseCode = 0, ResponseMessage = requestHasPDV ? "activado" : messageOut, TransactionID = int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : int.Parse(responseCode ?? "99"), ResponseMessage = requestHasPDV ? "ID Inactivo" : messageOut, TransactionID = String.IsNullOrEmpty(autorization) ? 99 : int.Parse(autorization) }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } //if (!newAmount.Equals(request.Amount)) // response.ChargedAmount = newAmount; } // End } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : "El monto a debitar es superior a la deuda actual", TransactionID = 99 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : "Debito de stock no permitido", TransactionID = 99 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } // Validate if the branch is MO (allowed from .config) // if true // query debt amount // if amount <= debt amount // transfer code (up) // else // return error amount too high // else // return error } else { response = new TransferResponseBody() { Fee = 0, ResponseCode = requestHasPDV ? 3 : 99, ResponseMessage = requestHasPDV ? "ID Inactivo" : (isChild && isNegativeAmount && !acceptReverse ? "La agencia no acepta quitas automáticas" : "Error no identificado"), TransactionID = 99 }; if (requestHasPDV) { response.ResponseDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"); } } try { GetBalanceResponseBody balanceResponse = new ServiceExecutionDelegator <GetBalanceResponseBody, GetBalanceRequestBody>().ResolveRequest(new GetBalanceRequestBody() { AuthenticationData = new AuthenticationData() { Username = request.AuthenticationData.Username, Password = request.AuthenticationData.Password }, DeviceType = request.DeviceType }, ApiTargetPlatform.Kinacu, ApiServiceName.GetBalance); if (response != null) { response.StockBalance = balanceResponse.StockBalance.Value; } } catch (Exception) { } // Envío de SMS VE si lo tiene habilitado try { if (response.ResponseCode.Equals(0)) { var sendTransferSMS = ConfigurationManager.AppSettings["SendTransferSMS"]; if (!String.IsNullOrEmpty(sendTransferSMS) ? bool.Parse(sendTransferSMS) : false) { var mobilePhone = new IBank.Utils().GetAgentMobilePhone(int.Parse(request.Recipient)); var stockFinal = new IBank.Utils().GetAgentFinalStock(int.Parse(request.Recipient)); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] phone " + mobilePhone); if (mobilePhone.Length.Equals(int.Parse(ConfigurationManager.AppSettings["TelemoPhoneLength"]))) { logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer begin"); Util.SMSTelemoDispatcher.SmsToCustomer(ConfigurationManager.AppSettings["TelemoClientId"], ConfigurationManager.AppSettings["TelemoCustomerId"], mobilePhone, String.Format(ConfigurationManager.AppSettings["TelemoMessageTemplate"], request.Amount.ToString("C"), stockFinal, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.UtcNow.AddHours(new IBank.Utils().GetTimeZone()).ToString("HH:mm:ss"))); logger.InfoLow("[QRY] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] smsToCustomer end"); } } } } catch (Exception ex) { logger.ErrorHigh("[SMS] " + base.LOG_PREFIX + "[TransferProvider] [SEND-SMS] " + ex.Message + ", " + ex.StackTrace); } return(response); } }