Exemplo n.º 1
0
        // 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&iacute;to");
            description.Add("VN", "Venta Normal");
            description.Add("VC", "Venta en cuotas");
            description.Add("SI", "cuotas sin inter&eacute;s");
            description.Add("S2", "2 cuotas sin inter&eacute;s");
            description.Add("NC", "N cuotas sin inter&eacute;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));
        }