Screencaster Transmitindo conhecimento


Utilizando o servidor de testes do PagSeguro no Mac

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:

Settings

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:

/etc/hosts

Acrescente isto no arquivo:

Apontando pagseguro para o server de teste

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:

Usando 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!


24 pessoas comentaram

  1. Utilizando o servidor de testes do PagSeguro no Mac…

    Utilizando o servidor de testes do PagSeguro no Mac…

  2. Felipe Salum says:

    Testei aqui e eu recebo um Unknown data quando eu uso meu botao de comprar gerado no pagseguro.

  3. 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”

  4. Cara simplesmente show….
    parabéns…

  5. Excelente dica, tudo funcionando perfeitamente! Vou fazer alguns teste e qualquer problema volto a comentar!

  6. 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.

  7. 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.

  8. 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”

    • inside says:

      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.

        • Bernardo says:

          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….

  9. [...] 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 [...]

  10. 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 !

  11. Edie Tavares says:

    nao entendi o comando para abrir o hosts.. eh “mate /etc/hosts”?

    • inside says:

      É, mas pra isso você precisa ter o TextMate. Se você não usa o TextMate use outro editor (emacs, vi, gedit…)

      • Edie Tavares says:

        Eu tenho textmate mas quando eu digito aparece “-bash: mate: command not found” o q devo fazer?

      • Edie Tavares says:

        Meu mac eh o 10.4.11.. preciso de conseguir isso urgente.. :(

        • inside says:

          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 ;)

  12. Edie Tavares says:

    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?

  13. Valeu cara, ajudou bastante. Voce conseguiu essas infos do servidor onde?

  14. Laecio says:

    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')]

Agora é a sua vez: