private async Task CompletaRecarga3DSec(string idopenpaytr)
        {
            wsac.CargaOpenPay1aVezResponse v1r = new wsac.CargaOpenPay1aVezResponse();
            wsac.Tarjeta t = Session["TarjetaParaRecargar"] as wsac.Tarjeta;
            r   = Session["RecargaParaRecargar"] as wsac.Recarga;
            rvm = Session["rvm"] as RecargasViewModel;

            v1r = await ws.CargaOpenPay1aVezAsync(r, null, t, idopenpaytr, rvm.OpenPayDeviceId);

            errRecarga err = JsonConvert.DeserializeObject <errRecarga>(v1r.Body.CargaOpenPay1aVezResult);

            if (err.err > 0)
            {
                jsonErr = ws.GetCatalogo(6, "");
                List <catErrores> lserr = JsonConvert.DeserializeObject <List <catErrores> >(jsonErr);
                string            msg   = "";
                switch (err.err)
                {
                case 1:     //RecargaSell
                    msg = lserr.Where(x => x.iderror == err.errRs).FirstOrDefault().error;
                    break;

                case 2:     //Vesta
                    msg = lserr.Where(x => x.iderror == err.errVs).FirstOrDefault().error;
                    break;

                case 3:     //Comunicaciones
                    msg = lserr.Where(x => x.iderror == 9).FirstOrDefault().error;
                    break;
                }
                if (!String.IsNullOrEmpty(err.tresp.rcode_description))
                {
                    msg += "\\n" + err.tresp.rcode_description;
                }
                //spnJS.Text = "<script>msgError('Ocurrio un error: " + ce.error + (!String.IsNullOrEmpty(err.tresp.printDatam_data) ? " " + err.tresp.printDatam_data : "") + "');</script>";
                spnJS.Text = "<script>msgError('Ocurrio un error: " + msg + "');</script>";
            }
            else
            {
                rvm            = Session["rvm"] as RecargasViewModel;
                rvm.IdTarjeta  = err.idtarjeta;
                Session["rvm"] = rvm;
                string ticket = "";
                ticket    += "TRANSACCIÓN " + err.tresp.transaction_id + "<br />";
                ticket    += "FECHA " + DateTime.Now.ToString("dd/MMM/yyyy") + "<br />";
                ticket    += "TRANSACCIÓN EXITOSA DE: " + (Session["catOperadora"] as catOperadora).operadora + "<br />";
                ticket    += "<b>MONTO: " + (Session["catPaquete"] as catPaquete).monto.ToString("c") + "</b><br />";
                ticket    += "celular: " + rvm.NumeroRecarga + "<br />";
                ticket    += "AUTORIZACIÓN: " + err.tresp.op_authorization + "<br />";
                ticket    += err.tresp.printDatam_data;
                spnJS.Text = "<script>ticket('" + ticket + "');</script>";
            }
        }
        private async Task Recargar()
        {
            rvm = Session["rvm"] as RecargasViewModel;
            tvm = Session["tvm"] as TarjetasViewModel;
            if (rvm.idFormaPago == 2) //tarjeta
            {
                if (rvm.TipoTrans == TipoTransaccion.PrimeraVez)
                {
                    wsac.Tarjeta t = new wsac.Tarjeta()
                    {
                        idusuario      = tvm.Idusuario,
                        idpais         = tvm.idpais,
                        idemisor       = tvm.idemisor,
                        permtoken      = tvm.NumeroTarjeta,
                        Last4          = tvm.Last4,
                        titularFN      = tvm.TitularFN,
                        titularLN      = tvm.TitularLN,
                        calleynumero   = tvm.CalleyNum,
                        idestado       = tvm.IdEstado,
                        idciudad       = tvm.IdCiudad,
                        codigopostal   = tvm.CP,
                        expirationMMYY = tvm.ExpiraMM + tvm.ExpiraYY,
                    };
                    wsac.AltaRecargaMonederoResponse ar  = new wsac.AltaRecargaMonederoResponse();
                    wsac.CargaOpenPay1aVezResponse   v1r = new wsac.CargaOpenPay1aVezResponse();
                    rm = new wsac.RecargaMonedero()
                    {
                        idusuario     = rvm.IdUsuario,
                        idtarjeta     = (rvm.idFormaPago == 2) ? rvm.IdTarjeta : -1,
                        monto         = rvm.MontoRecargaMonedero,
                        fecha         = DateTime.Now,
                        TransactionID = Guid.NewGuid().ToString(),
                        os            = Request.UserAgent,
                        ip            = Request.UserHostAddress,
                        err           = -1 // -1 es una recarga recien creada q aun no ha sido procesada (pagada)
                    };
                    try
                    {
                        ws = Session["wsac"] as wsac.IsacClient;
                        ar = await ws.AltaRecargaMonederoAsync(rm);

                        GetSessionTags tags = JsonConvert.DeserializeObject <GetSessionTags>(ar.Body.AltaRecargaMonederoResult);
                        FingerP(tags.OrgID, tags.WebSessionID);
                        await Task.Delay(TimeSpan.FromSeconds(10));

                        tk = await TempToken(tvm);

                        if (tk.ResponseCode == 0)
                        {
                            t.permtoken          = tk.ChargeAccountNumberToken;
                            t.Last4              = tk.PaymentDeviceLast4;
                            rm.idrecargamonedero = tags.idrecarga;
                            v1r = await ws.CargaOpenPay1aVezAsync(null, rm, t, tags.WebSessionID, "");

                            errRecarga err = JsonConvert.DeserializeObject <errRecarga>(v1r.Body.CargaOpenPay1aVezResult);
                            if (err.err > 0)
                            {
                                jsonErr = ws.GetCatalogo(6, "");
                                List <catErrores> lserr = JsonConvert.DeserializeObject <List <catErrores> >(jsonErr);
                                string            msg   = "";
                                switch (err.err)
                                {
                                case 1:     //RecargaSell
                                    msg = lserr.Where(x => x.iderror == err.errRs).FirstOrDefault().error;
                                    break;

                                case 2:     //Vesta
                                    msg = lserr.Where(x => x.iderror == err.errVs).FirstOrDefault().error;
                                    break;

                                case 3:     //Comunicaciones
                                    msg = lserr.Where(x => x.iderror == 9).FirstOrDefault().error;
                                    break;
                                }
                                if (!String.IsNullOrEmpty(err.tresp.rcode_description))
                                {
                                    msg += "\\n" + err.tresp.rcode_description;
                                }
                                //spnJS.Text = "<script>msgError('Ocurrio un error: " + ce.error + (!String.IsNullOrEmpty(err.tresp.printDatam_data) ? " " + err.tresp.printDatam_data : "") + "');</script>";
                                spnJS.Text = "<script>msgError('Ocurrio un error: " + msg + "');</script>";
                            }
                            else
                            {
                                rvm            = Session["rvm"] as RecargasViewModel;
                                rvm.IdTarjeta  = err.idtarjeta;
                                Session["rvm"] = rvm;
                                string ticket = "";
                                ticket    += "TRANSACCIÓN " + err.tresp.transaction_id + "<br />";
                                ticket    += "FECHA " + DateTime.Now.ToString("dd/MMM/yyyy") + "<br />";
                                ticket    += "TRANSACCIÓN EXITOSA<br />";
                                ticket    += "<b>MONTO: " + rvm.MontoRecargaMonedero.ToString("c") + "</b><br />";
                                spnJS.Text = "<script>ticket('" + ticket + "');</script>";
                            }
                        }
                        else
                        {
                            spnJS.Text = "<script>msgError('Ocurrio un error');</script>";
                        }
                    }
                    catch (Exception ex)
                    {
                        spnJS.Text = "<script>msgError('Ocurrio un error');</script>";
                    }
                }
                //-----------------------------------------------------------------------------------
                if (rvm.TipoTrans == TipoTransaccion.SegundaVez)
                {
                    rm = new wsac.RecargaMonedero()
                    {
                        idusuario     = rvm.IdUsuario,
                        idtarjeta     = (rvm.idFormaPago == 2) ? rvm.IdTarjeta : -1,
                        monto         = rvm.MontoRecargaMonedero,
                        fecha         = DateTime.Now,
                        TransactionID = Guid.NewGuid().ToString(),
                        os            = Request.UserAgent,
                        ip            = Request.UserHostAddress,
                        err           = -1 // -1 es una recarga recien creada q aun no ha sido procesada (pagada)
                    };
                    wsac.CargaVesta2aVezResponse v2r = new wsac.CargaVesta2aVezResponse();
                    try
                    {
                        ws  = Session["wsac"] as wsac.IsacClient;
                        v2r = await ws.CargaVesta2aVezAsync(null, rm, "");

                        errRecarga err = JsonConvert.DeserializeObject <errRecarga>(v2r.Body.CargaVesta2aVezResult);
                        if (err.err > 0)
                        {
                            jsonErr = ws.GetCatalogo(6, "");
                            List <catErrores> lserr = JsonConvert.DeserializeObject <List <catErrores> >(jsonErr);
                            string            msg   = "";
                            switch (err.err)
                            {
                            case 1:     //RecargaSell
                                msg = lserr.Where(x => x.iderror == err.errRs).FirstOrDefault().error;
                                break;

                            case 2:     //Vesta
                                msg = lserr.Where(x => x.iderror == err.errVs).FirstOrDefault().error;
                                break;

                            case 3:     //Comunicaciones
                                msg = lserr.Where(x => x.iderror == 9).FirstOrDefault().error;
                                break;
                            }
                            if (!String.IsNullOrEmpty(err.tresp.rcode_description))
                            {
                                msg += "\\n" + err.tresp.rcode_description;
                            }
                            spnJS.Text = "<script>msgError('Ocurrio un error: " + msg + "');</script>";
                        }
                        else
                        {
                            string ticket = "";
                            ticket    += "TRANSACCIÓN " + err.tresp.transaction_id + "<br />";
                            ticket    += "FECHA " + DateTime.Now.ToString("dd/MMM/yyyy") + "<br />";
                            ticket    += "TRANSACCIÓN EXITOSA<br />";
                            ticket    += "<b>MONTO: " + rvm.MontoRecargaMonedero.ToString("c") + "</b><br />";
                            spnJS.Text = "<script>ticket('" + ticket + "');</script>";
                        }
                    }
                    catch (Exception ex)
                    {
                        spnJS.Text = "<script>msgError('Ocurrio un error');</script>";
                    }
                } // if segundavez
            }     // if formapago = 2
        }
Beispiel #3
0
        public Procesar(RecargasViewModel _r, TarjetasViewModel _t, TipoTransaccion tt)
        {
            try
            {
                InitializeComponent();
                rvm      = _r;
                tvm      = _t;
                tipotran = tt;
                Title    = "Detalle de la orden";
                CargaLabels();
                NavigationPage.SetBackButtonTitle(this, "");

                rvm.RecargaAltaErr += async(s, e) =>
                {
                    UserDialogs.Instance.HideLoading();
                    if (e != null)
                    {
                        //if (!String.IsNullOrEmpty(e.printdata))
                        //	await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar\n" + e.printdata, "OK");
                        //else
                        string msg = "";
                        switch (e.err)
                        {
                        case 1:                                 //RecargaSell
                            msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errRs).FirstOrDefault().error;
                            break;

                        case 2:                                 //Vesta
                            msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errVs).FirstOrDefault().error;
                            break;

                        case 3:                                 //Comunicaciones
                            msg = rvm.lsErrores().Where(x => x.iderror == 9).FirstOrDefault().error;
                            break;
                        }
                        if (!String.IsNullOrEmpty(e.msg))
                        {
                            msg = e.msg;
                        }
                        await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar\n" + msg, "OK");
                    }
                    else
                    {
                        await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar", "OK");
                    }
                };
                rvm.CargaFinger += (s, e) =>
                {
                    FingerP(e.url, e.orgid, e.webses);
                };

                av = async(s, ea) =>
                {
                    rvm.ProcesadoEnVesta1aVez -= av;
                    UserDialogs.Instance.HideLoading();
                    if (ea.Error != null || ea.Cancelled)
                    {
                        await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar", "OK");
                    }
                    else
                    {
                        string msg = "";
                        if (rvm.Err.err > 0)
                        {
                            if (rvm.Tiporecarga == TipoRecarga.RecargaTA)
                            {
                                switch (rvm.Err.err)
                                {
                                case 1:                                         //RecargaSell
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errRs).FirstOrDefault().error;
                                    break;

                                case 2:                                         //Vesta
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errVs).FirstOrDefault().error;
                                    break;

                                case 3:                                         //Comunicaciones
                                    msg = rvm.lsErrores().Where(x => x.iderror == 9).FirstOrDefault().error;
                                    break;
                                }
                                errRecarga err = JsonConvert.DeserializeObject <errRecarga>(ea.Result);
                                msg += "\n" + err.tresp.rcode_description;
                            }
                            if (rvm.Tiporecarga == TipoRecarga.Monedero)
                            {
                                if (rvm.Err.err == 2)
                                {
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errVs).FirstOrDefault().error;
                                }
                                if (rvm.Err.err == 1)                                 // err de RS, en este caso no es RS es monedero, se usa el mismo campo
                                {
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errRs).FirstOrDefault().error;
                                }
                                errRecarga err = JsonConvert.DeserializeObject <errRecarga>(ea.Result);
                                msg += "\n" + err.tresp.rcode_description;
                            }
                            await DisplayAlert("Error", msg, "OK");
                        }
                        else
                        {
                            await App.Nav.PushAsync(new Ticket(rvm), Constantes.animated);
                        }
                    }
                };
                av2 = async(s, ea) =>
                {
                    rvm.ProcesadoEnVesta2aVez -= av2;
                    UserDialogs.Instance.HideLoading();
                    if (ea.Error != null || ea.Cancelled)
                    {
                        await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar", "OK");
                    }
                    else
                    {
                        string msg = "";
                        if (rvm.Err.err > 0)
                        {
                            if (rvm.Tiporecarga == TipoRecarga.RecargaTA)
                            {
                                switch (rvm.Err.err)
                                {
                                case 1:                                         //RecargaSell
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errRs).FirstOrDefault().error;
                                    break;

                                case 2:                                         //Vesta
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errVs).FirstOrDefault().error;
                                    break;

                                case 3:                                         //Comunicaciones
                                    msg = rvm.lsErrores().Where(x => x.iderror == 9).FirstOrDefault().error;
                                    break;
                                }
                                errRecarga err = JsonConvert.DeserializeObject <errRecarga>(ea.Result);
                                msg += "\n" + err.tresp.rcode_description;
                            }
                            if (rvm.Tiporecarga == TipoRecarga.Monedero)
                            {
                                if (rvm.Err.err == 2)
                                {
                                    msg = rvm.lsErrores().Where(x => x.iderror == rvm.Err.errVs).FirstOrDefault().error;
                                }
                                if (rvm.Err.err == 1)
                                {
                                    msg = rvm.lsErrores().Where(x => x.iderror == 10).FirstOrDefault().error;
                                }
                            }
                            await DisplayAlert("Error", msg, "OK");
                        }
                        else
                        {
                            await App.Nav.PushAsync(new Ticket(rvm), Constantes.animated);
                        }
                    }
                };

                aw = async(s, ea) =>
                {
                    rvm.AltaViaWallet -= aw;
                    UserDialogs.Instance.HideLoading();
                    if (ea.Error != null || ea.Cancelled)
                    {
                        await DisplayAlert("Error", "Ocurrio un error, vuelva a intentar", "OK");

                        //await App.Nav.PopAsync(Constantes.animated);
                    }
                    else
                    {
                        string msg = "";
                        if (rvm.Err.err > 0)
                        {
                            switch (rvm.Err.err)
                            {
                            //  1 error no hay suficiente saldo
                            //  2 error de sistema (BD)
                            //  3 error de RS
                            case 1:
                                msg = "No se cuenta con suficiente saldo";
                                break;

                            case 2:
                                msg = "Error de sistema";
                                break;

                            case 3:
                                msg = "Error en la plataforma, contacte al número de soporte para atención";
                                break;
                            }
                            errRecarga err = JsonConvert.DeserializeObject <errRecarga>(ea.Result);
                            msg += "\n" + err.tresp.rcode_description;
                            await DisplayAlert("Error", msg, "OK");

                            //await App.Nav.PopAsync(Constantes.animated);
                        }
                        else
                        {
                            //await App.Nav.PopAsync(Constantes.animated);
                            await App.Nav.PushAsync(new Ticket(rvm), Constantes.animated);
                        }
                    }
                };

                btnProcesar.Clicked += async(sender, ea) =>
                {
                    nip n = new nip();
                    n.NipCorrecto += async(s, e) =>
                    {
                        if (rvm.Tiporecarga == TipoRecarga.Monedero)
                        {
                            UserDialogs.Instance.ShowLoading("Recargando...");
                            await App.Nav.PopAsync(Constantes.animated);

                            if (tt == TipoTransaccion.PrimeraVez)
                            {
                                rvm.TipoTrans              = TipoTransaccion.PrimeraVez;
                                rvm.ProcesadoEnVesta1aVez += av;
                                rvm.AltaMonedero(tvm);
                            }
                            else
                            {
                                rvm.TipoTrans              = TipoTransaccion.SegundaVez;
                                rvm.ProcesadoEnVesta2aVez += av2;
                                rvm.AltaMonedero(tvm);
                            }
                        }
                        if (rvm.Tiporecarga == TipoRecarga.RecargaTA)
                        {
                            UserDialogs.Instance.ShowLoading("Recargando...");
                            await App.Nav.PopAsync(Constantes.animated);

                            if (tt == TipoTransaccion.PrimeraVez)
                            {
                                rvm.TipoTrans = TipoTransaccion.PrimeraVez;
                                if (rvm.idFormaPago == 1)
                                {
                                    rvm.AltaViaWallet += aw;
                                }
                                if (rvm.idFormaPago == 2)
                                {
                                    rvm.ProcesadoEnVesta1aVez += av;
                                }
                                rvm.Alta(tvm);
                            }
                            else
                            {
                                rvm.TipoTrans = TipoTransaccion.SegundaVez;
                                if (rvm.idFormaPago == 1)
                                {
                                    rvm.AltaViaWallet += aw;
                                }
                                if (rvm.idFormaPago == 2)
                                {
                                    rvm.ProcesadoEnVesta2aVez += av2;
                                }
                                rvm.Alta(tvm);
                            }
                        }
                    };
                    await App.Nav.PushAsync(n, Constantes.animated);
                };

                btnMedios.Clicked += async(sender, ea) =>
                {
                    NuevaTarjeta nt = App.Nav.NavigationStack.OfType <NuevaTarjeta>().FirstOrDefault();
                    if (nt != null)
                    {
                        await App.Nav.PopAsync(Constantes.animated);
                    }
                    else
                    {
                        RegPago rp = App.Nav.NavigationStack.OfType <RegPago>().FirstOrDefault();
                        if (rp != null)
                        {
                            await App.Nav.PopAsync(Constantes.animated);
                        }
                        else
                        {
                            await App.Nav.PushAsync(new RegPago(rvm), Constantes.animated);
                        }
                    }
                };
            }
            catch (Exception ex) {
            }
        }
        private async Task Recargar()  //btnRecargar.Click += async (s, ea) =>
        {
            rvm = Session["rvm"] as RecargasViewModel;
            tvm = Session["tvm"] as TarjetasViewModel;
            if (rvm.idFormaPago == 1) //monedero
            {
                r = new wsac.Recarga()
                {
                    idusuario       = rvm.IdUsuario,
                    idpais          = rvm.idpais,
                    idoperadora     = rvm.idoperadora,
                    idpaquete       = rvm.idpaquete,
                    idformapago     = rvm.idFormaPago,
                    idtarjeta       = (rvm.idFormaPago == 2) ? rvm.IdTarjeta : -1,
                    numerorecarga   = rvm.NumeroRecarga,
                    contactorecarga = rvm.ContactoRecarga,
                    fecha           = DateTime.Now,
                    TransactionID   = Guid.NewGuid().ToString(),
                    err             = -1, // -1 es una recarga recien creada q aun no ha sido procesada (pagada)
                    os = Request.UserAgent,
                    ip = Request.UserHostAddress,
                };
                wsac.AltaRecargaViaWalletResponse vwr = new wsac.AltaRecargaViaWalletResponse();
                try
                {
                    ws  = Session["wsac"] as wsac.IsacClient;
                    vwr = await ws.AltaRecargaViaWalletAsync(r);

                    errRecarga err = JsonConvert.DeserializeObject <errRecarga>(vwr.Body.AltaRecargaViaWalletResult);
                    if (err.err > 0)
                    {
                        jsonErr = ws.GetCatalogo(6, "");
                        List <catErrores> lserr = JsonConvert.DeserializeObject <List <catErrores> >(jsonErr);
                        string            msg   = "";
                        switch (err.err)
                        {
                        case 1:     //RecargaSell
                            msg = lserr.Where(x => x.iderror == err.errRs).FirstOrDefault().error;
                            break;

                        case 2:     //Vesta
                            msg = lserr.Where(x => x.iderror == err.errVs).FirstOrDefault().error;
                            break;

                        case 3:     //Comunicaciones
                            msg = lserr.Where(x => x.iderror == 9).FirstOrDefault().error;
                            break;
                        }
                        if (!String.IsNullOrEmpty(err.tresp.rcode_description))
                        {
                            msg += "\\n" + err.tresp.rcode_description;
                        }
                        spnJS.Text = "<script>msgError('Ocurrio un error: " + msg + "');</script>";
                    }
                    else
                    {
                        string ticket = "";
                        ticket    += "TRANSACCIÓN " + err.tresp.transaction_id + "<br />";
                        ticket    += "FECHA " + DateTime.Now.ToString("dd/MMM/yyyy") + "<br />";
                        ticket    += "TRANSACCIÓN EXITOSA DE: " + (Session["catOperadora"] as catOperadora).operadora + "<br />";
                        ticket    += "<b>MONTO: " + (Session["catPaquete"] as catPaquete).monto.ToString("c") + "</b><br />";
                        ticket    += "celular: " + rvm.NumeroRecarga + "<br />";
                        ticket    += "AUTORIZACIÓN: " + err.tresp.op_authorization + "<br />";
                        ticket    += err.tresp.printDatam_data;
                        spnJS.Text = "<script>ticket('" + ticket + "');</script>";
                    }
                    //spnJS.Text = "<script>ticket('prueba');</script>";
                }
                catch (Exception ex)
                {
                    //Aqui modifico Pablo y se regreso como estaba, aqui no esta el detalle
                    spnJS.Text = "<script>msgError('Ocurrio un error');</script>";
                }
            }
            //------------------------------------------------------------------------------
            if (rvm.idFormaPago == 2) //tarjeta
            {
                if (rvm.TipoTrans == TipoTransaccion.PrimeraVez)
                {
                    wsac.Tarjeta t = new wsac.Tarjeta()
                    {
                        idusuario      = tvm.Idusuario,
                        idpais         = tvm.idpais,
                        idemisor       = tvm.idemisor,
                        permtoken      = tvm.NumeroTarjeta,
                        Last4          = tvm.Last4,
                        titularFN      = tvm.TitularFN,
                        titularLN      = tvm.TitularLN,
                        calleynumero   = tvm.CalleyNum,
                        idestado       = tvm.IdEstado,
                        idciudad       = tvm.IdCiudad,
                        codigopostal   = tvm.CP,
                        expirationMMYY = tvm.ExpiraMM + tvm.ExpiraYY,
                    };
                    r = new wsac.Recarga()
                    {
                        idusuario       = rvm.IdUsuario,
                        idpais          = rvm.idpais,
                        idoperadora     = rvm.idoperadora,
                        idpaquete       = rvm.idpaquete,
                        idformapago     = rvm.idFormaPago,
                        idtarjeta       = (rvm.idFormaPago == 2) ? rvm.IdTarjeta : -1,
                        numerorecarga   = rvm.NumeroRecarga,
                        contactorecarga = rvm.ContactoRecarga,
                        fecha           = DateTime.Now,
                        TransactionID   = Guid.NewGuid().ToString(),
                        err             = -1, // -1 es una recarga recien creada q aun no ha sido procesada (pagada)
                        os = Request.UserAgent,
                        ip = Request.UserHostAddress,
                    };
                    try
                    {
                        ws          = Session["wsac"] as wsac.IsacClient;
                        r.idrecarga = ws.AltaRecarga(r);
                        t.permtoken = rvm.OpenPayTokenId;
                        t.Last4     = (!String.IsNullOrEmpty(tvm.NumeroTarjeta) ? tvm.NumeroTarjeta.Substring(tvm.NumeroTarjeta.Length - 4, 4) : "");
                        var response3d = await ws.Carga3DSecureAsync(r, null, rvm.OpenPayDeviceId, t, 1);

                        var redirect = JsonConvert.DeserializeObject <Response3dSecure>(response3d.Body.Carga3DSecureResult);
                        if (!redirect.err)
                        {
                            Session["TarjetaParaRecargar"] = t;
                            Session["RecargaParaRecargar"] = r;
                            Response.Redirect(redirect.desc, false);
                            return;
                        }
                        else
                        {
                            string strerrcard = "";
                            int    errcard    = 0;
                            int.TryParse(redirect.desc, out errcard);
                            switch (errcard)
                            {
                            case 3001:
                                strerrcard = "La tarjeta fue declinada."; break;

                            case 3002:
                                strerrcard = "La tarjeta ha expirado."; break;

                            case 3003:
                                strerrcard = "La tarjeta no tiene fondos suficientes."; break;

                            case 3004:
                                strerrcard = "La tarjeta ha sido identificada como una tarjeta robada."; break;

                            case 3005:
                                strerrcard = "La tarjeta ha sido rechazada por el sistema antifraudes."; break;

                            case 3006:
                                strerrcard = "La operación no esta permitida para este cliente o esta transacción."; break;

                            case 3007:
                                strerrcard = "Deprecado. La tarjeta fue declinada."; break;

                            case 3008:
                                strerrcard = "La tarjeta no es soportada en transacciones en línea."; break;

                            case 3009:
                                strerrcard = "La tarjeta fue reportada como perdida."; break;

                            case 3010:
                                strerrcard = "El banco ha restringido la tarjeta."; break;

                            case 3011:
                                strerrcard = "El banco ha solicitado que la tarjeta sea retenida. Contacte al banco."; break;

                            case 3012:
                                strerrcard = "Se requiere solicitar al banco autorización para realizar este pago."; break;
                            }
                            spnJS.Text = "<script>msgError('Ocurrio un error: " + strerrcard + "');</script>";
                        }
                    }
                    //Este es el exception que salta
                    catch (Exception ex)
                    {
                        spnJS.Text = "<script>msgError('Ocurrio un error: " + r.err.ToString() + "');</script>";
                    }
                }
                //-----------------------------------------------------------------------------------
                if (rvm.TipoTrans == TipoTransaccion.SegundaVez)
                {
                    wsac.Tarjeta t = new wsac.Tarjeta()
                    {
                        idtarjeta = rvm.IdTarjeta
                    };
                    r = new wsac.Recarga()
                    {
                        idusuario       = rvm.IdUsuario,
                        idpais          = rvm.idpais,
                        idoperadora     = rvm.idoperadora,
                        idpaquete       = rvm.idpaquete,
                        idformapago     = rvm.idFormaPago,
                        idtarjeta       = (rvm.idFormaPago == 2) ? rvm.IdTarjeta : -1,
                        numerorecarga   = rvm.NumeroRecarga,
                        contactorecarga = rvm.ContactoRecarga,
                        fecha           = DateTime.Now,
                        TransactionID   = Guid.NewGuid().ToString(),
                        err             = -1, // -1 es una recarga recien creada q aun no ha sido procesada (pagada)
                        os = Request.UserAgent,
                        ip = Request.UserHostAddress,
                    };
                    try
                    {
                        ws          = Session["wsac"] as wsac.IsacClient;
                        r.idrecarga = ws.AltaRecarga(r);
                        var response3d = await ws.Carga3DSecureAsync(r, null, rvm.OpenPayDeviceId, t, 2);

                        var redirect = JsonConvert.DeserializeObject <Response3dSecure>(response3d.Body.Carga3DSecureResult);
                        if (!redirect.err)
                        {
                            Session["TarjetaParaRecargar"] = t;
                            Session["RecargaParaRecargar"] = r;
                            Response.Redirect(redirect.desc, false);
                            return;
                        }
                        else
                        {
                            string strerrcard = "";
                            int    errcard    = 0;
                            int.TryParse(redirect.desc, out errcard);
                            switch (errcard)
                            {
                            case 3001:
                                strerrcard = "La tarjeta fue declinada."; break;

                            case 3002:
                                strerrcard = "La tarjeta ha expirado."; break;

                            case 3003:
                                strerrcard = "La tarjeta no tiene fondos suficientes."; break;

                            case 3004:
                                strerrcard = "La tarjeta ha sido identificada como una tarjeta robada."; break;

                            case 3005:
                                strerrcard = "La tarjeta ha sido rechazada por el sistema antifraudes."; break;

                            case 3006:
                                strerrcard = "La operación no esta permitida para este cliente o esta transacción."; break;

                            case 3007:
                                strerrcard = "Deprecado. La tarjeta fue declinada."; break;

                            case 3008:
                                strerrcard = "La tarjeta no es soportada en transacciones en línea."; break;

                            case 3009:
                                strerrcard = "La tarjeta fue reportada como perdida."; break;

                            case 3010:
                                strerrcard = "El banco ha restringido la tarjeta."; break;

                            case 3011:
                                strerrcard = "El banco ha solicitado que la tarjeta sea retenida. Contacte al banco."; break;

                            case 3012:
                                strerrcard = "Se requiere solicitar al banco autorización para realizar este pago."; break;
                            }
                            spnJS.Text = "<script>msgError('Ocurrio un error: " + strerrcard + "');</script>";
                        }
                    }
                    catch (Exception ex)
                    {
                        spnJS.Text = "<script>msgError('Ocurrio un error: " + r.err.ToString() + "');</script>";
                    }
                } // if segundavez
            }     // if formapago = 2
        }