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));
            }
        }
示例#2
0
        /// <summary>
        /// Realiza checkout com a conta parametrizada na configuração do sistema.
        /// </summary>
        /// <param name="emailUsuario">E-mail usuário pagseguro.</param>
        /// <param name="token">Token.</param>
        /// <param name="urlCheckout">URL Checkout.</param>
        /// <param name="itens">Itens de venda.</param>
        /// <param name="comprador">Dados do comprador.</param>
        /// <param name="reference">Referência da transação.</param>
        /// <returns></returns>
        public string Checkout(string emailUsuario, string token, string urlCheckout, List <PagSeguroItemDTO> itens, PagSeguroCompradorDTO comprador, string reference)
        {
            //Conjunto de parâmetros/formData.
            System.Collections.Specialized.NameValueCollection postData = new System.Collections.Specialized.NameValueCollection();
            postData.Add("email", emailUsuario);
            postData.Add("token", token);
            postData.Add("currency", "BRL");

            //postData.Add("email", "*****@*****.**");
            ////postData.Add("token", "25625C54F05444CA9CB9030A8CA12119");
            //postData.Add("token", "AFCB097BE79B42F9902EAB5886E5477D");
            //postData.Add("currency", "BRL");
            //postData.Add("itemId1", "0001");
            //postData.Add("itemDescription1", "ProdutoPagSeguroI");
            //postData.Add("itemAmount1", "3.00");
            //postData.Add("itemQuantity1", "1");
            //postData.Add("itemWeight1", "200");
            //postData.Add("reference", "REF1234");
            //postData.Add("senderName", "Jose Comprador");
            //postData.Add("senderAreaCode", "44");
            //postData.Add("senderPhone", "999999999");
            //postData.Add("senderEmail", "*****@*****.**");
            //postData.Add("shippingAddressRequired", "false");


            for (int i = 0; i < itens.Count; i++)
            {
                postData.Add(string.Concat("itemId", i + 1), itens[i].itemId);
                postData.Add(string.Concat("itemDescription", i + 1), itens[i].itemDescription);
                postData.Add(string.Concat("itemAmount", i + 1), itens[i].itemAmount);
                postData.Add(string.Concat("itemQuantity", i + 1), itens[i].itemQuantity);
                postData.Add(string.Concat("itemWeight", i + 1), itens[i].itemWeight);
            }

            //Reference.
            postData.Add("reference", reference);

            //Comprador.
            if (comprador != null)
            {
                postData.Add("senderName", comprador.SenderName);
                postData.Add("senderAreaCode", comprador.SenderAreaCode);
                postData.Add("senderPhone", comprador.senderPhone);
                postData.Add("senderEmail", comprador.senderEmail);
            }

            //Shipping.
            postData.Add("shippingAddressRequired", "false");

            //Formas de pagamento.
            //Cartão de crédito e boleto.
            postData.Add("acceptPaymentMethodGroup", "CREDIT_CARD,BOLETO");

            //String que receberá o XML de retorno.
            string xmlString = null;

            //Webclient faz o post para o servidor de pagseguro.
            using (WebClient wc = new WebClient())
            {
                try
                {
                    //Informa header sobre URL.
                    wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";

                    //Faz o POST e retorna o XML contendo resposta do servidor do pagseguro.
                    var result = wc.UploadValues(urlCheckout, postData);

                    //Obtém string do XML.
                    xmlString = Encoding.ASCII.GetString(result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            //Cria documento XML.
            XmlDocument xmlDoc = new XmlDocument();

            //Carrega documento XML por string.
            xmlDoc.LoadXml(xmlString);

            //Obtém código de transação (Checkout).
            var code = xmlDoc.GetElementsByTagName("code")[0];

            //Obtém data de transação (Checkout).
            var date = xmlDoc.GetElementsByTagName("date")[0];

            //Retorna código do checkout.
            return(code.InnerText);
        }