/// <summary> /// Metodo para obtener tarjetas bancarias Melody Milano /// </summary> /// <param name="request">Movimiento tarjeta bancaria</param> /// <returns>Respuesta de la operación</returns> public ResponseBussiness <PagoBancarioResponse> ObtenerTarjetaBancariaMelody(ProcesarMovimientoTarjetaBancariaRequest request) { return(tryCatch.SafeExecutor(() => { PagoBancarioResponse respuesta = new PagoBancarioResponse(); using (TransactionScope scope = new TransactionScope()) { TarjetaBancariaBusiness tarjeta = new TarjetaBancariaBusiness(this.token); var funcionesCaja = funcionesRepository.GetFunctions(token.CodeBox, token.CodeStore); if (funcionesCaja != null) { respuesta = tarjeta.ObtenerTarjeta(funcionesCaja.UrlLecturaBancaria, token.CodeStore, request.Venta.FolioOperacionAsociada); if (respuesta.CodeNumber == 0) { scope.Complete(); } } else { respuesta.CodeNumber = 103; respuesta.CodeDescription = "No existe funciones asociadas a la caja, revise las funciones registradas de la caja"; } } return respuesta; })); }
/// <summary> /// Metodo para procesar tarjetas bancarias con retiro de efectivo /// </summary> /// <param name="request">Movimiento tarjeta bancaria</param> /// <returns>Respuesta de la operación</returns> public ResponseBussiness <PagoBancarioResponse> ProcesarTarjetaBancariaCashBackAdvance(ProcesarMovimientoTarjetaBancariaRequest request) { return(tryCatch.SafeExecutor(() => { PagoBancarioResponse respuesta = new PagoBancarioResponse(); using (TransactionScope scope = new TransactionScope()) { TarjetaBancariaBusiness tarjeta = new TarjetaBancariaBusiness(this.token); var funcionesCaja = funcionesRepository.GetFunctions(token.CodeBox, token.CodeStore); if (funcionesCaja != null) { respuesta = tarjeta.CashBackAdvance(funcionesCaja.UrlLecturaBancaria, token.CodeStore, request.Retiro.FolioOperacionAsociada, request.Retiro.ImporteCashBack, 1); if (respuesta.CodeNumber == 0) { var movimientoVenta = repository.ProcesarMovimientoTarjetaBancariaRetiro(token.CodeStore, token.CodeBox, token.CodeEmployee, respuesta.Authorization, respuesta.CardNumber, request); scope.Complete(); } } else { respuesta.CodeNumber = 103; respuesta.CodeDescription = "No existe funciones asociadas a la caja, revise las funciones registradas de la caja"; } } return respuesta; })); }
/// <summary> /// Cancela la operación de cobro /// </summary> /// <param name="url">URL del servicio de cobro</param> /// <returns></returns> public PagoBancarioResponse Cancelar(string url) { PagoBancarioResponse response = new PagoBancarioResponse(); var httpWebRequest = (HttpWebRequest)WebRequest.Create(url + "/api/paymentpinpad/cancelpayment"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "GET"; try { var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); } } catch (WebException webException) { var httpResponse = (HttpWebResponse)webException.Response; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); } } return(response); }
/// <summary> /// Metodo para procesar tarjetas bancarias con pago y retiro de efectivo /// </summary> /// <param name="request">Movimiento tarjeta bancaria</param> /// <returns>Respuesta de la operación</returns> public ResponseBussiness <PagoBancarioResponse> ProcesarTarjetaBancariaCashBack(ProcesarMovimientoTarjetaBancariaRequest request) { return(tryCatch.SafeExecutor(() => { PagoBancarioResponse respuesta = new PagoBancarioResponse(); using (TransactionScope scope = new TransactionScope()) { TarjetaBancariaBusiness tarjeta = new TarjetaBancariaBusiness(this.token); var funcionesCaja = funcionesRepository.GetFunctions(token.CodeBox, token.CodeStore); if (funcionesCaja != null) { // Se procesan las promociones por venta foreach (var item in request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = repository.PersistirPromocionesVenta(request.Venta.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } // Se procesan las promociones por línea de venta foreach (var item in request.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = repository.PersistirPromocionesLineaVenta(request.Venta.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } if (request.Retiro.Retirar) { respuesta = tarjeta.CobroConCashBack(funcionesCaja.UrlLecturaBancaria, token.CodeStore, request.Venta.FolioOperacionAsociada, request.Venta.MesesFinanciamiento, request.Venta.MesesParcialidades, request.Venta.CodigoPromocion, request.Venta.ImporteVentaTotal, request.Retiro.ImporteCashBack, request.Venta.SecuenciaFormaPagoImporte); if (respuesta.CodeNumber == 0) { request.Venta.CodigoFormaPagoImporte = respuesta.TipoTarjeta; var movimientoVenta = repository.ProcesarMovimientoTarjetaBancariaVenta(token.CodeStore, token.CodeBox, token.CodeEmployee, respuesta.Authorization, respuesta.CardNumber, request); var movimientoCashBack = repository.ProcesarMovimientoTarjetaBancariaRetiro(token.CodeStore, token.CodeBox, token.CodeEmployee, respuesta.Authorization, respuesta.CardNumber, request); scope.Complete(); } } else { respuesta = tarjeta.CobroConCashBack(funcionesCaja.UrlLecturaBancaria, token.CodeStore, request.Venta.FolioOperacionAsociada, request.Venta.MesesFinanciamiento, request.Venta.MesesParcialidades, request.Venta.CodigoPromocion, request.Venta.ImporteVentaTotal, 0, request.Venta.SecuenciaFormaPagoImporte); if (respuesta.CodeNumber == 0) { request.Venta.CodigoFormaPagoImporte = respuesta.TipoTarjeta; var movimientoVenta = repository.ProcesarMovimientoTarjetaBancariaVenta(token.CodeStore, token.CodeBox, token.CodeEmployee, respuesta.Authorization, respuesta.CardNumber, request); scope.Complete(); } } } else { respuesta.CodeNumber = 103; respuesta.CodeDescription = "No existe funciones asociadas a la caja, revise las funciones registradas de la caja"; } } return respuesta; })); }
/// <summary> /// Cobro con tarjeta bancaria y retiro en efectivo /// </summary> /// <param name="url">URL del servicio de cobro</param> /// <param name="numeroSesion">Número de sesión</param> /// <param name="folio">Folio de operación</param> /// <param name="mesesFinanciamiento">Número de meses que se tiene antes de hacer el primer pago</param> /// <param name="mesesParcialidades">Número de meses parciales del pago</param> /// <param name="codigoPromocion">Código de promoción bancario</param> /// <param name="montoPagado">Monto a pagar</param> /// <param name="montoCashBack">Monto a retirar</param> /// <returns></returns> public PagoBancarioResponse CobroConCashBack(string url, int numeroSesion, string folio, int mesesFinanciamiento, int mesesParcialidades, int codigoPromocion, decimal montoPagado, decimal montoCashBack, int secuencia) { PagoBancarioResponse response = new PagoBancarioResponse(); var httpWebRequest = (HttpWebRequest)WebRequest.Create(url + "/api/paymentpinpad/paywithcashback"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = int.Parse(System.Configuration.ConfigurationManager.AppSettings.Get("tiempoEsperaWebApi")); var serializer = new Newtonsoft.Json.JsonSerializer(); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { using (var textWriter = new Newtonsoft.Json.JsonTextWriter(streamWriter)) { serializer.Serialize(textWriter, new { sessionNumber = numeroSesion, commerceReference = folio, transactionAmount = montoPagado, cashBackAmount = montoCashBack, financialMonths = mesesFinanciamiento, paymentsPartial = mesesParcialidades, promotion = codigoPromocion, secuenciaPos = secuencia }); } } try { var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); response.Authorization = Convert.ToString(token.SelectToken("authorization")); response.CardNumber = Convert.ToString(token.SelectToken("cardNumber")); response.TipoTarjeta = Convert.ToString(token.SelectToken("tipoTarjeta")); } } catch (WebException webException) { var httpResponse = (HttpWebResponse)webException.Response; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); } } return(response); }
/// <summary> /// Obtiene el número de tarjeta mediante la pin pad /// </summary> /// <param name="url">URL del servicio de cobro</param> /// <param name="numeroSesion">Número de sesión</param> /// <param name="folio">Folio de operación</param> /// <returns></returns> public PagoBancarioResponse ObtenerTarjeta(string url, int numeroSesion, string folio) { PagoBancarioResponse response = new PagoBancarioResponse(); var httpWebRequest = (HttpWebRequest)WebRequest.Create(url + "/api/paymentpinpad/getcard"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = int.Parse(System.Configuration.ConfigurationManager.AppSettings.Get("tiempoEsperaWebApi")); var serializer = new Newtonsoft.Json.JsonSerializer(); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { using (var textWriter = new Newtonsoft.Json.JsonTextWriter(streamWriter)) { serializer.Serialize(textWriter, new { sessionNumber = numeroSesion, commerceReference = folio }); } } try { var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); response.CardNumber = Convert.ToString(token.SelectToken("cardNumber")); response.TipoTarjeta = Convert.ToString(token.SelectToken("tipoTarjeta")); } } catch (WebException webException) { var httpResponse = (HttpWebResponse)webException.Response; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); } } return(response); }
/// <summary> /// Metodo para cancelar la operación bancaria de cobro /// </summary> /// <param name="request">Movimiento tarjeta bancaria</param> /// <returns>Respuesta de la operación</returns> public ResponseBussiness <PagoBancarioResponse> ProcesarTarjetaBancariaCancelar(ProcesarMovimientoTarjetaBancariaRequest request) { return(tryCatch.SafeExecutor(() => { PagoBancarioResponse respuesta = new PagoBancarioResponse(); TarjetaBancariaBusiness tarjeta = new TarjetaBancariaBusiness(this.token); var funcionesCaja = funcionesRepository.GetFunctions(token.CodeBox, token.CodeStore); if (funcionesCaja != null) { respuesta = tarjeta.Cancelar(funcionesCaja.UrlLecturaBancaria); } else { respuesta.CodeNumber = 103; respuesta.CodeDescription = "No existe funciones asociadas a la caja, revise las funciones registradas de la caja"; } return respuesta; })); }
/// <summary> /// Metodo para procesar tarjetas bancarias VISA/MASTERCARD /// </summary> /// <param name="request">Movimiento tarjeta bancaria</param> /// <returns>Respuesta de la operación</returns> public ResponseBussiness <PagoBancarioResponse> ProcesarTarjetaBancariaVisaMaster(ProcesarMovimientoTarjetaBancariaRequest request) { try { //return tryCatch.SafeExecutor(() => //{ PagoBancarioResponse respuesta = new PagoBancarioResponse(); using (TransactionScope scope = new TransactionScope()) { TarjetaBancariaBusiness tarjeta = new TarjetaBancariaBusiness(this.token); var funcionesCaja = funcionesRepository.GetFunctions(token.CodeBox, token.CodeStore); s.LogEntry(this.token.ToString(), 3); s.LogEntry(token.CodeBox.ToString(), 3); s.LogEntry(token.CodeStore.ToString(), 3); s.LogEntry(" vaciado token", 3); if (funcionesCaja != null) { s.LogEntry(" Entro a funciones caja diferente de nulo", 3); //s.LogEntry(" DescuentoPromocionesAplicados: " + request.Venta.ToString(), 1); if (request == null) { s.LogEntry(" request null", 3); } else { s.LogEntry(" request no null", 3); } if (request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados == null) { s.LogEntry(" Las promiciones son nulas", 3); } else { s.LogEntry(" Las promiciones son NO es nulo", 3); s.LogEntry($" TTTTT Las promiciones son NO es nulo {request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados.Length}", 3); } if (request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados.Length > 0) { s.LogEntry(" Las promiciones son cero", 3); } else { s.LogEntry($"es mayor a 0: {request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados.Length}", 1); } // Se procesan las promociones por venta foreach (var item in request.DescuentosPromocionalesPorVentaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = repository.PersistirPromocionesVenta(request.Venta.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } // Se procesan las promociones por línea de venta foreach (var item in request.DescuentosPromocionalesPorLineaAplicados.DescuentoPromocionesAplicados) { OperationResponse response = new OperationResponse(); response = repository.PersistirPromocionesLineaVenta(request.Venta.FolioOperacionAsociada, token.CodeStore, token.CodeBox, item.Secuencia, item.ImporteDescuento , item.CodigoPromocionAplicado, item.DescripcionCodigoPromocionAplicado, item.PorcentajeDescuento, item.CodigoRazonDescuento, item.FormaPagoCodigoPromocionAplicado); } s.LogEntry(" antes de tarjeta.CobroVisaMasterCard", 3); s.LogEntry($" funcionesCaja.UrlLecturaBancaria: { funcionesCaja.UrlLecturaBancaria}", 3); s.LogEntry($" token.CodeStore: { token.CodeStore}", 3); s.LogEntry($" request.Venta.FolioOperacionAsociada: { request.Venta.FolioOperacionAsociada}", 3); s.LogEntry($" request.Venta.MesesFinanciamiento: { request.Venta.MesesFinanciamiento}", 3); s.LogEntry($" request.Venta.MesesParcialidades: { request.Venta.MesesParcialidades}", 3); s.LogEntry($" request.Venta.CodigoPromocion: {request.Venta.CodigoPromocion}", 3); s.LogEntry($" request.Venta.ImporteVentaTotal: {request.Venta.CodigoPromocion}", 3); s.LogEntry($" request.Venta.SecuenciaFormaPagoImporte: {request.Venta.SecuenciaFormaPagoImporte}", 3); respuesta = tarjeta.CobroVisaMasterCard(funcionesCaja.UrlLecturaBancaria, token.CodeStore, request.Venta.FolioOperacionAsociada, request.Venta.MesesFinanciamiento, request.Venta.MesesParcialidades, request.Venta.CodigoPromocion, request.Venta.ImporteVentaTotal, request.Venta.SecuenciaFormaPagoImporte); s.LogEntry(" despues de tarjeta.CobroVisaMasterCard", 3); if (!respuesta.SePuedePagarConPuntos && !respuesta.SePuedeRetirar) { if (respuesta.CodeNumber == 0) { request.Venta.CodigoFormaPagoImporte = respuesta.TipoTarjeta; var repuestaLocal = repository.ProcesarMovimientoTarjetaBancariaVenta(token.CodeStore, token.CodeBox, token.CodeEmployee, respuesta.Authorization, respuesta.CardNumber, request); scope.Complete(); } } } else { respuesta.CodeNumber = 103; respuesta.CodeDescription = "No existe funciones asociadas a la caja, revise las funciones registradas de la caja"; } } s.LogEntry("Sin errores", 1); return(respuesta); //}); } catch (Exception ex) { s.LogEntry(ex.Message, 3); s.LogEntry(ex.InnerException.Message, 3); return(null); } }
/// <summary> /// Cobro con tarjeta bancaria /// </summary> /// <param name="url">URL del servicio de cobro</param> /// <param name="numeroSesion">Número de sesión</param> /// <param name="folio">Folio de operación</param> /// <param name="mesesFinanciamiento">Número de meses que se tiene antes de hacer el primer pago</param> /// <param name="mesesParcialidades">Número de meses parciales del pago</param> /// <param name="codigoPromocion">Código de promoción bancario</param> /// <param name="montoPagado">Monto a pagar</param> /// <returns></returns> public PagoBancarioResponse CobroVisaMasterCard(string url, int numeroSesion, string folio, int mesesFinanciamiento, int mesesParcialidades, int codigoPromocion, decimal montoPagado, int secuencia) { s.LogEntry(" Entrando a PagoBancarioResponse CobroVisaMasterCard", 2); PagoBancarioResponse response = new PagoBancarioResponse(); var httpWebRequest = (HttpWebRequest)WebRequest.Create(url + "/api/paymentpinpad/payvisamaster"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; httpWebRequest.Timeout = int.Parse(System.Configuration.ConfigurationManager.AppSettings.Get("tiempoEsperaWebApi")); s.LogEntry(" Entrando a PagoBancarioResponse Paso el request", 3); s.LogEntry($" httpWebRequest.ToString:{ httpWebRequest.ToString() }", 3); var serializer = new Newtonsoft.Json.JsonSerializer(); using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { using (var textWriter = new Newtonsoft.Json.JsonTextWriter(streamWriter)) { serializer.Serialize(textWriter, new { sessionNumber = numeroSesion, commerceReference = folio, transactionAmount = montoPagado, financialMonths = mesesFinanciamiento, paymentsPartial = mesesParcialidades, promotion = codigoPromocion, secuenciaPos = secuencia }); } } s.LogEntry(" Salio del serializer", 3); try { s.LogEntry(" --Pagina: " + httpWebRequest.Address.ToString(), 3); var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); s.LogEntry(" Genero instancia de httpResponse ", 3); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); s.LogEntry(" response.CodeNumber: " + response.CodeNumber, 3); response.CodeDescription = Convert.ToString(token.SelectToken("message")); response.Authorization = Convert.ToString(token.SelectToken("authorization")); response.CardNumber = Convert.ToString(token.SelectToken("cardNumber")); response.TipoTarjeta = Convert.ToString(token.SelectToken("tipoTarjeta")); response.SePuedeRetirar = Convert.ToBoolean(token.SelectToken("isCashBack")); response.SePuedePagarConPuntos = Convert.ToBoolean(token.SelectToken("isSaleWithPoints")); } } catch (WebException webException) { s.LogEntry("Fallo el TRY: " + webException.Message, 2); s.LogEntry("Fallo el TRY2: " + webException.InnerException.Message, 2); var httpResponse = (HttpWebResponse)webException.Response; using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { var responseText = streamReader.ReadToEnd(); JToken token = JObject.Parse(responseText); response.CodeNumber = Convert.ToInt32(token.SelectToken("code")); response.CodeDescription = Convert.ToString(token.SelectToken("message")); } } return(response); }