Array
(
)

Retorno automático PagSeguro

Guilherme Lemos
   - 19 dez 2012

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("{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();
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();
}

Flavia Santos
   - 02 jan 2013

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,