PagSeguro: Guia de Utilização com ASP.NET MVC
Olá pessoal!
Depois de bastante tempo sem publicar por
aqui – afinal tive meu casamento, lua de mel, projetos indo
pro ar, etc, etc – resolvi fazer um post sobre algo que
utilizamos em um projeto recente da NBR.
Para aqueles que estão pensando em utilizar uma solução de
pagamento online, o
PagSeguro é uma
ótima opção. Porém, sua documentação para integração com
ASP.NET MVC, ou qualquer outra linguagem, não é 100%.
Por este motivo, este post servirá como guia para
utilização com ASP.NET MVC, mas poderá servir de base para
utilização em qualquer outra plataforma.
Como o objetivo aqui não é apresentar o PagSeguro, acesse seu site para conhecer o funcionamento.
1. Qual é o fluxo do PagSeguro?
O fluxo do PagSeguro é simples. O site que está vendendo algum produto ou serviço deverá enviar ao PagSeguro as informações da compra, como quantidade, produto, frete, etc. Este “envio” pode ser realizado como um post para um endereço do PagSeguro. A partir deste ponto o usuário estará no ambiente da UOL, onde deverá realizar um rápido cadastro, selecionar a forma de pagamento e concluir o processo. Neste momento, o PagSeguro pode ser configurado para retornar para uma URL específica do seu site, e consequentemente apresentar uma mensagem específica de retorno para o usuário.
Portanto, resumidamente podemos colocar:
- Seu site obtém as informações de compra, monta um formulário e envia-o para a URL do PagSeguro;
- O PagSeguro inicia o processo de pagamento, requisitando o cadastro do usuário (não é o mesmo cadastro do seu site);
- O cliente, já no ambiente do PagSeguro, solicita a forma de pagamento desejada;
- O usuário insere as informações e conclui o processo;
- O PagSeguro retorna para o seu site através da URL de retorno configurada no PagSeguro pelo administrador da conta;
- Em um outro momento, que não exatamente no retorno para a sua URL configurada, o PagSeguro chama a mesma URL passando informações via POST sobre o status da compra.
Em muitas conversas encontro dúvidas no passo 6. A mais comum delas é se o PagSeguro, ao retorna para a sua URL de retorno no fluxo do cliente, já envia as informações sobre o status da compra. Neste caso não, pois ele executa o verbo GET na sua URL. Quando, para esta mesma URL, ele executar o verbo POST, estará passando as informações da compra.
2. Como realizar sua implementação no ASP.NET MVC?
Portanto, se através da mesma URL configurada no PagSeguro, teremos o retorno da navegação do cliente no processo de compra e o recebimento das informações do status da compra, no ASP.NET MVC basta criarmos duas actions em um controller, uma configurada para GET e outra para POST.
1: public ActionResult Retorno()2: {3: // ...4: }1: [HttpPost]2: public ActionResult Retorno(FormCollection form)3: {4: // ...5: }
O primeiro método deverá retornar uma tela informativa ao
cliente, informando, por exemplo, o status da compra dele.
O segundo método deverá obter as informações do
FormCollection e tratá-las no sistema, para atualização do
status do pedido. É importante destacar que a cada alteração
do status do pedido dentro do PagSeguro, uma requisição para
a URL de retorno através de POST será realizada.
É muito importante também citar que apenas a requisição ao
GET é síncrona, dentro do fluxo de navegação do cliente. Já
para a outra requisição não podemos determinar quando será
realizada.
Porém, no projeto que utilizamos a solução,
o retorno via POST do pagseguro é extremamente rápida, e em
alguns momentos o retorno do GET já apresenta um status
atualizado para o cliente.
3. Como testar localmente?
Um grande problema deste esquema é a dificuldade de testes. No projeto que publicamos, realizamos dois tipos de teste para o PagSeguro. Em um, no período de desenvolvimento, o nosso fluxo de compra não chega ao PagSeguro, paramos no momento em que a compra é registrada no sistema com o status “Registrado”. Neste ponto, ativamos um HTML simples nosso, que simula o retorno do PagSeguro à nossa action Retorno configurada como POST, passando as informações necessárias.
Em produção, toda comunicação de retorno com o PagSeguro é logada no banco de dados. Gravamos todas as chaves/valores que chegam via POST para análise da comunicação.
Conclusão
O PagSeguro é uma ferramente excelente. Sua documentação e ambiente de teste não estão OK, mas seu funcionamento e agilidade compensam tudo isso.
Abraços.