/// <summary> /// Emite un nuevo giro a partir de llamados directos a los WS de MultiPay 472 /// </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 Emitir472(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) { 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); 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); } return(response); } if (infoEmisor.Id == infoReceptor.Id) { this.SetResponseErrorCode(response, ErrorMessagesMnemonics.IssuingUserAndReceiverUserAreTheSame); return(response); } Exception ex; MultiPay472.RespuestaValidacionConstitucionGiro constitucion = this.EmitirPaso1Cash472(request, sessionId, out ex); MultiPay472.RespuestaEmisionGiro emision = null; if (this.errorMessage == ErrorMessagesMnemonics.None) { emision = this.EmitirPaso2Cash472(request, sessionId, constitucion, out ex); } if (this.errorMessage == ErrorMessagesMnemonics.None && emision != null) { response.ResponseCode = 0; response.Pin = emision.PIN; response.CodigoTransaccion = emision.CodigoTransaccion; response.CodigoTransaccionConstitucion = constitucion.CodigoTransaccion; response.NumeroTransaccion472 = emision.NumeroReferencia; response.NumeroFactura = string.IsNullOrEmpty(emision.NumeroFactura) ? string.Empty : emision.NumeroFactura; response.CodigoAutorizacion = string.IsNullOrEmpty(emision.CodigoAutorizacion) ? string.Empty : emision.CodigoAutorizacion; response.Fecha = Cash472.CashProvider.ObtenerFechaDesdeString(emision.Fecha); int id = this.InsertGiroCash472(sessionId, request, infoEmisor, infoReceptor, constitucion, emision, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None || id == 0) { // TODO: manejar excepción de creación del giro } } else { response.ResponseCode = (int)this.errorMessage; if (this.errorMessage == ErrorMessagesMnemonics.WebServiceException) { response.ResponseMessage = string.Concat(this.errorMessage.ToDescription(), " => ", ex != null ? ex.Message : string.Empty); } else { response.ResponseMessage = this.errorMessage == ErrorMessagesMnemonics.WebServiceDoesNotRespond ? this.errorMessage.ToDescription() : CashProvider.ObtenerMensajeCodigoRespuesta(constitucion.CodigoRespuesta); } } 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); }
/// <summary> /// Realiza el proceso de reverso de pago para un giro /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información del reverso de pago</param> /// <returns>Respuesta del pago</returns> public ReversoPagoResponse ReversoPago(ReversoPagoRequest request) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); this.LogRequest(request); ReversoPagoResponse response = new ReversoPagoResponse(); 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 infoCliente = this.GetInfoCliente(sessionId, request.TipoIdentificacion, request.NumeroIdentificacion, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.SetResponseErrorCode(response, this.errorMessage); this.LogResponse(response); return(response); } MultiPay472.Service1SoapClient client = this.GetSoapClient(); string endpointName = "ReversoPagoGiro"; try { MultiPay472.PagoGiro peticion = new MultiPay472.PagoGiro(); peticion.NitRed = this.multipayNitRed; peticion.CodigoTerminal = this.multipayTerminal; peticion.CodigoTransaccion = this.GenerarCodigoTransaccion(sessionId); peticion.ConHuella = false; peticion.IdGiro = request.Id; peticion.NumeroComprobantePago = request.NumeroComprobantePago; peticion.CodigoPuntoVenta = request.Pdv; peticion.CodigoDaneCiudadPuntoVenta = request.CiudadPdv; peticion.Valor = request.Valor; peticion.OIdentificacionCliente = new MultiPay472.IdentificacionCliente(); peticion.OIdentificacionCliente.TipoIdentificacion = Cash472.CashProvider.ObtenerCodigoTipoIdentificacion(request.TipoIdentificacion); peticion.OIdentificacionCliente.NumeroIdentificacion = request.NumeroIdentificacion; this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Llamando servicio \"" + endpointName + "\" ...")); MultiPay472.RespuestaPagoGiro resp = client.ReversoPagoGiro(peticion, this.multipayUsuario); this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Respuesta servicio \"" + endpointName + "\"") .Tag("Respuesta").Value(resp != null ? resp.CodigoRespuesta : "NULL")); if (resp != null && resp.CodigoRespuesta == CashProvider.CodigoRespuestaExitoso) { response.ResponseCode = 0; response.NumeroFactura = resp.NumeroFactura; response.CodigoTransaccion = !string.IsNullOrEmpty(resp.CodigoTransaccion) ? resp.CodigoTransaccion : string.Empty; response.CodigoAutorizacion = resp.CodigoAutorizacion; response.NumeroComprobantePago = resp.NumeroComprobantePago; response.NumeroReferencia = resp.NumeroReferencia; response.Valor = resp.ValorPago; response.Fecha = CashProvider.ObtenerFechaDesdeString(resp.Fecha); } else { if (resp == null) { this.errorMessage = ErrorMessagesMnemonics.WebServiceDoesNotRespond; response.ResponseCode = (int)this.errorMessage; response.ResponseMessage = this.errorMessage.ToDescription(); } else { response.ResponseMessage = CashProvider.ObtenerMensajeCodigoRespuesta(resp.CodigoRespuesta); } } } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error llamando servicio \"" + endpointName + "\"") .Exception(ex)); } this.LogResponse(response); return(response); }
/// <summary> /// Cotizador de giros /// </summary> /// <param name="request">Objeto que contiene todos los datos de autenticacion del usuario e información de la cotización</param> /// <returns>Respuesta de la cotización</returns> public CotizarResponse Cotizar(CotizarRequest request) { string methodName = string.Format("{0}", System.Reflection.MethodBase.GetCurrentMethod().Name); this.LogRequest(request); CotizarResponse response = new CotizarResponse(); string sessionId = this.GetSessionId(request, response, out this.errorMessage); if (this.errorMessage != ErrorMessagesMnemonics.None) { this.LogResponse(response); return(response); } MultiPay472.Service1SoapClient client = this.GetSoapClient(); string endpointName = "CotizadorGiro"; try { MultiPay472.CotizadorGiro peticion = new MultiPay472.CotizadorGiro(); peticion.NitRed = this.multipayNitRed; peticion.CodigoTerminal = this.multipayTerminal; peticion.CodigoTransaccion = this.GenerarCodigoTransaccion(sessionId); peticion.CodigoPuntoVenta = request.Pdv; peticion.ValorRecibido = request.ValorRecibido; peticion.IncluyeFlete = request.IncluyeFlete; this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Llamando servicio \"" + endpointName + "\" ...")); MultiPay472.RespuestaCotizadorGiro resp = client.CotizadorGiro(peticion, this.multipayUsuario); this.ProviderLogger.InfoLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Respuesta servicio \"" + endpointName + "\"") .Tag("Respuesta").Value(resp != null ? resp.CodigoRespuesta : "NULL")); if (resp != null && resp.CodigoRespuesta == CashProvider.CodigoRespuestaExitoso) { response.ResponseCode = 0; response.TotalARecibir = resp.ValorTotal; response.TotalAEntregar = resp.ValorEntregaBeneficiario; response.Flete = resp.ValorFlete; response.CodigoTransaccion = resp.CodigoTransaccion; } else { if (resp == null) { this.errorMessage = ErrorMessagesMnemonics.WebServiceDoesNotRespond; response.ResponseCode = (int)this.errorMessage; response.ResponseMessage = this.errorMessage.ToDescription(); } else { response.ResponseMessage = CashProvider.ObtenerMensajeCodigoRespuesta(resp.CodigoRespuesta); } } } catch (Exception ex) { this.ProviderLogger.ExceptionLow(() => TagValue.New() .MethodName(methodName) .Message("[" + sessionId + "] " + "Error llamando servicio \"" + endpointName + "\"") .Exception(ex)); } this.LogResponse(response); return(response); }