none
PagSeguro e Asp.Net MVC (Página de retorno) RRS feed

  • Pergunta

  • Olá amigos, acredito que alguém aqui já tenha passado por algo parecido.

    Estou integrando uma aplicação asp.net mvc ao Pagseguro, e estou tendo um problema na página de retorno que o pagseguro envia um request conforme o andamento do pagamento em questão. Em webforms, temos que adicionar um componente RetornoPagSeguro (server control) na página e programar o evento onVendaEfetuada. Fiz um exemplo em webforms e como ambiente de testes, tudo ok, porém em webforms terei de criar este controle em runtime (no controller), então fiz um código assim:

    public ActionResult Resultado()
        {
          using (var retornoPagSeguro = new RetornoPagSeguro("aqui-vai-meu-token"))
          {
            retornoPagSeguro.VendaEfetuada += new RetornoPagSeguro.VendaEfetuadaEventHandler(RetornoPagSeguroVendaEfetuada);
            retornoPagSeguro.UrlNPI = "http://localhost:9090/security/npi/default.aspx";
          }
    
          return RedirectToAction("CompraFinalizada", "Cliente", new { area = "Restrito" });
        }
    
    
        public void RetornoPagSeguroVendaEfetuada(RetornoVenda retornoVenda)
        {
          // regra para efetuar a baixa no pagamento
        }
    

    Com o ambiente de testes a action é invocada corretamente, mas o evento "VendaEfetuada" não é executado. Pelo fato de neste caso não ser um server control igual no webforms, está faltando chamar algum método ou algo do tipo ?

    Do contrário, alguem teria alguma sugestão, ou resolveu de outra forma?
    Qq ajuda é bem vinda!

    Obrigado desde já!
    Abraços



    Felipe Oriani - www.felipeoriani.com.br
    MCP - Microsoft Certified Professional
    ...O rio atinge os seu objetivos porque aprendeu a contornas os obstáculos... por André Luiz
    quinta-feira, 23 de setembro de 2010 17:17

Respostas

  • da uma olhadinha nessa materia, http://joselino.net/2010/10/10/asp-net-mvc-e-pagseguro/ nao sei se te ajuda, mais quem sabe =]
    E-mail: dnbdub@msn.com Twitter: MaxEvol
    • Marcado como Resposta Felipe B Oriani quinta-feira, 4 de novembro de 2010 17:15
    domingo, 31 de outubro de 2010 22:56

Todas as Respostas

  • Você poderia usar Ajax para ficar consultando o servidor se a venda foi efetuada, e ai você continua com suas ações.


    Contato:albertim_brasil@hotmail.com - Se ajudei, marca como útil.
    Twitter: Me siga!!
    Blog:http://dotnettime.spaces.live.com/

    segunda-feira, 27 de setembro de 2010 13:48
  • da uma olhadinha nessa materia, http://joselino.net/2010/10/10/asp-net-mvc-e-pagseguro/ nao sei se te ajuda, mais quem sabe =]
    E-mail: dnbdub@msn.com Twitter: MaxEvol
    • Marcado como Resposta Felipe B Oriani quinta-feira, 4 de novembro de 2010 17:15
    domingo, 31 de outubro de 2010 22:56
  • Felipe,

    Estou desenvolvendo uma biblioteca que faz a integração do PagSeguro com ASP .NET MVC.

    O projeto está disponível no CodePlex, acesse e dê uma olhada http://pagseguromvc.codeplex.com
    sexta-feira, 19 de novembro de 2010 00:02
  • Cara tenta assim que não tem erro:

                                                

    [HttpPost]
            public ActionResult RetornoPagSeguro(FormCollection retornoVenda)
            {
                if (Request.HttpMethod == "POST")
                {
                    //o método POST indica que a requisição é o retorno da validação NPI.

                    string Token = "seu-token";
                    //string Pagina = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml";
                    string Pagina = "http://localhost:9090/pagseguro-ws/checkout/NPI.jhtml";
                    string Dados = HttpContext.Request.Form.ToString() + "&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")
                    {

      //o post foi validado

                        string statusTrans = retornoVenda["StatusTransacao"];
                        if (statusTrans == "Aprovado")
                        {

                        }
                        else if (statusTrans == "Cancelado")
                        {                   

                               }
    else

                        {

                        }
                    }
                    else if (Result == "FALSO")
                    {
                        //o post nao foi validado
                    }
                    else
                    {
                        //erro na integração com PagSeguro.
                    }
                }
                else if (Request.HttpMethod == "GET")
                {
                    //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.
                }

                return null;
            }

    Abraço


    quinta-feira, 7 de março de 2013 18:27
  • Boa iniciativa!!!!

    Antonio Cardoso S. Júnior MCP, Partner Network

    sexta-feira, 15 de março de 2013 12:41