public async Task <IActionResult> NotificacaoEspecificao(NotificacaoDto notificacaoDto)
        {
            try
            {
                //Busca os dados dados da transacao
                var dadosConfigPagamento = await _meioPagamentoRepository.Buscar(x => x.Status.Equals("A"));

                var    emailPagSeguro = dadosConfigPagamento.FirstOrDefault().Email;
                var    tokenPagSeguro = dadosConfigPagamento.FirstOrDefault().Token;
                string urlPagseguro   = $"{urlWsPagueSeguro}/v3/transactions/notifications/";

                var apiPagSeguro = new PagSeguroAPI();

                var retornoApiPagSeguro = apiPagSeguro.ConsultaPorCodigoNotificacao(emailPagSeguro, tokenPagSeguro, urlPagseguro, notificacaoDto.NotificationCode);

                return(Response(retornoApiPagSeguro));
            }
            catch (Exception ex)
            {
                return(ResponseErro(ex));
            }
        }
        public async Task <IActionResult> Notificacoes([FromForm] NotificacaoDto notificacaoDto)
        {
            try
            {
                //Inicia com log
                var logNotificacoes = new LogNotificacao()
                {
                    Data             = DateTime.Now,
                    NotificationCode = notificacaoDto.NotificationCode,
                    NotificationType = notificacaoDto.NotificationType
                };

                var response = await _logNotificacoesRepository.Adicionar(logNotificacoes);

                //Busca os dados dados da transacao
                var dadosConfigPagamento = await _meioPagamentoRepository.Buscar(x => x.Status.Equals("A"));

                var    emailPagSeguro = dadosConfigPagamento.FirstOrDefault().Email;
                var    tokenPagSeguro = dadosConfigPagamento.FirstOrDefault().Token;
                string urlPagseguro   = $"{urlWsPagueSeguro}/v3/transactions/notifications/";

                var apiPagSeguro = new PagSeguroAPI();

                var retornoApiPagSeguro = apiPagSeguro.ConsultaPorCodigoNotificacao(emailPagSeguro, tokenPagSeguro, urlPagseguro, notificacaoDto.NotificationCode);

                if (!retornoApiPagSeguro.Status.Equals(Convert.ToInt32(StatusTransacaoEnum.Paga)) && !retornoApiPagSeguro.Status.Equals(Convert.ToInt32(StatusTransacaoEnum.Disponivel)))
                {
                    return(Response("Não foi possível fazer operacao", false));
                }

                var dadosInscricao = await _inscricaoUsuarioRepository.Buscar(x => x.Id.Equals(Convert.ToInt32(retornoApiPagSeguro.Reference)));

                var buscaDadosInscricao = dadosInscricao.FirstOrDefault();


                //Atualiza o status da isncricao
                if (!buscaDadosInscricao.Status.Equals("AG"))
                {
                    return(Response("Não foi possível fazer operacao", false));
                }

                buscaDadosInscricao.Status              = "CO";
                buscaDadosInscricao.DataConfirmacao     = DateTime.Now;
                buscaDadosInscricao.ProcessoInscricao   = null;
                buscaDadosInscricao.TransacaoInscricoes = null;
                buscaDadosInscricao.Usuario             = null;

                var atualizaInscricao = await _inscricaoUsuarioRepository.Atualizar(buscaDadosInscricao);

                if (!atualizaInscricao)
                {
                    return(Response("Erro ao atualizar inscrição", false));
                }

                return(Response(buscaDadosInscricao));
            }
            catch (Exception ex)
            {
                return(ResponseErro(ex));
            }
        }
        public async Task <IActionResult> Gerar(int id)
        {
            try
            {
                var inscricao = await _inscricaoUsuarioRepository.ObterPorId(id);

                if (inscricao == null)
                {
                    return(Response("Inscrição não localizada!", false));
                }

                var dadosConfigPagamento = await _meioPagamentoRepository.Buscar(x => x.Status.Equals("A"));

                var dadosCurso = await _cursoRepository.ObterPorId(inscricao.ProcessoInscricao.CursoId);

                var    emailPagSeguro = dadosConfigPagamento.FirstOrDefault().Email;
                var    tokenPagSeguro = dadosConfigPagamento.FirstOrDefault().Token;
                string urlCheckout    = $"{urlWsPagueSeguro}/v2/checkout";

                var listaItensPedido = new List <PagSeguroItemDTO> {
                    new PagSeguroItemDTO {
                        itemId          = id.ToString(),
                        itemQuantity    = "1",
                        itemDescription = $"Inscrição para o curso: {dadosCurso.Titulo}",
                        itemAmount      = inscricao.ProcessoInscricao.Valor.ToString("F").Replace(",", "."),
                        itemWeight      = "200"
                    }
                };

                if (string.IsNullOrEmpty(inscricao.Usuario.Email))
                {
                    inscricao.Usuario.Email = "*****@*****.**";
                }

                var dadosComprador = new PagSeguroCompradorDTO
                {
                    SenderName     = inscricao.Usuario.Nome.Length > 50 ? inscricao.Usuario.Nome.Substring(0, 50).Trim() : inscricao.Usuario.Nome.Trim(),
                    senderEmail    = inscricao.Usuario.Email.Length > 60 ? inscricao.Usuario.Nome.Substring(0, 60).ToLower().Trim() : inscricao.Usuario.Email.ToLower().Trim(),
                    senderPhone    = inscricao.Usuario.TelefoneCelular.Length > 9 ? inscricao.Usuario.TelefoneCelular.Substring(0, 9).Trim() : inscricao.Usuario.TelefoneCelular.Trim(),
                    SenderAreaCode = "62"
                };

                var referencia = id.ToString();

                var apiPagSeguro = new PagSeguroAPI();

                //Retira os espaçõs entre o nome
                Regex regex = new Regex(@"\s{2,}");
                dadosComprador.SenderName = regex.Replace(dadosComprador.SenderName, " ");
                dadosComprador.SenderName = dadosComprador.SenderName.Replace("\0", "");

                var retornoApiPagSeguro = apiPagSeguro.Checkout(emailPagSeguro, tokenPagSeguro, urlCheckout, listaItensPedido, dadosComprador, referencia);

                if (!string.IsNullOrEmpty(retornoApiPagSeguro))
                {
                    var transacao = new TransacaoInscricao()
                    {
                        Codigo             = retornoApiPagSeguro,
                        InscricaoUsuarioId = id
                    };

                    var registraTransacao = await _transacaoInscricaoRepository.Adicionar(transacao);

                    if (!registraTransacao)
                    {
                        return(Response("Erro na transação de pagamento", false));
                    }
                }
                else
                {
                    return(Response("Erro ao fazer a comunicação de pagamento", false));
                }

                var paymentUrl = string.Concat($"{urlSitePagueSeguro}/v2/checkout/payment.html?code=", retornoApiPagSeguro);

                return(Response(paymentUrl));
            }
            catch (Exception ex)
            {
                return(ResponseErro(ex));
            }
        }