private async Task <ChargeAccountToTemporaryToken> TempToken(TarjetasViewModel tvm)
        {
            string TokenizationAPI = System.Configuration.ConfigurationManager.AppSettings["TokenizationAPI"];
            string APIUsername     = System.Configuration.ConfigurationManager.AppSettings["APIUsername"];
            string json            = "";

            ChargeAccountToTemporaryToken token = new ChargeAccountToTemporaryToken();

            try
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
                using (var client = new HttpClient())
                {
                    var values2 = new Dictionary <string, string>
                    {
                        { "AccountName", APIUsername },
                        { "ChargeAccountNumber", tvm.NumeroTarjeta }
                    };
                    json = JsonConvert.SerializeObject(values2);
                    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                    var response = await client.PostAsync(TokenizationAPI + "/ChargeAccountToTemporaryToken", new StringContent(json, Encoding.UTF8, "application/json"));

                    var responseString = await response.Content.ReadAsStringAsync();

                    token = JsonConvert.DeserializeObject <ChargeAccountToTemporaryToken>(responseString);
                }
            }
            catch (Exception ex)
            {
            }
            return(token);
        }
        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
        }