Você deve conhecer o PagSeguro, já venho falando dele por aqui há um tepinho. Existe uma biblioteca de retorno automático para PHP gerada pela Visie, só que o pessoal geralmente tem dúvidas sobre verificar o que o PaSeguro ou quando o PagSeguro irá mandar os dados para validação.
O código básico de implementação é este:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Aqui vai seu Token define('TOKEN','0123456789abcdef0123456789abcdef'); // Incluindo o arquivo da biblioteca include('retorno.php'); // Função que captura os dados do retorno function retorno_automatico ( $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade, $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) { // AQUI VOCÊ TEM OS DADOS RECEBIDOS DO PAGSEGURO, JÁ VERIFICADOS. // CONFIRA A LISTA DE PRODUTOS E O VALOR COM O QUE VOCÊ TEM NO // BANCO DE DADOS E, SE ESTIVER TUDO CERTO, ATUALIZE O STATUS // DO PEDIDO. } // A partir daqui, é só HTML: |
Como você pode ver, você escreve uma função básica onde você fará tudo o que você precisa fazer no seu banco de dados, como atualizar a quantidade de produtos de uma loja, cancelar ou efetuar um pedido.
Normalmente o pessoal pergunta, como ver o que o PagSeguro está mandando, como fazer para escrever um código não vendo o que está vindo. Bem, você não vai ver nunca o que está acontecendo na tela do seu navegador. Para você ver o que está acontecendo, escreva em um arquivo de texto os dados que estão chegando no seu POST e também se ele foi validado ou não.
Vamos definir uma função de Log bem simples.
1 2 3 4 5 | function pgs_log($msg) { $msg = date('[d/m/Y H:i:s] ') . $msg . "\n\n---\n"; file_put_contents ('pagseguro.log', $msg); } |
Agora, vamos implementar o nosso log.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | function pgs_log($msg) { $msg = date('[d/m/Y H:i:s] ') . $msg . "\n\n---\n"; file_put_contents ('pagseguro.log', $msg); } if ($_POST) { pgs_log('Recebendo dados via POST, estes dados serão verificados pelo PagSeguro: '.print_r($_POST, true)); } // Aqui vai seu Token define('TOKEN','0123456789abcdef0123456789abcdef'); // Incluindo o arquivo da biblioteca include('retorno.php'); // Função que captura os dados do retorno function retorno_automatico ( $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade, $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) { $data = func_get_args(); pgs_log('Dados verificados com sucesso! Dados formatados no retorno: '.print_r($data, true)); // AQUI VOCÊ TEM OS DADOS RECEBIDOS DO PAGSEGURO, JÁ VERIFICADOS. // CONFIRA A LISTA DE PRODUTOS E O VALOR COM O QUE VOCÊ TEM NO // BANCO DE DADOS E, SE ESTIVER TUDO CERTO, ATUALIZE O STATUS // DO PEDIDO. } |
E voilà! Você verá no seu arquivo pagseguro.log o seguinte resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | [19/06/2009 16:53:08] Recebendo dados via POST, estes dados serão verificados pelo PagSeguro: Array
(
[TransacaoID] => e9b6ef2f4b0f873e6f2a5831d39d803b
[TipoFrete] => FR
[ValorFrete] => 0,00
[Anotacao] => Pagamento gerado pelo ambiente de testes
[DataTransacao] => 19/06/2009
[VendedorEmail] => email_cobranca@teste.gov.br
[Referencia] => AFB-580
[CliNome] => nome
[CliEmail] => email@cliente.com.br
[CliEndereco] => Rua dos Bobos
[CliNumero] => 0
[CliComplemento] =>
[CliBairro] => Paytown
[CliCidade] => Payland
[CliEstado] => AC
[CliCEP] => 01234567
[CliTelefone] => 99 55555555
[NumItens] => 4
[ProdID_1] => A27
[ProdDescricao_1] => Mapa da cidade
[ProdQuantidade_1] => 1
[ProdFrete_1] => 0,00
[ProdExtras_1] => 0,00
[ProdValor_1] => 27,90
[ProdID_2] => B720
[ProdDescricao_2] => Bala Freegells
[ProdQuantidade_2] => 12
[ProdFrete_2] => 0,00
[ProdExtras_2] => 0,00
[ProdValor_2] => 0,80
[ProdID_3] => A90
[ProdDescricao_3] => Caderno decorado
[ProdQuantidade_3] => 5
[ProdFrete_3] => 0,00
[ProdExtras_3] => 0,00
[ProdValor_3] => 16,30
[ProdID_4] => C230
[ProdDescricao_4] => Tomada simples
[ProdQuantidade_4] => 16
[ProdFrete_4] => 0,00
[ProdExtras_4] => 0,00
[ProdValor_4] => 1,70
[TipoPagamento] => Pagamento
[StatusTransacao] => Completo
)
---
[19/06/2009 16:53:08] Dados verificados com sucesso! Dados formatados no retorno: Array
(
[VendedorEmail] => email_cobranca@teste.gov.br
[TransacaoID] => e9b6ef2f4b0f873e6f2a5831d39d803b
[Referencia] => AFB-580
[TipoFrete] => FR
[ValorFrete] => 0.00
[Anotacao] => Pagamento gerado pelo ambiente de testes
[DataTransacao] => 19/06/2009
[TipoPagamento] => Pagamento
[StatusTransacao] => Completo
[CliNome] => nome
[CliEmail] => email@cliente.com.br
[CliEndereco] => Rua dos Bobos
[CliNumero] => 0
[CliComplemento] =>
[CliBairro] => Paytown
[CliCidade] => Payland
[CliEstado] => AC
[CliCEP] => 01234567
[CliTelefone] => 99 55555555
[produtos] => Array
(
[0] => Array
(
[ProdID] => A27
[ProdDescricao] => Mapa da cidade
[ProdValor] => 27.9
[ProdQuantidade] => 1
[ProdFrete] => 0
[ProdExtras] => 0
)
[1] => Array
(
[ProdID] => B720
[ProdDescricao] => Bala Freegells
[ProdValor] => 0.8
[ProdQuantidade] => 12
[ProdFrete] => 0
[ProdExtras] => 0
)
[2] => Array
(
[ProdID] => A90
[ProdDescricao] => Caderno decorado
[ProdValor] => 16.3
[ProdQuantidade] => 5
[ProdFrete] => 0
[ProdExtras] => 0
)
[3] => Array
(
[ProdID] => C230
[ProdDescricao] => Tomada simples
[ProdValor] => 1.7
[ProdQuantidade] => 16
[ProdFrete] => 0
[ProdExtras] => 0
)
)
[NumItens] => 4
)
--- |
E com isso você já consegue desenvolver sua aplicação normalmente. Fora que fica mais prático de entender o que está acontecendo no seu servidor.
Rapaz!
Preciso de uma ajuda sua ehehehe.
Eu estou tentando implantar esse bendito retorno automático, mas APENAS para atualizar a quantidade de produtos no estoque, ou seja, quando a pessoa comprar, automaticamente tirar 1 unidade do estoque (se for mais de 1 item, por ex. 1 guitarra, e 1 pedal, ele teria que retirar 1 unidade de cada item).
Vc já fez isso? Tem idéia de como fazer? Eu tô desesperado! ahahahah
Abraço e obrigado!
o meu simplesmente não grava nada!!!
Valew pela dica! Finalmente um exemplo que rodou blz!
Obrigado!
Olá, estou com uma dúvida, fiz um app para o orkut, porem, como eu faria para envia um id do usuário, ou um id da transação para que eu possa comparar posteriormente com o retorno automático ?
use o campos ref_transacao no formulário que você monta. Ele chegará no retorno automático no campo “Referencia”. Use ali um código único PARA CADA COMPRA pois o usuário pode fazer mais de uma compra, ou mesmo hackear sua aplicação enviando o mesmíssimo post para sua URL de retorno – não é difícil de saber qual é a URL e que dados ela recebe. Então, sempre valide os dados assim que eles chegarem na página de retorno automático.
Veja detalhes sobre todos os campos na documentação oficial: http://bit.ly/4ALpWK
Fala ai DGmike muito bacana o post facilito muito pra mim aqui vlw pelos artigos do Pag Seguro se de me add ai no msn abraço
O meu aqui tava sobrescrevendo o arquivo antigo dai adicionei a flag FILE_APPEND e parou de sobrescrever
Em primeiro lugar, obrigado por todas as dicas do Blog e pelos posts nos Foruns!
Bom fiz tudo conforme acima, mas o arquivo de log não está sendo criado, o que pode ser???
Usei um outro script postado por vc no Forum para criar o arquivo de log (tbm dei permissão 777) e neste o arquivo é criado, mas a únicamensagem que chega é:
‘Recebeu o post, verificando junto ao PagSeguro’
array (
)
———
Vc poderia me ajudar?
Abs
Ah, esqueci de informar que estou fazendo testes online (não consegui instalar o Servido Local) e fazendo solicitando pagamento via Boleto Bacánrio (mas sem pagá-los), será que é por isso que não recebo os dados dos Posts do PagSeguro no log?
Fico no aguardo!
Obrigado!
Abs