/// <summary> /// Emite un nuevo giro a partir de llamados directos a los WS de Movilway - Kinacu /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información del giro</param> /// <returns>Respuesta de la cotización</returns> public EmitirResponse Emitir(EmitirRequest request) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); this.LogRequest(request); EmitirResponse response = new EmitirResponse(); string sessionId = this.GetSessionId(request, response, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.LogResponse(response); return(response); } if (!request.IsValidRequest()) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.InvalidRequiredFields); this.LogResponse(response); return(response); } DwhModel.Cliente infoEmisor = this.GetInfoCliente(sessionId, request.Emisor.TipoIdentificacion, request.Emisor.NumeroIdentificacion, out this.errorMessage); DwhModel.Cliente infoReceptor = this.GetInfoCliente(sessionId, request.Receptor.TipoIdentificacion, request.Receptor.NumeroIdentificacion, out this.errorMessage); DwhModel.Agencia agencia = this.GetInfoAgencia(sessionId, request.AuthenticationData.Username); if (agencia == null) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.UnableToFindAgentInLocalDatabase); this.LogResponse(response); return(response); } if (infoEmisor == null || infoReceptor == null) { if (infoEmisor == null && infoReceptor == null) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.UnableToFindIssuingAndReceiverUserInLocalDatabase); } else if (infoEmisor == null) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.UnableToFindIssuingUserInLocalDatabase); } else { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.UnableToFindReceiverUserInLocalDatabase); } this.LogResponse(response); return(response); } if (infoEmisor.Id == infoReceptor.Id) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.IssuingUserAndReceiverUserAreTheSame); this.LogResponse(response); return(response); } request.CiudadPdv = agencia.Ciudad; int id = this.InsertGiro(sessionId, request, infoEmisor, infoReceptor, agencia, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None || id == 0) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.InternalDatabaseErrorInsertingOrder); this.LogResponse(response); return(response); } Exception ex = null; DataContract.TopUpResponseBody topup = null; if (this.errorMessage == ErrorMessagesMnemonics.None) { topup = this.EmitirPaso2(request, id, sessionId, out ex); } int topupResponseCode = topup != null && topup.ResponseCode.HasValue ? topup.ResponseCode.Value : -1; if (this.errorMessage == ErrorMessagesMnemonics.None && topupResponseCode == 0) { response.ResponseCode = 0; DwhModel.GiroUltimaTransaccion infoGiro = this.GetInfoGiro(sessionId, id, out this.errorMessage); response.Pin = Multipay472TripleDes.Decrypt(this.multipayTripleDesKey, infoGiro.Pin); response.CodigoTransaccion = infoGiro.CodigoTransaccion ?? " "; response.NumeroFactura = infoGiro.NumeroFactura; response.CodigoAutorizacion = infoGiro.CodigoAutorizacion472; response.Fecha = infoGiro.Fecha.DateTime; response.ResponseMessage = topup.ResponseMessage; response.Id = infoGiro.Id; response.ExternalId = infoGiro.ExternalId; if (this.smssEnabled) { // Envios SMSs string message = string.Format( "Se emitio un giro por {0} con PIN: {1}. Servicio prestado por Movilway S.A.S", this.FormatMoney(request.ValorAEntregar), response.Pin); SmsApi.SmsApiSoapClient smsapi = new SmsApi.SmsApiSoapClient(); string phonePayer = string.Concat("57", infoEmisor.Telefono.ToString()); string phonePayee = string.Concat("57", infoReceptor.Telefono.ToString()); try { smsapi.SendSms(new SmsApi.SendSmsRequest() { To = phonePayer, Message = message }); if (phonePayer != phonePayee) { smsapi.SendSms(new SmsApi.SendSmsRequest() { To = phonePayee, Message = message }); } } catch (Exception exs) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error envíando SMSs") .Exception(exs)); } } } else { string error = string.Empty; //if (transfer != null && transferResponseCode != 0) //{ // error = "Error en llamado a Transfer"; // response.ResponseCode = transfer.ResponseCode; // response.ResponseMessage = transfer.ResponseMessage; //} //else if (topup != null && topupResponseCode != 0) { error = "Error en llamado a TopUp"; response.ResponseCode = topup.ResponseCode; response.ResponseMessage = topup.ResponseMessage; } else { error = "Error API/Otros"; response.ResponseCode = (int)this.errorMessage; response.ResponseMessage = string.Concat(this.errorMessage.ToDescription(), ex != null ? string.Concat(" => ", ex.Message) : string.Empty); } this.AnularGiro(sessionId, id, error, response.ResponseMessage, out this.errorMessage); this.LogResponse(response); return(response); } this.LogResponse(response); return(response); }
/// <summary> /// Consulta de giros /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información de la consulta</param> /// <returns>Respuesta de la consulta</returns> public ConsultaResponse Consulta(ConsultaRequest request) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); this.LogRequest(request); ConsultaResponse response = new ConsultaResponse(); string sessionId = this.GetSessionId(request, response, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.LogResponse(response); return(response); } if (!request.IsValidRequest()) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.InvalidRequiredFields); this.LogResponse(response); return(response); } MultiPay472.Service1SoapClient client = this.GetSoapClient(); string endpointName = "ConsultaGiros"; try { MultiPay472.ConsultaGiro peticion = new MultiPay472.ConsultaGiro(); peticion.NitRed = this.multipayNitRed; peticion.CodigoTerminal = this.multipayTerminal; peticion.CodigoTransaccion = this.GenerarCodigoTransaccion(sessionId); peticion.CodigoPuntoVenta = request.Pdv; peticion.TipoCliente = Cash472.CashProvider.ObtenerCodigoTipoCliente(request.TipoCliente); peticion.OIdentificacionCliente = new MultiPay472.IdentificacionCliente(); peticion.OIdentificacionCliente.TipoIdentificacion = Cash472.CashProvider.ObtenerCodigoTipoIdentificacion(request.TipoIdentificacion); peticion.OIdentificacionCliente.NumeroIdentificacion = request.NumeroIdentificacion; if (!string.IsNullOrEmpty(request.Pin)) { peticion.PIN = Multipay472TripleDes.Encrypt(this.multipayTripleDesKey, request.Pin); } this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Llamando servicio \"" + endpointName + "\" ...")); MultiPay472.RespuestaConsultaGiro[] resp = client.ConsultaGiros(peticion, this.multipayUsuario); MultiPay472.RespuestaConsultaGiro primero = resp != null && resp.Length > 0 ? resp[0] : null; this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Respuesta servicio \"" + endpointName + "\"") .Tag("Respuesta").Value(resp != null && primero != null ? resp[0].CodigoRespuesta : "NULL")); if (resp != null && primero != null && primero.CodigoRespuesta == CashProvider.CodigoRespuestaExitoso) { response.ResponseCode = 0; response.Giros = new List <Giro>(); foreach (MultiPay472.RespuestaConsultaGiro it in resp) { DataContract.Cash472.Giro giro = new DataContract.Cash472.Giro(); this.EstablecerValoresGiro(giro, it); response.Giros.Add(giro); } response.Quantity = response.Giros.Count; } else { if (resp == null || primero == null) { this.errorMessage = ErrorMessagesMnemonics.WebServiceDoesNotRespond; response.ResponseCode = (int)this.errorMessage; response.ResponseMessage = this.errorMessage.ToDescription(); } else { response.ResponseMessage = CashProvider.ObtenerMensajeCodigoRespuesta(primero.CodigoRespuesta); } } } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error llamando servicio \"" + endpointName + "\"") .Exception(ex)); } this.LogResponse(response); return(response); }