public TwiMLResult Receive(SmsRequest incomingMessage)
        {
            ValidacionesServices       validacionesServices       = new ValidacionesServices();
            TelefonosUsuariosServices  telefonosUsuariosServices  = new TelefonosUsuariosServices();
            WhatsAppPendientesServices whatsAppPendientesServices = new WhatsAppPendientesServices();
            ClienteCuentaServices      clienteCuentaServices      = new ClienteCuentaServices();
            TicketsServices            ticketsServices            = new TicketsServices();
            TarifasServices            tarifasServices            = new TarifasServices();

            int count = incomingMessage.From.Length;

            string Number = string.Empty;

            for (int i = count - 10; i < incomingMessage.From.Length; i++)
            {
                Number += incomingMessage.From[i];
            }

            string Id = telefonosUsuariosServices.ObtenerIdTelefono(Number);

            DateTime HoraDelServidor = DateTime.Now;
            DateTime hoy             = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(HoraDelServidor, TimeZoneInfo.Local.Id, "Eastern Standard Time (Mexico)");

            DateTime horParse = DateTime.Parse(hoy.ToString("dd/MM/yyyy"));

            var messagingResponse = new MessagingResponse();

            if (incomingMessage.Body.ToUpper() == "SI")
            {
                if (telefonosUsuariosServices.ActualizarEstatusWhats(Guid.Parse(Id), Guid.Parse("602D7AD6-79D0-4651-BCB5-EE1D6B9BE27A")))
                {
                    whatsAppPendientesServices.ObtenerWhatsPendiente(Number);

                    if (whatsAppPendientesServices.lsWhatsAppPendientes.Count >= 1)
                    {
                        int intMsnj = 0;

                        foreach (var item in whatsAppPendientesServices.lsWhatsAppPendientes)
                        {
                            DateTime DtVencimiento = DateTime.Parse(item.DtVencimiento.ToString("dd/MM/yyyy"));

                            if (DtVencimiento >= horParse)
                            {
                                tarifasServices.CargarTarifas();
                                clienteCuentaServices.ObtenerDineroCuentaCliente(item.UidPropietario);
                                decimal DcmCuenta = clienteCuentaServices.clienteCuentaRepository.clienteCuenta.DcmDineroCuenta;

                                decimal DcmWhatsapp = 0;
                                foreach (var tariWhats in tarifasServices.lsTarifasGridViewModel)
                                {
                                    DcmWhatsapp = tariWhats.DcmWhatsapp;
                                }

                                if (DcmCuenta >= DcmWhatsapp)
                                {
                                    messagingResponse.Message(item.VchUrl.Replace("[n]", "\n"));

                                    decimal NuevoSaldo = DcmCuenta - DcmWhatsapp;

                                    string[] DatosUsuario = Regex.Split(validacionesServices.ObtenerDatosUsuario(item.UidUsuario, item.UidPropietario), ",");

                                    string IdCliente = string.Empty;
                                    string IdUsuario = string.Empty;

                                    if (DatosUsuario.Length >= 2)
                                    {
                                        IdCliente = DatosUsuario[0];
                                        IdUsuario = DatosUsuario[1];
                                    }

                                    string Folio = IdCliente + IdUsuario + DateTime.Now.ToString("ddMMyyyyHHmmssfff");

                                    if (ticketsServices.RegistrarTicketPago(Folio, DcmWhatsapp, 0, DcmWhatsapp, item.VchDescripcion, item.UidPropietario, hoy, 1, 0, 0, DcmCuenta, DcmWhatsapp, NuevoSaldo))
                                    {
                                        clienteCuentaServices.ActualizarDineroCuentaCliente(NuevoSaldo, item.UidPropietario, "");
                                        whatsAppPendientesServices.ActualizarWhatsPendiente(item.UidWhatsAppPendiente, Guid.Parse("FB046B99-A9DF-4826-9EDB-E47BCE0251EA"));
                                    }

                                    intMsnj++;
                                }
                                else
                                {
                                }
                            }
                        }

                        if (intMsnj == 0)
                        {
                            messagingResponse.Message("Gracias por confirmar. Esto es un mensaje automatico, por favor no responda.");
                        }
                    }
                    else
                    {
                        messagingResponse.Message("Gracias por confirmar. Esto es un mensaje automatico, por favor no responda.");
                    }
                }
            }
            //else if (incomingMessage.Body.ToUpper() == "NO")
            //{
            //    telefonosUsuariosServices.ActualizarEstatusWhats(Guid.Parse(Id), Guid.Parse("A3DED1DC-765E-4CA5-A7E5-6283EF9B52C2"));
            //    messagingResponse.Message("Gracias por confirmar: NO!");
            //}

            return(TwiML(messagingResponse));
        }
        public ResponseHelpers PostPagosTarjeta([FromBody] RespuestaPago strResponse)
        {
            CorreosServices            correosServices            = new CorreosServices();
            CorreosEscuelaServices     correosEscuelaServices     = new CorreosEscuelaServices();
            ValidacionesServices       validacionesServices       = new ValidacionesServices();
            ClienteCuentaServices      clienteCuentaServices      = new ClienteCuentaServices();
            LigasUrlsServices          ligasUrlsServices          = new LigasUrlsServices();
            WhatsAppPendientesServices whatsAppPendientesServices = new WhatsAppPendientesServices();
            TicketsServices            ticketsServices            = new TicketsServices();
            TarifasServices            tarifasServices            = new TarifasServices();
            ParametrosTwiServices      parametrosTwiServices      = new ParametrosTwiServices();
            ColegiaturasServices       colegiaturasServices       = new ColegiaturasServices();
            PagosColegiaturasServices  pagosColegiaturasServices  = new PagosColegiaturasServices();

            strResponse.StrResponse = HttpUtility.HtmlEncode(strResponse.StrResponse);
            var    respuesta   = new ResponseHelpers();
            string finalString = strResponse.StrResponse.Replace("%25", "%").Replace("%20", " ").Replace("%2B", "+").Replace("%3D", "=").Replace("%2F", "/").Replace("%0D%0A", "\r\n");
            // key con produccion
            string cadena = finalString;

            DateTime HoraDelServidor = DateTime.Now;
            DateTime thisDay         = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(HoraDelServidor, TimeZoneInfo.Local.Id, "Eastern Standard Time (Mexico)");

            try
            {
                correosServices.CorreoCadena(thisDay + " finalString " + cadena, "*****@*****.**");
            }
            catch (Exception ex)
            {
                string mnsj = ex.Message;
            }

            //string key = "5DCC67393750523CD165F17E1EFADD21"; //Credenciales sanbox
            string    key             = "7AACFE849FABD796F6DCB947FD4D5268";
            AESCrypto o               = new AESCrypto();
            string    decryptedString = o.decrypt(key, cadena);

            if (!string.IsNullOrEmpty(decryptedString))
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(decryptedString);

                XmlNodeList RespuestaWebPayPlus = doc.DocumentElement.SelectNodes("//CENTEROFPAYMENTS");
                string      reference           = string.Empty;
                string      response            = string.Empty;
                string      foliocpagos         = string.Empty;
                string      auth             = string.Empty;
                string      cc_type          = string.Empty;
                string      tp_operation     = string.Empty;
                string      cc_number        = string.Empty;
                string      amount           = string.Empty;
                string      fecha            = string.Empty;
                string      Hora             = string.Empty;
                string      nb_company       = string.Empty;
                string      bn_merchant      = string.Empty;
                string      id_url           = string.Empty;
                string      cd_error         = string.Empty;
                string      nb_error         = string.Empty;
                string      cc_mask          = string.Empty;
                DateTime    DtFechaOperacion = thisDay;

                for (int i = 0; i < RespuestaWebPayPlus[0].ChildNodes.Count; i++)
                {
                    switch (RespuestaWebPayPlus[0].ChildNodes[i].Name)
                    {
                    case "nb_company":
                        nb_company = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "bn_merchant":
                        bn_merchant = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "id_url":
                        id_url = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "nb_error":
                        nb_error = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "cd_error":
                        cd_error = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "reference":
                        reference = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "response":
                        response = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "foliocpagos":
                        foliocpagos = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "auth":
                        auth = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "date":
                        fecha = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "time":
                        Hora = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "cc_type":
                        cc_type = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "tp_operation":
                        tp_operation = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "cc_number":
                        cc_number = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "cc_mask":
                        cc_mask = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    case "amount":
                        amount = RespuestaWebPayPlus[0].ChildNodes[i].InnerText;
                        break;

                    default:
                        break;
                    }
                }
                PagosServices pagosServices = new PagosServices();

                DateTime fechaRegistro = DateTime.MinValue;

                switch (response)
                {
                case "denied":
                    fechaRegistro    = thisDay;
                    DtFechaOperacion = thisDay;
                    cc_type          = "denied";
                    auth             = "denied";
                    tp_operation     = "denied";
                    amount           = "0";
                    break;

                case "approved":
                    fechaRegistro = thisDay;
                    string fecha1 = DateTime.Parse(fecha + " " + Hora).ToString("dd/MM/yyyy HH:mm:ss");
                    DtFechaOperacion = DateTime.Parse(fecha1);
                    break;

                case "error":
                    fechaRegistro    = thisDay;
                    DtFechaOperacion = thisDay;
                    cc_type          = "error";
                    auth             = "error";
                    tp_operation     = "error";
                    amount           = "0";
                    break;
                }

                if (pagosServices.AgregarInformacionTarjeta(auth, reference, fechaRegistro, response, cc_type, tp_operation, nb_company, bn_merchant, id_url, cd_error, nb_error, cc_number, cc_mask, foliocpagos, decimal.Parse(amount), DtFechaOperacion))
                {
                    respuesta.Data = true;

                    if (response == "approved")
                    {
                        //pagosServices.ConsultarPagoEventoLiga(reference);

                        //if (pagosServices.lsLigasEventoPayCardModel.Count >= 1)
                        //{
                        //    pagosServices.ObtenerCorreoAuxiliar(reference);
                        //}


                        // ==> ENVIO DE CORREO DE PAGO COLEGIATURA
                        var para = pagosServices.ConsultarPagoColegiatura(reference);

                        if (!string.IsNullOrEmpty(para.Item1))
                        {
                            var list = pagosServices.ObtenerPagoColegiatura(Guid.Parse(para.Item1));

                            pagosServices.ActualizarPagoColegiatura(Guid.Parse(para.Item1));

                            correosEscuelaServices.CorreoEnvioPagoColegiatura(list.Item1, list.Item2, "Comprobante de pago de colegiatura", reference, fechaRegistro, "************" + cc_number, foliocpagos, para.Item2, "APROBADO", Guid.Parse(para.Item3));

                            var data = pagosServices.ConsultarDatosValidarPago(Guid.Parse(para.Item1));

                            Guid UidClienteLocal     = Guid.Parse(data.Item1);
                            Guid UidUsuario          = Guid.Parse(data.Item2);
                            Guid UidFechaColegiatura = Guid.Parse(data.Item3);
                            Guid UidAlumno           = Guid.Parse(data.Item4);

                            //Necesito saber el importe de la colegiatura
                            decimal ImporteCole = colegiaturasServices.ObtenerDatosFechaColegiatura(UidClienteLocal, UidUsuario, UidFechaColegiatura, UidAlumno);

                            //Necesito saber el importe de todos los pagos
                            decimal ImportePagado    = pagosColegiaturasServices.ObtenerPagosPadresRLE(UidFechaColegiatura, UidAlumno);
                            decimal ImportePendiente = pagosColegiaturasServices.ObtenerPendientesPadresRLE(UidFechaColegiatura, UidAlumno);

                            // ==>Validar con importe<==
                            if (ImporteCole == ImportePagado) //el importeColegiatura es igual al importe de todos los pagos con estatus aprobado
                            {
                                //Se cambia el estatus de la colegiatura a pagado.
                                colegiaturasServices.ActualizarEstatusFeColegiaturaAlumno(UidFechaColegiatura, UidAlumno, Guid.Parse("605A7881-54E0-47DF-8398-EDE080F4E0AA"), true);
                            }
                            else if (ImporteCole == (ImportePagado + ImportePendiente)) //el importe de los pagos aprobado y pendiente es igual al importe la colegiatura
                            {
                                // La colegiatura mantiene el estatus en proceso
                                colegiaturasServices.ActualizarEstatusFeColegiaturaAlumno(UidFechaColegiatura, UidAlumno, Guid.Parse("5554CE57-1288-46D5-B36A-8AC69CB94B9A"), true);
                            }
                            else
                            {
                                // La colegiatura regresa al ultimo estatus
                                DateTime HoraServidor = DateTime.Now;
                                DateTime hoy          = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(HoraServidor, TimeZoneInfo.Local.Id, "Eastern Standard Time (Mexico)");
                                string   UidEstatus   = colegiaturasServices.ObtenerEstatusColegiaturasRLE(hoy, UidFechaColegiatura, UidAlumno);
                                colegiaturasServices.ActualizarEstatusFeColegiaturaAlumno(UidFechaColegiatura, UidAlumno, Guid.Parse(UidEstatus.ToString()), false);
                            }
                        }

                        pagosServices.ConsultarPromocionLiga(reference);

                        if (pagosServices.lsLigasUrlsPayCardModel.Count >= 1)
                        {
                            foreach (var item in pagosServices.lsLigasUrlsPayCardModel)
                            {
                                pagosServices.AgregarInformacionTarjeta("canceled", item.IdReferencia, fechaRegistro.AddMinutes(-30), "canceled", "canceled", "canceled", "", "", "", "", "", "", "", "", decimal.Parse("0"), DtFechaOperacion.AddMinutes(-20));
                            }
                        }
                        else
                        {
                            if (validacionesServices.ValidarPagoClientePayCard(reference))
                            {
                                ligasUrlsServices.ObtenerDatosUrl(reference);

                                if (validacionesServices.ExisteCuentaDineroCliente(ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.UidPropietario))
                                {
                                    clienteCuentaServices.ObtenerDineroCuentaCliente(ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.UidPropietario);

                                    decimal NuevoSaldo = clienteCuentaServices.clienteCuentaRepository.clienteCuenta.DcmDineroCuenta + ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.DcmImporte;

                                    clienteCuentaServices.ActualizarDineroCuentaCliente(NuevoSaldo, ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.UidPropietario, reference);
                                }
                                else
                                {
                                    clienteCuentaServices.RegistrarDineroCuentaCliente(ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.DcmImporte, ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.UidPropietario, reference);
                                }

                                whatsAppPendientesServices.ObtenerWhatsPntHistPago(ligasUrlsServices.ligasUrlsRepository.ligasUrlsGridViewModel.UidPropietario);

                                DateTime HoraDelServidor2 = DateTime.Now;
                                DateTime hoy      = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(HoraDelServidor2, TimeZoneInfo.Local.Id, "Eastern Standard Time (Mexico)");
                                DateTime horParse = DateTime.Parse(hoy.ToString("dd/MM/yyyy"));

                                if (whatsAppPendientesServices.lsWhatsAppPendientes.Count >= 1)
                                {
                                    ////******Configuracion de Twilio******
                                    parametrosTwiServices.ObtenerParametrosTwi();
                                    string accountSid = parametrosTwiServices.parametrosTwiRepository.parametrosTwi.AccountSid;
                                    string authToken  = parametrosTwiServices.parametrosTwiRepository.parametrosTwi.AuthToken;
                                    string NumberFrom = parametrosTwiServices.parametrosTwiRepository.parametrosTwi.NumberFrom;

                                    //string accountSid = "ACc7561cb09df3180ee1368e40055eedf5";
                                    ////string authToken = "0f47ce2d28c9211ac6a9ae42f630d1d6";
                                    //string authToken = "3f914e588826df9a93ed849cee73eae2";
                                    ////string NumberFrom = "+14158739087";
                                    //string NumberFrom = "+14155238886";

                                    foreach (var item in whatsAppPendientesServices.lsWhatsAppPendientes)
                                    {
                                        DateTime DtVencimiento = DateTime.Parse(item.DtVencimiento.ToString("dd/MM/yyyy"));

                                        if (DtVencimiento >= horParse)
                                        {
                                            string prefijo  = item.VchTelefono.Split('(', ')')[1];
                                            string NumberTo = item.VchTelefono.Split('(', ')')[2];

                                            if (prefijo == "+52")
                                            {
                                                prefijo = prefijo + "1";
                                            }

                                            try
                                            {
                                                tarifasServices.CargarTarifas();
                                                clienteCuentaServices.ObtenerDineroCuentaCliente(item.UidPropietario);
                                                decimal DcmCuenta = clienteCuentaServices.clienteCuentaRepository.clienteCuenta.DcmDineroCuenta;

                                                decimal DcmWhatsapp = 0;
                                                foreach (var tariWhats in tarifasServices.lsTarifasGridViewModel)
                                                {
                                                    DcmWhatsapp = tariWhats.DcmWhatsapp;
                                                }

                                                if (DcmCuenta >= DcmWhatsapp)
                                                {
                                                    TwilioClient.Init(accountSid, authToken);

                                                    var message = MessageResource.Create(
                                                        body: item.VchUrl.Replace("[n]", "\n"),
                                                        from: new Twilio.Types.PhoneNumber("whatsapp:" + NumberFrom),
                                                        to: new Twilio.Types.PhoneNumber("whatsapp:" + prefijo + NumberTo));

                                                    decimal NuevoSaldo = DcmCuenta - DcmWhatsapp;

                                                    string[] DatosUsuario = Regex.Split(validacionesServices.ObtenerDatosUsuario(item.UidUsuario, item.UidPropietario), ",");

                                                    string IdCliente = string.Empty;
                                                    string IdUsuario = string.Empty;

                                                    if (DatosUsuario.Length >= 2)
                                                    {
                                                        IdCliente = DatosUsuario[0];
                                                        IdUsuario = DatosUsuario[1];
                                                    }

                                                    string Folio = IdCliente + IdUsuario + thisDay.ToString("ddMMyyyyHHmmssfff");

                                                    if (ticketsServices.RegistrarTicketPago(Folio, DcmWhatsapp, 0, DcmWhatsapp, item.VchDescripcion, item.UidPropietario, hoy, 1, 0, 0, DcmCuenta, DcmWhatsapp, NuevoSaldo))
                                                    {
                                                        clienteCuentaServices.ActualizarDineroCuentaCliente(NuevoSaldo, item.UidPropietario, "");
                                                        whatsAppPendientesServices.ActualizarWhatsPendiente(item.UidWhatsAppPendiente, Guid.Parse("FB046B99-A9DF-4826-9EDB-E47BCE0251EA"));
                                                    }
                                                }
                                            }
                                            catch (Exception ex)
                                            {
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                respuesta.Data = "Lo sentimos, no hemos podido desifrar la cadena. " + cadena;
            }
            return(respuesta);
        }