Inquiridor
ASP.NET com Pagseguro ? Retorno de dados

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 ?
Todas as Respostas
-
-
-
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 ?
-
-
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" -
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
-
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
-
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"