// GET: Session #region Vistas public ActionResult Deudas(string rut, string aaction, string token) { Cliente cliente = BDD.TBL_CLIENTE.Where(o => o.CLI_RUT == rut || o.CLI_CUENTA.ToString() == rut).ToList().Select(o => new Cliente { CliID = o.CLI_ID, Nombre = o.CLI_NOMBRE, ApellidoP = o.CLI_APELLIDO_PATERNO, ApellidoM = o.CLI_APELLIDO_MATERNO, Completo = o.CLI_COMPLETO, Cuenta = o.CLI_CUENTA, Rut = o.CLI_RUT }).FirstOrDefault(); //WebPay Configuration configuration = new Configuration(); configuration.Environment = certificate["environment"]; configuration.CommerceCode = certificate["commerce_code"]; configuration.PublicCert = certificate["public_cert"]; configuration.WebpayCert = certificate["webpay_cert"]; configuration.Password = certificate["password"]; /** Crea Dictionary con descripción */ Dictionary <string, string> description = new Dictionary <string, string>(); description.Add("VD", "Venta Debíto"); description.Add("VN", "Venta Normal"); description.Add("VC", "Venta en cuotas"); description.Add("SI", "cuotas sin interés"); description.Add("S2", "2 cuotas sin interés"); description.Add("NC", "N cuotas sin interés"); /** Creacion Objeto Webpay */ Webpay.Transbank.Library.Webpay webpay = new Webpay.Transbank.Library.Webpay(configuration); /** Crea Dictionary con codigos de resultado */ Dictionary <string, string> codes = new Dictionary <string, string>(); codes.Add("0", "Transacción aprobada"); codes.Add("-1", "Rechazo de transacción"); codes.Add("-2", "Transacción debe reintentarse"); codes.Add("-3", "Error en transacción"); codes.Add("-4", "Rechazo de transacción"); codes.Add("-5", "Rechazo por error de tasa"); codes.Add("-6", "Excede cupo máximo mensual"); codes.Add("-7", "Excede límite diario por transacción"); codes.Add("-8", "Rubro no autorizado"); if (aaction == "Deudas") { aaction = "result"; } switch (aaction) { case "result": /** Obtiene Información POST */ string[] keysPost = Request.Form.AllKeys; /** Token de la transacción */ /** Token de la transacción */ token = Request.Form["token_ws"]; request.Add("token", token.ToString()); transactionResultOutput result = webpay.getNormalTransaction().getTransactionResult(token); var carro = BDD.TBL_CARRO_COMPRA.FirstOrDefault(o => o.CAR_TOKEN == token); var listo = result.detailOutput[0].responseCode == 0; if (listo) { listo = carro.CAR_MONTO == result.detailOutput[0].amount; if (!listo) { carro.CEST_ESTADO = 5; carro.CAS_ERROR = "Pago RECHAZADO los montos difieren"; ViewBag.Mensaje = "Pago RECHAZADO los montos difieren"; ViewBag.Error = true; BDD.TBL_CARRO_COMPRA.Attach(carro); BDD.Entry(carro).State = System.Data.Entity.EntityState.Modified; BDD.SaveChanges(); return(View(cliente)); } listo = carro.CAR_ORDEN_COMPRA == result.detailOutput[0].buyOrder; if (!listo) { carro.CEST_ESTADO = 5; carro.CAS_ERROR = "Pago RECHAZADO los orden de compra difieren"; ViewBag.Mensaje = "Pago RECHAZADO los orden de compra difieren"; ViewBag.Error = true; BDD.TBL_CARRO_COMPRA.Attach(carro); BDD.Entry(carro).State = System.Data.Entity.EntityState.Modified; BDD.SaveChanges(); return(View(cliente)); } carro.CEST_ESTADO = 2; carro.CAR_CODIGO_AUTORIZACION = result.detailOutput[0].authorizationCode; carro.CAR_CODIGO_COMERCIO = result.detailOutput[0].commerceCode; BDD.TBL_CARRO_COMPRA.Attach(carro); BDD.Entry(carro).State = System.Data.Entity.EntityState.Modified; BDD.SaveChanges(); var deudas = carro.TBL_DEUDA.ToList(); var pago = new Models.SQL.TBL_PAGOS { CLI_ID = deudas[0]?.CLI_ID ?? 00, PAG_FECHA = DateTime.Now, PAG_MONTO = carro.CAR_MONTO ?? 0, PAG_VIGENCIA = true, }; BDD.TBL_PAGOS.Add(pago); BDD.Entry(pago).State = System.Data.Entity.EntityState.Added; BDD.SaveChanges(); foreach (var item in deudas) { item.PAG_ID = pago.PAG_ID; BDD.TBL_DEUDA.Attach(item); BDD.Entry(item).State = System.Data.Entity.EntityState.Modified; } try { //var d = webpay.getNormalTransaction().acknowledgeTransaction(token); } catch (Exception ex) { Logger(ex); carro.CEST_ESTADO = 5; carro.CAS_ERROR = "Error al terminar el pago, itentelo de nuevo."; ViewBag.Mensaje = "Error al terminar el pago, itentelo de nuevo."; ViewBag.Error = true; return(View(cliente)); } BDD.SaveChanges(); ViewBag.Mensaje = "Pago realizado con éxito."; ViewBag.Error = false; return(Redirect(result.urlRedirection + "?token_ws=" + token)); } else { carro.CEST_ESTADO = 5; carro.CAS_ERROR = "Pago RECHAZADO por webpay [Codigo]=> " + result.detailOutput[0].responseCode + " [Descripcion]=> " + codes[result.detailOutput[0].responseCode.ToString()]; ViewBag.Mensaje = "Pago RECHAZADO por webpay [Codigo]=> " + result.detailOutput[0].responseCode + " [Descripcion]=> " + codes[result.detailOutput[0].responseCode.ToString()]; ViewBag.Error = true; BDD.TBL_CARRO_COMPRA.Attach(carro); BDD.Entry(carro).State = System.Data.Entity.EntityState.Modified; BDD.SaveChanges(); return(View(cliente)); } break; case "end": break; } return(View(cliente)); }