AVISO: Este artigo foi escrito há algum tempo e as informações a respeito de como configurar o servidor de testes podem não mais funcionar corretamente. Em caso de dúvidas entre em contato com o Pag Seguro.
Vocês provavelmente já conhecem o PagSeguro, sistema de pagamentos do UOL que permite transações financeiras seguras pela internet, poupando vendedores e pequenas lojas da burocracia de ter que fazer contrato com operadoras de cartão de crédito e bancos para poder vender on-line.
Recentemente temos usado muito o pagseguro na interAtiva!, tanto para sistemas de clientes quando para sistemas próprios, e também para receber pagamentos de pessoas de longe de forma rápida, flexível e segura.
Se um cliente de São Paulo, por exemplo, nos contrata para criar um sistema para sua empresa, ele pode nos pagar o sistema em até 15x (dependendo do cartão de crédito), mas nós recebemos o valor completo do trabalho em 14 dias. Além disso, caso algo inesperado ocorra, podemos cancelar o pagamento em até 14 dias.
Uma das ferramentas que o PagSeguro disponibiliza para os vendedores é o carrinho de compras, que pode ser utilizado o do próprio PagSeguro, ou então do próprio cliente.
Quando construímos sistemas que vendem alguma coisa, geralmente utilizamos o carrinho de compras próprio, e o retorno automático do PagSeguro para acompanhar o status da transação, e, quando completa, liberar a entrega do produto ao comprador. Caso este produto seja acesso a um SaaS, por exemplo, basta liberar a conta do cliente ao receber o aviso do PagSeguro que a transação foi concluída.
Mas, e como testar tudo isso? Seria bastante complicado eu ter que comprar algo de mim mesmo e pagar para poder testar o retorno automático do PagSeguro e o funcionamento do meu sistema, não?
Neste ponto, devo ressaltar que considero um erro grande do pessoal do PagSeguro não ter criado um “sandbox” para a realização de testes, como o PayPal disponibiliza por exemplo.
No entanto, o pessoal da Visie criou uma biblioteca em PHP para trabalhar com PagSeguro, bem como um servidor de testes, escrito em Python, para testar a integração com o sistema. O servidor de testes basicamente “imita” o PagSeguro, para que você possa testar a integração do sistema com seu site.
Vou guiá-lo neste post pelos passos necessários para utilizar o servidor no Mac.
Obtenha o servidor de testes
Para obter o servidor de testes, entre no Guia do Desenvolvedor PagSeguro da Visie, na página Ambiente de Testes. Baixe o pacote e descompacte-o em algum lugar no seu computador. Eu matenho ele numa pasta na minha pasta de projetos chamada “pagseguro_sandbox”.
Configure o ambiente
Embora o servidor de testes já acompanhe um ótimo manual de configuração, vou guiá-lo pelos passos de configuração aqui, caso tenha ficado alguma dúvida.
Dentro da pasta do servidor de testes, há uma outra pasta chamada “pagseguroMockup”, abra o arquivo “settings.py” que se encontra dentro desta pasta, e troque o valor da variável “retornourl” para a sua URL de retorno automático local. Observe:

O próximo passo será uma correção que precisamos fazer no script “pagseguro.py”, dentro desta mesma pasta, exatamente na linha 63. Troque isto:
'Referencia': ''.join(data['ref_transacao']), #'ref_transacao',
Por isto:
'Referencia': 'ref_transacao',
Isto é apenas um hack para evitar erros no servidor depois. Tive que fazer isto para que ele funcione direito por aqui, não tenho a mínima idéia do motivo, mas simplesmente funciona.
Gere uma chave SSL para o servidor de testes
Este passo é um pouco confuso, mas nada difícil. Como o servidor de testes do PagSeguro roda na porta 443, de conexões seguras, através do protocolo HTTPS, precisamos gerar uma chave SSL para ele, claro que será uma chave “dummy”, mas é necessário. Para isto, entre na pasta “PagSeguroTestsServer” no terminal, e rode o comando:
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
Este comando irá gerar um arquivo “server.pem”, que é necessário para o servidor rodar.
Aponte o endereço do PagSeguro para o servidor de testes
Agora, para fazer com que o seu sistema que usa PagSeguro “pense” que o servidor de testes é o PagSeguro, você precisa editar o arquivo /etc/hosts, criando um apontamento para que o endereço “pagseguro.uol.com.br” aponte para o servidor local.
Isto deve ser feito editando-se o arquivo /etc/hosts. Assim:

Acrescente isto no arquivo:

Pronto! Agora vamos rodar o servidor de testes. Para isto, estando na pasta do servidor, rode o seguinte comando:
sudo python ./PagSeguroServer.py
Para testar se o servidor está funcionando, podemos tentar acessar a url no navegador: https://pagseguro.uol.com.br
Seu navegador provavelmente irá alertar sobre o certificado SSL ser inválido, mas não se preocupe, afinal trata-se do nosso servidor de testes local. Se você receber um retorno “Why GETting?” quando acessar a URL, então está tudo funcionando perfeitamente.
Outra coisa que recomendo que você faça é pular a etapa de verificação dos dados com o PagSeguro, pois como nosso servidor de testes não é o PagSeguro, os dados podem não validar corretamente e a transação não ocorrer corretamente.
Agora basta testar sua aplicação PagSeguro. Lembre-se que, enquanto estiver com a linha do /etc/hosts apontando o server local para o pagseguro, você não irá conseguir acessar o servidor, portanto após fazer os testes, comente ou remova a linha.
Só para você ter uma idéia de como o servidor de testes se comporta, observe o que ocorre ao realizar uma compra com o servidor de testes:

Espero que o artigo tenha sido útil para todos que estão começando a utilizar o PagSeguro para realizar pagamentos on-line. Caso você tenha alguma dúvida ou sugestão, não deixe de comentar. Vale lembrar que também existe uma forma de testar o PagSeguro no Windows, com .NET, dê uma lida aqui.
Abraços e até a próxima!

Utilizando o servidor de testes do PagSeguro no Mac…
Utilizando o servidor de testes do PagSeguro no Mac…
Testei aqui e eu recebo um Unknown data quando eu uso meu botao de comprar gerado no pagseguro.
O que não foi mencionado é que o carrinho atual, (gambiarra pura pra mim) está com uma verificação da URL. A URL validada lá é a ’security/webpagamentos/webpagto.aspx’ e não a ‘checkout/checkout.jhtml’ como o PagSeguro mostra no manual. Só alterar a URL ou a validação no Python e você não terá o “Unknow Data”
Cara simplesmente show….
parabéns…
Excelente dica, tudo funcionando perfeitamente! Vou fazer alguns teste e qualquer problema volto a comentar!
Com relação ao
[quote]
O próximo passo será uma correção que precisamos fazer no script “pagseguro.py”, dentro desta mesma pasta, exatamente na linha 63. Troque isto:
‘Referencia’: ”.join(data['ref_transacao']), #’ref_transacao’,
Por isto:
‘Referencia’: ‘ref_transacao’,
[/quote]
se você alterar por data['ref_transacao'], vai poder ver o dado que você vai usar no ref_transacao, para, por exemplo, poder ligar um ID de transação com o cliente no seu sistema - vale lembrar que os dados são assíncronos e não tem como manter a sessão entre eles.
Aqui esta dando um erro estranho.
Assim: [dir_root]/PagSeguroTestsServer/pagseguroMockup/pagseguro.sy:2: DeprecationWarning: the md5 modulo is deprecated; use hashlid instead
import random,md5
Será que é um problema com o modulo md5? estranho.
Já tentou importar hashlid em vez de md5?
Que resposta rápida…. é isso resolveu, o erro acima parou, mas o processar uma compra pelo botão pagseguro aparece a mensagem “Unknown data”.
Quando jogo ” https://pagseguro.uol.com.br/ ” aparece “Why GETting?” (Isso é normal)
Mas quando processo uma compra e o botão abri a aba e carrega o endereço ” https://pagseguro.uol.com.br/checkout/checkout.jhtml” da o erro ” Unknown data” dados desconhecido.
Tenho quase certeza que estou fazendo algo errado, mas vou descorir “nada comigo funciona de primeira mesmo”
Você alterou aquela linha no pagseguro.py como sugerido?
É, vou alterado.
quando executo “sudo python ./PagSeguroServer.py” ele não da nenhuma mensagem no terminal. o curso fica parado tipo “escutando a sistema”.
Mas quando clico no botão de pagamento e redireciona para página “https://pagseguro.uol.com.br/checkout/checkout.jhtml” aparece a mensagem no terminal : ” pagseguro.uol.com.br - - [data-hora] “POST checkout/checkout.jhtml” HTTP/1.1 200 ”
Os aquivos estão assim:
- /var/www/HTTPSServer.py
- /var/www/PagSeguroServer.py
d /var/www/pagseguroMockup
- /var/www/retorno.php
Estou achando que é algum erro na estrutura dos diretório.
Opa, tenho uma boa notícia, Funcionou danado.
Não sei exatamente o que foi mas iniciei a instalação do zero implantando todas as dicas + a do “Carlos Gustavo acima” e menos a de importar hashlid.
Obrigado….
[...] os usuários de Mac, Guilherme Rambo escreveu um ótimo artigo ensinando a instalar, configurar e usar o servidor de testes. E, graças a Teoni Valois também [...]
Não sei se todos repararam mas tem dois lugares que constam a verificação de url e nos dois estão errados.
Pode ser isso o motivo de continuar retornando unknow data.
dá uma olhada !
nao entendi o comando para abrir o hosts.. eh “mate /etc/hosts”?
É, mas pra isso você precisa ter o TextMate. Se você não usa o TextMate use outro editor (emacs, vi, gedit…)
Eu tenho textmate mas quando eu digito aparece “-bash: mate: command not found” o q devo fazer?
Meu mac eh o 10.4.11.. preciso de conseguir isso urgente..
O comando “mate” só vai funcionar se você tiver comprado e instalado o TextMate, ele não é um software padrão do mac. Como alternativa você pode usar o comando “sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /etc/hosts” (sem aspas) e editar no editor padrão do Mac
muito obrigado inside ! Funcionou exatamente como você descreveu. Salvou uma vida. hehehehe
Ok, agora o erro q tah dando eh o seguinte:
from HTTPSServer import *
File “/Users/macmini/Desktop/TrabalhosMacMini/PagSeguroTestsServer/HTTPSServer.py”, line 7, in ?
from OpenSSL import SSL
ImportError: No module named OpenSSL.
o localhost do meu MAMP esta em TrabalhosMacMini.. ou isso nao tem nada a ver?
O módulo openssl não deve estar instalado, busque assistência em algum fórum sobre como instalá-lo
Valeu cara, ajudou bastante. Voce conseguiu essas infos do servidor onde?
Estou com esse problema:
Traceback (most recent call last):
File “./PagSeguroServer.py”, line 9, in
run(PagSeguroHandler,SecureHTTPServer)
File “/Users/nomeusuario/Documents/Pag Seguro/pagseguro_testserver_v0.21/PagSeguroTestsServer/HTTPSServer.py”, line 59, in run
httpd = ServerClass(server_address, HandlerClass, fpem)
File “/Users/nomeusuario/Documents/Pag Seguro/pagseguro_testserver_v0.21/PagSeguroTestsServer/HTTPSServer.py”, line 14, in __init__
ctx.use_privatekey_file (fpem)
OpenSSL.SSL.Error: [('system library', 'fopen', 'No such file or directory'), ('BIO routines', 'FILE_CTRL', 'system lib'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'system lib')]