DGmike

DGmike

Calma! não entre em pânico! Amanhã (talvez) tem novo post…

Você está aqui: dgmike » Cotidiano » Dia-a-dia » [PagSeguro] Faça log do retorno automático

  • Home
  • Guia Rápido jQuery
  • Códigos prontos
    • PHP: Função __auloload()
    • Classe sqlsimples e sql – PHP
    • Bancos, bancos e mais bancos…
  • PagSeguro
  • Artigos
    • JavaScript (parte 1)
  • Quem é dgmike?

[PagSeguro] Faça log do retorno automático

Posted in Dia-a-dia, pagseguro, php by DGmike
Jun 19 2009
TrackBack Address.
Você pode obter mais informações na minha página dedicada ao PagSeguro

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

Tagged as: biblioteca, pagseguro, php, retorno automático
Comments
  • Neto:

    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!

    Reply July 24, 2009 at 10:07 am
  • vanguard:

    o meu simplesmente não grava nada!!!

    Reply February 11, 2010 at 11:39 am
  • Guilherme:

    Valew pela dica! Finalmente um exemplo que rodou blz! :) Obrigado! :)

    Reply April 21, 2010 at 11:36 am
  • André G.:

    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 ?

    Reply June 9, 2010 at 6:16 am
    • DGmike:

      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.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      
      <form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
        <input type="hidden" name="email_cobranca" value="suporte@lojamodelo.com.br" />
        <input type="hidden" name="tipo" value="CP" />
        <input type="hidden" name="moeda" value="BRL" />
       
        <!-- abaixo o campo de referencia que virá como "Referencia" no retorno automático -->
        <input type="hidden" name="ref_transacao" value="15" />
       
        <!-- e... continuando com o carrinho -->
        <input type="hidden" name="item_id_1" value="12345" />
        <input type="hidden" name="item_descr_1" value="Descrição do item a ser vendido" />
        <input type="hidden" name="item_quant_1" value="1" />
        <input type="hidden" name="item_valor_1" value="100" />
       
      </form>

      Veja detalhes sobre todos os campos na documentação oficial: http://bit.ly/4ALpWK

      Reply June 9, 2010 at 9:23 am
  • Alexandre Broggio:

    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

    Reply July 2, 2010 at 11:24 am
  • Alexandre Broggio:

    O meu aqui tava sobrescrevendo o arquivo antigo dai adicionei a flag FILE_APPEND e parou de sobrescrever

    1
    
    file_put_contents('pagseguro.log', $msg, FILE_APPEND);
    Reply July 2, 2010 at 12:42 pm
  • Anderson:

    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

    Reply July 4, 2010 at 10:47 pm
  • Anderson:

    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

    Reply July 4, 2010 at 11:00 pm
Leave a Comment
Click here to cancel reply.

Add Music To Your Comment

Clear All

Selected Songs (0): Allowed A Maximum Of 1

Categorias

  • Cotidiano  (132)
    • Amigos  (16)
    • Dia-a-dia  (33)
    • Diversão  (18)
    • Games  (1)
    • Não categorizado  (26)
  • Design  (15)
    • Ilustração  (6)
    • Imagem  (8)
    • Inspiração  (5)
    • Vetorial  (5)
  • eventos  (10)
    • PHP Conference  (3)
  • flash  (4)
  • Navegadores  (22)
    • Chrome  (6)
    • extensions  (11)
    • Firefox  (18)
    • Internet Explorer  (6)
  • pagseguro  (12)
  • Programação  (106)
    • CSS  (20)
    • html  (7)
    • javascript  (36)
      • jQuery  (7)
      • yui  (2)
    • php  (44)
      • icephp  (4)
    • plugin  (3)
    • python  (5)
    • sql  (9)
    • tableless  (18)
    • wordpress  (2)
    • xHTML  (23)
  • Tecnologia  (70)
    • Semântica  (16)
    • Tutorial  (25)
    • video  (8)
      • video-tutorial  (5)
    • Windows  (4)
  • Trabalho  (33)
    • cases  (4)

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Trabalho Tutorial twitter visie web wordpress

Arquivo

SlideSare

Últimos Posts

  • Vá com calma
  • Vírgula em html5 e css3
  • Youtube e HTML5, agora ficou mais fácil
  • Novo emprego!
  • Até mais e obrigado pela salada

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Trabalho Tutorial twitter visie web wordpress

Conteúdo

  • Artigos
    • JavaScript (parte 1)
  • Códigos prontos
    • Bancos, bancos e mais bancos…
    • Classe sqlsimples e sql – PHP
    • PHP: Função __auloload()
  • Guia Rápido jQuery
  • PagSeguro
  • Quem é dgmike?
PagSeguro Powered by WordPress | “Blend” from Spectacu.la WP Themes Club