none
ASP.NET com Pagseguro ? Retorno de dados RRS feed

  • Pergunta

  • Olá,

    Estou implementando um site da compra de um único produto, que pode ser comprado por varias pessoas.
    Quando mando para o PagSeguro, após clicar no botão, tudo certo.
    Aí o cliente se registra, escolhe forma de pagamento.
    E quando ele pede para voltar ao site, os dados são retornados via GET, e eu consigo pegar o id da transação, somente e mais nada.

    Aqui está o código do pageload:

    protected void Page_Load(object sender, EventArgs e)
        {
            Form.Method = "post";
            Form.Target = "pagseguro";
            //Form.Action = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml";
            //Form.Action = "http://localhost:9090/checkout/checkout.jhtml";
    
            //TESTE //TESTE //TESTE
            Session["UserId"] = 3;
            Session["numero"] = 22;
            Session["premio"] = "Ipad2";
            //TESTE //TESTE //TESTE
    
            //this.VendaPagSeguro1.UrlPagSeguro = "http://localhost:9090/checkout/checkout.jhtml";
            //this.VendaPagSeguro1.UrlPagSeguro = "https://pagseguro.uol.com.br/checkout/checkout.jhtml";
        }


    E aqui onde envio para o PagSeguro após clicar no botão:

    protected void ibComprarPagSeguro_Click(object sender, ImageClickEventArgs e)
        {
            //Id do Usuario
            int id_usuario = (int)Session["UserId"];
            int NumeroEscolhido = Convert.ToInt32(Session["numero"]);
    
            //Id do Sorteio
            Label l = (Label)Master.FindControl("lblNumeroSorteio");
            int numero_sorteio = Convert.ToInt32(l.Text);
    
            //Descobre o Id do Sorteio
            solyModel.Sorteios sorteio = ctx.Sorteios.Where(p => p.NumeroDoSorteio.Equals(numero_sorteio)).First();
    
            solyModel.Usuarios_Sorteios usBuscaCodigoReferencia = null;
            bool bcr = false;
            string CodigoReferencia = "";
    
            //while(bcr == false) {
            //    //Gera numero aleatorio para gerar codigo
            Random r = new Random();
            int i = r.Next(0, 999999);
            CodigoReferencia = i.ToString("000000");
    
            Usuarios_Sorteios usInserir = new Usuarios_Sorteios();
            usInserir.CodigoReferencia = CodigoReferencia;
            usInserir.Id_Sorteio = sorteio.Id;
            usInserir.Id_Usuario = id_usuario;
            usInserir.NumeroEscolhido = NumeroEscolhido;
            ctx.AddToUsuarios_Sorteios(usInserir);
            ctx.SaveChanges();
    
            //Encontra a referencia do usuario e sorteio na tabela Usuarios_Sorteios
            solyModel.Usuarios_Sorteios us = ctx.Usuarios_Sorteios.Where(p => p.Id == id_usuario && p.Id_Sorteio == sorteio.Id).First();
    
    
            string ssorteio = "Sorteio: " + l.Text + " - " + "Número escolhido: " + Session["numero"].ToString()
                                        + "- Prêmio escolhido:" + Session["premio"];
    
    
            Carrinho.Instancia.Adicionar(1, 1);
    
            string codigoPedido = AcessoDados.Instancia.GravarPedido(Carrinho.Instancia);
            this.VendaPagSeguro1.CodigoReferencia = codigoPedido;
    
            //this.VendaPagSeguro1.CodigoReferencia = CodigoReferencia;
    
            foreach (int codigo in Carrinho.Instancia.CodigosDosItens)
            {
                UOL.PagSeguro.Produto produto = new UOL.PagSeguro.Produto();
                produto.Codigo = "1";
                produto.Descricao = ssorteio;
                //produto.Peso = 100;
                produto.Quantidade = 1;
                //produto.Valor = 1700;
                produto.Valor = Convert.ToDouble(17);
    
                this.VendaPagSeguro1.Produtos.Add(produto);
            }
    
            this.VendaPagSeguro1.Cliente = new UOL.PagSeguro.Cliente();
            this.VendaPagSeguro1.Cliente.Nome = "Novo usuário";
    
            Carrinho.Instancia.Limpar();
    
            this.VendaPagSeguro1.Executar(this.Response); 
        }

    E no webconfig:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
          <globalization fileEncoding="iso-8859-1" requestEncoding="iso-8859-1" responseEncoding="iso-8859-1" culture="pt-BR" />
        <customErrors mode="Off" />
        <compilation debug="true" targetFramework="4.0">
          <assemblies>
    .
    .
    .

    Algo errado com meu código ?
    Alguém pode ajudar ? Algo que estou deixando de fazer ?

    sexta-feira, 11 de maio de 2012 13:34

Todas as Respostas

  • Alguem pode ajudar por favor ?
    segunda-feira, 14 de maio de 2012 11:06
  • Alguem pode ajudar por favor ?
    poderia melhorar sua perguntar?onde vc está com problema no retorno?

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    segunda-feira, 14 de maio de 2012 12:37
    Moderador
  • Não consigo pegar o POST, sempre pega GET na página de retorno.
    Segue código .cs da página que pega o retorno de dados: 

    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Text;
    
    public partial class Pago : System.Web.UI.Page
    {
        //this.RetornoPagSeguro1.Token = "0E6F5BD6A66B47D8A97BACC5E47ACEB8";
        //string valor = Request.Form["VendedorEmail"].ToString();
    
        protected void Page_Load(object sender, EventArgs e)
        {
            //string ValorFrete = Request.Form["ValorFrete"].ToString();
            //lblResultado.Text += "<br />ValorFrete = " + ValorFrete;
    
            //string paymentMethodType = Request.Form["paymentMethodType"].ToString();
            //lblResultado.Text += "<br />paymentMethodType = " + paymentMethodType;
    
            if (Request.HttpMethod == "POST")
            {
                lblResultado.Text += "<br /> Request.HttpMethod = POST";
                //o método POST indica que a requisição é o retorno da validação NPI.
    
                string Token = "C514EC2D4BB24FAD820F8D95218E2599";
                //string Pagina = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml";
                string Pagina = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml";
                string Dados = "";
                foreach (var key in this.Request.Form.AllKeys)
                {
                    if (!String.IsNullOrEmpty(key))
                    {
                        String value = this.Request.Form[key].ToString();
                        value = HttpUtility.UrlEncode(value, Encoding.GetEncoding("ISO-8859-1"));
                        Dados += String.Format("{0}={1}&", key, value);
                    }
                }
                Dados += "Comando=validar&Token=" + Token;
    
                System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Pagina);
    
                req.Method = "POST";
                req.ContentLength = Dados.Length;
                req.ContentType = "application/x-www-form-urlencoded";
    
                System.IO.StreamWriter stOut = new System.IO.StreamWriter(req.GetRequestStream(), System.Text.Encoding.GetEncoding("ISO-8859-1"));
                stOut.Write(Dados);
                stOut.Close();
    
                System.IO.StreamReader stIn = new System.IO.StreamReader(req.GetResponse().GetResponseStream(), System.Text.Encoding.GetEncoding("ISO-8859-1"));
                string Result = stIn.ReadToEnd();
                stIn.Close();
    
                if (Result == "VERIFICADO")
                {
                    string vem = Request.QueryString["VendedorEmail"];
                    lblResultado.Text += "<br />VendedorEmail" + vem;
    
                    string tid = Request.QueryString["TransacaoID"];
                    lblResultado.Text += "<br />TransacaoID" + vem;
                }
                else if (Result == "FALSO")
                {
                    lblResultado.Text += "<br />o post nao foi validado";
                }
                else
                {
                    lblResultado.Text += "<br />erro na integração com PagSeguro.";
                }
            }
            else if (Request.HttpMethod == "GET")
            {
                lblResultado.Text += "<br /> Request.HttpMethod = GET - <br /> Request.QueryString['transaction_id'] = " + Request.QueryString["transaction_id"];
                lblResultado.Text += "<br /> Request.QueryString['paymentMethodType'] = " + Request.QueryString["paymentMethodType"];
                //o método GET indica que a requisição é o retorno do Checkout PagSeguro para o site vendedor.
                //no término do checkout o usuário é redirecionado para este bloco.
            }
        }
    
        protected void Unnamed1_VendaEfetuada(UOL.PagSeguro.RetornoVenda retornoVenda)
        {
            lblResultado.Text += "<br />Venda Efetuada";
            //Obtendo o número do Pedido
            int codigo_pedido = int.Parse(retornoVenda.CodigoReferencia);
    
            //Obtendo o código da transação no PagSeguro
            string codigo_transacao_pagseguro = retornoVenda.CodigoTransacao;
    
            //Obtendo o novo status do pedido
            UOL.PagSeguro.StatusTransacao status = retornoVenda.StatusTransacao;
    
            //Obtendo a forma de pagamento utilizada
            string tipo_pagamento = retornoVenda.TipoPagamentoDescricao;
    
            //Obtendo o valor pago pelo frete
            double frete_cobrado = retornoVenda.ValorFrete;
    
            //Obtendo a anotação deixada pelo cliente no momento do pagamento
            string anotacao_cliente = retornoVenda.Anotacao;
    
            lblResultado.Text += "<br />codigo_pedido = " + codigo_pedido.ToString() +
                "codigo_transacao_pagseguro = " + codigo_transacao_pagseguro +
                "tipo_pagamento = " + tipo_pagamento +
                "frete_cobrado = " + frete_cobrado.ToString() +
                "anotacao_cliente = " + anotacao_cliente ;
        }
    
    
        protected void RetornoPagSeguro1_VendaNaoAutenticada(object sender, UOL.PagSeguro.VendaNaoAutenticadaEventArgs e)
        {
            lblResultado.Text += "<br /> Venda não autenticada";
        }
    
        protected void RetornoPagSeguro1_FalhaProcessarRetorno(object sender, UOL.PagSeguro.FalhaProcessarRetornoEventArgs e)
        {
            lblResultado.Text += "<br /> FalhaProcessarRetorno";
        }
    
        protected void RetornoPagSeguro1_RetornoVerificado(object sender, UOL.PagSeguro.VendaAutenticadaEventArgs e)
        {
            lblResultado.Text += "<br /> retorno VERIFICADO";
        }
    }

    Pode ajudar ?


    segunda-feira, 14 de maio de 2012 13:00
  • Alguem ?
    terça-feira, 29 de maio de 2012 12:48
  • Amigo,

    Se os parâmetros são enviados via GET pelo PagSeguro, por que você não pega tudo que ele envia e confirma se as informações que você está procurando realmente chegou?

    Ex.:

    Response.Write(Request.ServerVariables["UNENCODED_URL"]);

    Com o código acima você vai pegar tudo que for enviado por query string, coloque um Response.End(); e confirme as informações.

    Boa sorte!


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    terça-feira, 29 de maio de 2012 13:47
  • veja

    http://social.msdn.microsoft.com/Forums/pt-BR/vsgeralpt/thread/1f23ed5d-371b-4e37-aa07-5124a2535869


    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    quarta-feira, 30 de maio de 2012 12:08
    Moderador
  • Não aparece nada quando chamo

    protected void Page_Load(object sender, EventArgs e) {
            //Esta linha deve ser removida para que seja utilizado o ambiente real do PagSeguro
            //this.RetornoPagSeguro1.UrlNPI = "http://localhost:9090/pagseguro-ws/checkout/NPI.jhtml";
            lblRetorno.Text += "Foi no pageload";
            Response.Write("Foi no pageload");
            Response.Write(Request.ServerVariables["UNENCODED_URL"]);
    
            if (Request.HttpMethod == "POST")
            {
                string StatusTransacao = Request.Form["StatusTransacao"];
                string TipoPagamento = Request.Form["TipoPagamento"];
                string TrasacaoID = Request.Form["TransacaoID"];


    "Brasil é o Orkut do mundo." Desenvolvimento de sites e sistemas web www.xandeq.com

    quarta-feira, 30 de maio de 2012 18:25
  • Amigo,

    A página recebe um post ou um GET?
    Lá em cima você disse que era um GET(?param=value), se não aparece nada é pq não é GET. Da um foreach no Request.Form e veja a lista de todos os parâmetros.


    Não esqueça de marcar como útil uma resposta que te ajude.
    "A diversão é a alma do negócio"

    quinta-feira, 31 de maio de 2012 15:14