Retorno automático PagSeguro

19/12/2012

0

Galera estou tentando fazer o retorno automático do pagseguro porém não está dando certo.
Nunca me traz valor no post quando retorna, pelo menos foi nesta conclusão que cheguei baseado no código abaixo.
Segue abaixo meu código de retorno.

DataTable tbConfiguracoes = new DataTable();
tbConfiguracoes = classeConfiguracoes.Configuracoes();

string Token = tbConfiguracoes.Rows[0]["token_pagseguro"].ToString();
string Pagina = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml";
//string Dados = HttpContext.Current.Request.Form.ToString() + "&Comando=validar" + "&Token=" + Token;

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("=&", 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();

MySqlCommand cmdAltera = new MySqlCommand();
cmdAltera.Connection = classeConexao.Conexao;
cmdAltera.CommandText = ("update pedido set codigo_pagseguro=" + Request.Form["TransacaoID"] + " where id_pedido=20 ");

try
{
classeConexao.AbrirConexao();
cmdAltera.ExecuteNonQuery();
Label1.Text = "Pedido alterado com sucesso!";
}
catch (Exception)
{

throw;
}
finally
{
classeConexao.FecharConexao();
}
Guilherme Lemos

Guilherme Lemos

Responder

Posts

02/01/2013

Flavia Santos

Oi Guilherme, tudo bem?

Não sei como você está estruturando a sua aplicação, porém segue alguns pontos a observar.
Se for uma aplicação Web (como acredito que seja), você pode usar um UpdatePanel para que o seu botão não gere um postback na tela inteira sempre que for clicado mas sim, somente nos componentes que você precisará manipular conforme o objeto de retorno.

Se no seu Page Load possuir instruções de limpeza da tela por exemplo, coloque dentro da condição:

if (!IsPostBack)
{

}

Assim a página só será limpa se você a estiver abrindo a primeira vez e não sempre que o PostBack ocorre.

Espero ter ajudado.

Att,
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar