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')]
Estou com o mesmo problema, ajuda alguém?
Será a versão do Python?
Exception happened during processing of request from (’127.0.0.1′, 50224)
Traceback (most recent call last):
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/SocketServer.py”, line 222, in handle_request
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/SocketServer.py”, line 241, in process_request
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/SocketServer.py”, line 254, in finish_request
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/SocketServer.py”, line 522, in __init__
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/BaseHTTPServer.py”, line 316, in handle
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/BaseHTTPServer.py”, line 299, in handle_one_request
File “/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py”, line 346, in readline
Error: [('SSL routines', 'SSL3_GET_CLIENT_HELLO', 'no shared cipher')]
Laecio, você criou o certificado na pasta do servidor?
Olá, gostaria de saber se este sistema de teste, da pra faze o seguinte testar por exemplo, o cliente fez um compra e o status da compra é aguardando pagamento, logo apos o pagamento o pagseguro manda um novo post com a confirmaçao, tem como fazer este teste neste sistema e como fazer, e tipo se eu gravar primeiro uma compra como arguardando aprovaçao e depois manda um post com os mesmos dados so mudando o estado estaria certo? é assim que o pagseguro faz, manda os mesmos dados só mudando o status?
Para os iniciantes, experimente usar https:// no início do endereço. Deverá funcionar.
Aqui, estava aparecendo vários erros no Terminal, como
Error: [(‘SSL routines’, ‘SSL3_READ_BYTES’, ‘tlsv1 alert unknown ca’)
mas aí foi só usar o https:// em vez de http://. Até porque http://127.0.0.1 vai na porta 80, mas o SSL está na porta 443. Usando https:// o navegador vai na porta 443 automaticamente.
Esclareci um pouco mais para os iniciantes.
Se você quer receber os dados corretos (número de transação, email etc), não retire a seguinte linha:
‘Referencia’: ”.join(data['ref_transacao']), #’ref_transacao’,
Isto não funcionou para Guilherme porque ref_transacao não existia. Veja na página /checkout/checkout.jhtml, para onde você envia seus dados, e verá que há vários valores. No meu caso há cliente_email, email_cobranca, ref_transacao. Neste caso, eu posso usar estas 3 variáveis.
No caso do Guilherme, ele não estava enviando no formulário dele nenhum input chamado ref_transacao, portanto estava dando erro. Veja quais campos você tem e escreva os dados que você precisa que retorne, usando o ”.join(data[]) conforme necessário.
PelaMorDeDeus!!!
O PagSeguro é ótimo, mas a falta de uma documentação EFICAZ é fogo.
Alguém aí poderia colocar um passo-a-passo para efetuar as devidas correções no servidor para MAC?
Eu fiz de tudo aqui e continuo recebendo o Unknow Data, mesmo tendo seguido todos os passos e todas as dicas dos outros usuarios, meu phyton está correto e meu macOS é o 10.5 Snow Leopard. Não importa o que eu faça, sempre dá o Unkonw Data, e quando tento fechar e reiniciar o server, o cursor no terminal fica em modo “escuta” e não retorna nada, nem o pedido de senha.
É fogo, bem que alguém poderia postar um server de testes online (sandbox) para salvar a vida da galera né.
No mais, parabéns pelo POST.
Abraços
Realmente o PagSeguro precisava ter um servidor sandbox, todos os outros gateways de pagamento têm…
[...] A segunda é para implementar a mesma solução acima no MAC, tutorial do Guilherme Rambo. [...]
Estou tendo problemas na hora de enviar os dados via method POST para a maldita URL:
“https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml”.
Estou submetendo via PHP usando curl mas o retorno que recebe é sempre o infame Unknown Data. Já alterei aonde percebi que deveria alterar mas creio que estou esquecendo em algum ponto.
Alguém mais passou por este problema?
Abraços
Consegui. O problema era o NPI.jhtml que estava em maiusculo e no server python estava checando em minusculo.
só alegrias.
Agora foi
Abraços a todos
Depois de quebrar muito a cabeça e só receber Unknow Data vi que o erro esta nos pequenos detalhes de falta de atenção!
Como o Carlos Gustavo citou la em cima, o arquivo pagseguro.py vem validando a url errada tb.
Bata trocar ‘/security/webpagamentos/webpagto.aspx’ para ‘/checkout/checkout.jhtml’ na linha 50. Alem do já explicado no tutorial acima!!
Valeu pelo tuto!
O links http://pagseguro.visie.com.br/ambiente-para-testes-locais/ está quebrado, não encontro o ambiente de testes em Python p/ download.
Se alguém achar, posta aqui.