Retorno Automático de Dados do PagSeguro em PHP/MySQL (com produtos) – Versão 2.0

Enfim, como prometido a nova versão do Retorno de dados do Pagseguro. As maiores novidades ficaram por conta da utilização a nova URL do PagSeguro para validação e a captura completa dos produtos.

Agora ficou mais fácil a instalação do mesmo, basta baixar o script abaixo, descompactar e editar  o PagSeguroRetornoConfig.php inserindo os dados solicitados. Depois basta configurar o banco de dados Mysql e utilizar o arquivo SQL disponível para criar as tabelas.

Download do script de Retorno de Dados Automatico do Pagseguro 2.0

 

Você deve configurar a sua conta no PagSeguro para ativar o Retorno Automático de dados, para isso, entre no seu PagSeguro, nas opcao Preferencias > Retorno Automatico de Dados. Basta ativar a URL de retorno e colocar o endereço completo da URL do arquivo. Neste mesmo local é onde você vai gerar o seu Token, solicitada no arquivo de configurações.

Feito isso, o seu Retorno já esta funcional.

Para testar seu script não é preciso fazer um pagamento, basta abrir o arquivo TestarCompra.php colocar o seu e-mail e enviar para o seu FTP. Feito isso, é so acessar o arquivo, gerar uma compra aleatoria e escolher BOLETO BANCARIO para pagamento. Depois de confirmar a compra por boleto e aguardar o tempo solicitado, as suas tabelas já terão os dados da compra, bem como os produtos gerados.

Ps: Se você não é programador, não faça perguntas, peça um orçamento atraves do contato.

É isso ae! La pergunta?

224 comments

  1. Olá Diogo!
    Muito bom seu script! Parabéns pela iniciativa.
    Me surgiu uma dúvida: Ao iniciar uma compra e finalizar o pedido junto ao pagseguro, o script grava perfeitamente no banco, mas quando o pagamento é efetivado, o pagseguro envia informações atualizada (status de pagamento) ao script de retorno e o mesmo grana novamente no banco?

    Não sei se fui claro, mas se não entendeu tentarei ser mais claro.

    Continue nessa labuta com os códigos opensource….

  2. Funciona para receber notificações na alteração de transações para poder alterar o status de pagamento?

  3. Havia ativado “Redirecionamento com o código da transação” no pagseguro, estava inconformado em não funcionar comigo rsrs.

    Abs

  4. Não sou programador, nao entendi quase nada do seu script, mas parabéns, pq fui no site do pagseguro e lá nao entendi nada mesmo!
    Sou pobre, tive que fazer um download do clone de compras coletivas e agora estou tentando colocar a integracao com esse retorno. Já ativei tudo, gerei o token, mas ainda nao deu certo. Peguei teu script agora, vou tentar estudá-lo.
    MAs…
    Quanto vc cobraria para colocar o codigo adaptado no meu site? Já tem algumas paginas (order/pagseguro/return.php, notify.php, pay.php, …). Como o clone é de março, deve ter mudado algumas coisas.
    Obs e obrigado

  5. Diogo, belo script e raro de se encontrar neh?! axo que isso que te motivou a faze-lo e publica-lo hahaha.

    Agora nao sei se e culpa da area de testes do .net ou o Script eh mesmo assim,
    Mas o Script esta dando INSERT em todas as informacoes… ele seria para dar UPDATE confome a TransacaoID?

    Abracos ai e parabens denovo.

  6. JVogell, faz bem. Este script é para PROGRAMADORES. Um leigo pode até usar, mas certamente não estará seguro da implementação e do funcionamento. Não recomendo. Já realizo muitas consultorias na implantação do mesmo. Te enviarei um e-mail com maiores informações.

  7. DacianoBenini, você pode alterar para um INSERT/UPDATE se quiser, mas eu coloquei intencionalmente o INSERT por questões de registro, para saber passo a passo todas as interações e horarios da transação.

  8. Já fiz de tudo e o mesmo não grava no banco.
    Coloquei certo a url de retorno, redirecionamento, a conexão com o banco, token.
    Poderia ser algum problema na conta do PS ?

  9. Meu caro, pode me dar uma simples ajuda?
    Nao estou conseguindo retornar o valor “VERIFICADO” pelo POST.
    Aí eu copiei a lista do postfields para uma tabela , montei a url completa (com os parametros) e enviei por GET mesmo, e retornou “verificado” certinho. Infelizmente o $result retorna nulo! Isso ta me deixando perplexo… Tentei imprimir os fields com o curl_getinfo mas parece que nao existe essa possibilidade.
    Tem alguma ideia em que estou vacilando?
    Abc
    Carlos

  10. Diogo, estava tentando fazer esta alteração com o update e nunca funcionava. Sempre adicionava uma nova compra na tabela. A solucao foi remover os “-” do ID da transação com esta função.

    $TID = ereg_replace(‘-‘, ”, $TransacaoID);

    E salvar na database como TransacaoID,$TID…

  11. Ótimo código, funciona certinho. Única coisa que adicionei foi este switch, pra controlar as tabelas do meu sistema sem alterar as tabelas do seu código.

    switch($StatusTransacao){
    case ‘Completo’:
    {
    break;
    }

    case ‘Aguardando Pagto’:
    {
    break;
    }

    case ‘Aprovado’:
    {
    break;
    }

    case ‘Em Análise’:
    {
    break;
    }

    case ‘Cancelado’:
    {
    break;
    }
    }

  12. Ele retorna NULL apenas no redirecionamento. Ele não da POST junto com o usuário, e sim em background, ok? Na hora que ele te envia (redirecionando) ele apenas segue o link informado nas configurações.

  13. Coimbra, beleza! É uma boa ideia para o filtro sim. Mas não coloquei para deixar em aberto para cada programador realizar as ações da forma que desejar. Mas ta ae… #fikadica

  14. excelente artigo cara, mas é o seguinte, quando gera o boleto a tabela recebe todas as informações direitinho, mas quando o status do pagSeguro é alterado a tabela não recebe nenhuma informação..

    o que será?.

  15. Dourado,
    foi erro meu ou não tem o campo valor do produto no banco de dados? (só taxa e frete)

  16. Olá, sou programador júnior em php, nossa Diogo me salvou ! No trabalho estava me matando pra conseguir retornar o POST e encontrei seu tutorial. VLW mesmo e que continue assim.

    Agora uma coisa.

    Eu estou precisando em dar o UPDATE na tabela quando o STATUS alterar.

    Eu usei isso:

    if ($StatusTransacao == “Aguardando Pagto”){
    // Gravando Dados
    mysql_query(“INSERT into PagSeguroTransacoes SET
    VendedorEmail=’$VendedorEmail’,
    TransacaoID=’$TransacaoID’,
    Referencia=’$Referencia’,
    Extras=’$Extras’,
    TipoFrete=’$TipoFrete’,
    ValorFrete=’$ValorFrete’,
    DataTransacao=’$DataTransacao’,
    Anotacao=’$Anotacao’,
    TipoPagamento=’$TipoPagamento’,
    StatusTransacao=’$StatusTransacao’,
    CliNome=’$CliNome’,
    CliEmail=’$CliEmail’,
    CliEndereco=’$CliEndereco’,
    CliNumero=’$CliNumero’,
    CliComplemento=’$CliComplemento’,
    CliBairro=’$CliBairro’,
    CliCidade=’$CliCidade’,
    CliEstado=’$CliEstado’,
    CliCEP=’$CliCEP’,
    CliTelefone=’$CliTelefone’,
    NumItens=’$NumItens’,
    Data=now();”);

    // Recebendo e gravando produtos
    $Processo = mysql_query(“SELECT VendedorEmail FROM PagSeguroProdutos WHERE VendedorEmail=’$VendedorEmail’ AND TransacaoID=’$TransacaoID'”);
    if (mysql_num_rows($Processo)==0) {
    for($i=1;$i<=$NumItens;$i++) {

    $ProdID = $_POST["ProdID_{$i}"];
    $ProdDescricao = $_POST["ProdDescricao_{$i}"];
    $ProdValor = MoedaBR($_POST["ProdValor_{$i}"]);
    $ProdQuantidade = $_POST["ProdQuantidade_{$i}"];
    $ProdFrete = MoedaBR($_POST["ProdFrete_{$i}"]);

    mysql_query("INSERT into PagSeguroProdutos SET
    VendedorEmail='$VendedorEmail',
    TransacaoID='$TransacaoID',
    Ordem='$i',
    ProdID='$ProdID',
    ProdDescricao='$ProdDescricao',
    ProdValor='$ProdValor',
    ProdQuantidade='$ProdQuantidade',
    ProdFrete='$ProdFrete'");
    }//for
    }//if

    }else {
    mysql_query("UPDATE `PagSeguroTransacoes` SET
    StatusTransacao = '$StatusTransacao' where `TransacaoID`= '$TransacaoID';");
    }//else

    Verifiquei se o Status é diferente de Aguardando Pgto., pois o primeiro post é sempre Aguardando Pgto. então conclui que o POST diferente de Aguardando Pgto deve ser alterado de acordo com a TransacaoID.

    Se estiver errado, por favor alguém me avisa. Meu email é : webicefire@hotmail.com < MSN tbm

    Agradeço e abraços para todos.

  17. Wesley, esta certo, mas desse jeito ele não ira guardar todo o historico da transação, apenas o ultimo, se funcionar para você, beleza. Eu recomendo voce utilizar um INSERT com DUPLICATE KEY UPDATE, em vez de usar o IF.

  18. Preciso de ajuda para instalar o seu retorno automatico no meu site.
    quanto vc cobraria, entre em contato.
    grato.

  19. Testei aqui, ta funcionando mais quando os status do pagamento atualiza la no pagseguro, no DATABASE nao atualiza , fica somente no Aguardar Pgt.

  20. Ola o banco de dados tem que ser separado ou junto com o da loja,
    faço o upload para a raiz da loja com o nome que esta pagseguro_retorno2.0
    ou tem que editar e depois precisa configurá-lo na admin.
    Desculpe tantas perguntas.
    Grato.

  21. Ótimo tutorial, me ajudou muito, mas percebi uma coisa que pode ser importante!!

    O campo TransacaoID das 2 tabelas (pagseguroprodutos e pagsegurotransacoes) está como varchar 32.
    Só que o ID da Transacao suporta até 36 caracteres ! Por isso ninguém estava conseguindo fazer update caso a transacao já existisse. Eu alterei o campo para varChar 38 e consegui dar Update.

    Isso é muito importante pq se alguém tivesse querendo comparar os IDs da transacao do PagSeguro com os IDs da transacao que foram inseridos no banco, não iriam conseguir.

    Tentem aí galera. Valew

  22. Então, eu consegui mesmo com os IF. Depois eu busquei cada status do POST que vinha do pagseguro e ia tratando e inserindo na base e alterando de acordo com os POSTs.

    Quem quiser o pagseguro com alteração e tudo pode contar comigo.

    e Diogo .. meu vc é o cara …

  23. olá, esta inserindo normalmente os dados nas tabelas. agora gostaria de saber se quando o boleto for pago se vai haver alguma alteração (insert ou update ) na tabela. para eu saber se foi pago o nao aguele produto. parabens pelo script.

  24. Cara, parabéns pelo script. Funcionou de cara.

    Notei que o script apenas dá INSERT no banco de dados, e entendi que a cada mudança de status, eu terei um registro de data/hora que ocorreu. Muito bom!!

    Porém, o script está duplicando os produtos na tabela pagseguroprodutos. Se o status muda, ele insere na tabela de transacoes o novo registro com a atualização de data, hora e status, e também insere novamente os produtos. o que será que pode estar acontecendo?

  25. Claudio, se voce vai fazer uma integração, é bom ser junto com o da loja, ok? O upload fica a seu criterio, na raiz, pasta, etc. É bom editar antes de enviar para o ar, como escrito no post.

  26. Gabriel, valeu! Que bom que funcionou perfeitamente.

    No caso dos produtos, eu acho que você se confundiu. Os produtos se repetem, mas são de transações diferentes. Confira! ;)

  27. Em relação a quantidade de caracteres, isso que vc falou é verdade. Na própria documentação deles, eles dizem que esse campo é de 32 caracteres e fazendo um teste com o servidor deles de verdade, realmente é isso que acontece. Ou seja, não deu problemas.

    Porém, eu tava utilizando o servidor de teste do Teoni Valois, que criou um em .Net para Windows. No servidor dele, na hora de gerar uma key para a TransacaoID, eu acho q ele tava gerando também os hífens, que tavam contando como caracteres também. Por isso tava sempre ultrapassando o limite.

  28. Olá, Belo tutorial, foi o mais perto que cheguei, mas há um problema: depois de tudo feito, o boleto gerado ele retorna ao arquivo e redireciona para a página de de teste que você colocou. Até aí tudo bem, mas não grava nada na tabela, a conexão e as permissões estão ok. Se puder me dar um luz agradeceria.

    Parabéns pelo belo trabalho.

  29. Fala Diogo, beleza?
    Vê se consegue me ajudar. O script roda tudo certinho, retorna pra URL e tudo mais…Não dá nenhum erro…

    Porém não popula o banco…Sabe oque pode ser?

    Vlw.

  30. Diego, primeiramente quero agradecer o script.

    Estou com um problema que preciso de uma ajuda.

    Adicionei apenas uma query para liberar PagSeguroRetorno.php // Liberar
    http://pastebin.com/rcQqrzx5

    O problema é o seguinte, oque eu adicionei ele executa, porem a parte onde ele deveria salvar a Transação e adicionar os Produtos não é executado.

    Isso talvez tenha ocorrido pois antigamente utilizava o xampp (Windows) e agora estou utilizando Apache2+PHP5+Mysql ?

    Já tentei fazer varios testes sem resultado.

    Obrigado

  31. [Sun Jan 08 23:58:55 2012]PHP Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /var/www/pag/PagSeguroRetorno.php on line 87

  32. Dourado, primeiramente parabéns pelo script.

    Fiz os testes e os dados salvam no banco de dados, entretanto ele não está redirecionando para a página CompraConcluida.html.

    Assim que conclui o pagamento, a página mostrada continua sendo a do PagSeguro informando que a compra foi concluida e não redireciona a página personalizada do meu site.

    Poderia me ajudar?o script está instalado no endereço
    site: http://www.redewebshop.com.br/pagseguro_retorno/

  33. Dourado, depois de ler os posts da galera percebi que são DUAS COISAS A SEREM FEITAS:
    URL de Retorno Automático de Dados e URL da Página de Redirecionamento.

    Tinha configurado somente a URL DE RETORNO AUTOMÁTICO e não estava voltando para meu site, após concluir a compra.

    Soltei fogos aqui até perceber mais um problema:

    Na hora de pupular no bd, ele tá inserindo caracteres com acentos e cedilhas vindos do TestarCompra.php em caracteres especiais. Por exemplo: O endereço do cliente no formulário é Rua José Antônio. No bd insere Josï Ant£ino.

    No cabeçalho do arquivo de retorno tá codificado assim:

    header(‘Content-Type: text/html; charset=ISO-8859-1’);

    Quebra esta pra mim amigo! Obrigado

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.