API de Notificações PagSeguro Passo a Passo de forma prática e rápida em PHP

Olá Pessoal, hoje vamos ver passo a passo como integrar a API de Notificações do PagSeguro e obter as atualizações de pagamento de forma automática para qualquer aplicação web em PHP.

 

*Requisitos: Ter implementado a API de Pagamentos do PagSeguro.

Se você não sabe como integrar a API e Pagamentos acesse o post Como integrar a API do Pagseguro com Lightbox em PHP

 

Neste vídeo, a integração foi feita em modo Sandbox, pois precisamos fazer uma simulação de compra e pagamento, para então utilizarmos a API de Notificações.

Criamos também pequeno Banco de Dados com duas tabelas, para gravarmos os pedidos e posteriormente alterarmos seus status de acordo com as notificações enviadas pelo PagSeguro.

Utilizamos como base para integração da API de Notificações, a mesma estrutura que criamos no vídeo sobre a API de Pagamentos.

E a alteração mais importante na API de Pagamentos é passar também o parâmetro ‘reference’ contendo o ID do pedido, ou qualquer outro valor que sirva para cruzar as transações no PagSeguro com os pedidos do banco de dados.

 

Espero que goste do vídeo. Deixe seu like e compartilha com seus amigos, eles também podem estar precisando de ajuda com o Desenvolvimento Web 🙂

 

Depois, acessa o Facebook, http://www.facebook.com/alexrosa.pagee deixa seu like na Fanpage.

Tem bastante novidades por lá também.

Vou deixar, no final da página, logo depois do vídeo, os códigos que utilizamos e os links citados no vídeo.

Até mais e bons estudos.

 

[VÍDEO] API de Notificações PagSeguro Passo a Passo

 

API de Notificações PagSeguro – Documentação Completa:
https://dev.pagseguro.uol.com.br/documentacao/pagamento-online/notificacoes/api-de-notificacoes

Warstore, a loja do Blog
https://www.warstore.com.br

Vídeo Recomendado
Como integrar a API do Pagseguro com Lightbox em PHP

 

 

Index.html (Página do produto, com botão para compra)

 

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Pedido de teste</title>
 <link rel="stylesheet" type="text/css" href="style.css" />
 <script type="text/javascript" src="jquery.js"></script>
</head>

<body>
 
 <div>
 <h1>Produto de Teste</h1>
 <p>Valor: 299,00</p>
 <button onclick="enviaPagseguro();">Comprar</button><br />
 <img src="loading.gif" id="loading" style="visibility: hidden">
 </div>


 <form id="comprar" action="https://sandbox.pagseguro.uol.com.br/v2/checkout/payment.html" method="post" onsubmit="PagSeguroLightbox(this); return false;">
 <input type="hidden" name="code" id="code" value="" />
 </form>

 <script type="text/javascript" src="https://stc.sandbox.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.lightbox.js"></script>

 <script>
 function enviaPagseguro(codigo){
 
   $.post('salvarPedido.php','',function(idPedido){
 
     $('#loading').css("visibility","visible");
 
     $.post('pagseguro.php',{idPedido: idPedido},function(data){

       $('#code').val(data);
       $('#comprar').submit();

       $('#loading').css("visibility","hidden");
     })
   })
 }
 </script>
 
</body>
</html>


paseguro.php

 
<?php

$pedido = preg_replace('/[^[:alnum:]-]/','',$_POST["idPedido"]);

$data['token'] ='SEUTOKEN';
$data['email'] = 'SEUEMAIL';
$data['currency'] = 'BRL';
$data['itemId1'] = '1';
$data['itemQuantity1'] = '1';
$data['itemDescription1'] = 'Pedido de teste '.$pedido;
$data['itemAmount1'] = '299.00';
$data['reference'] = $pedido;

$data = http_build_query($data);

$url = 'https://ws.sandbox.pagseguro.uol.com.br/v2/checkout';

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$xml = curl_exec($curl);
curl_close($curl);

$xml = simplexml_load_string($xml);
echo $xml -> code;

?>

notificacao.php

 
<?php

$notificationCode = preg_replace('/[^[:alnum:]-]/','',$_POST["notificationCode"]);

$data['token'] ='SEUTOKEN';
$data['email'] = 'SEUEMAIL';

$data = http_build_query($data);

$url = 'https://ws.sandbox.pagseguro.uol.com.br/v3/transactions/notifications/'.$notificationCode.'?'.$data;

$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
$xml = curl_exec($curl);
curl_close($curl);

$xml = simplexml_load_string($xml);

$reference = $xml->reference;
$status = $xml->status;

if($reference && $status){
 include_once 'conecta.php';
 $conn = new conecta();

 $rs_pedido = $conn->consultarPedido($reference);

 if($rs_pedido){
 $conn->atualizaPedido($reference,$status);
 }
}

?>


conecta.php

 <?php

include_once 'config.php';

class conecta extends config{
 var $pdo;
 
 function __construct(){
 $this->pdo = new PDO('mysql:host='.$this->host.';dbname='.$this->db, $this->usuario, $this->senha); 
 }
 
 function salvarPedido(){
 $stmt = $this->pdo->prepare("INSERT INTO pedidos (descricao, status) VALUES ('Pedido de Teste', 1)");
 $stmt->bindValue(":codigo",$codigo); 
 $run = $stmt->execute();
 
 }
 
 function consultarPedido($reference){
 $stmt = $this->pdo->prepare("SELECT * FROM pedidos where id = :reference");
 $stmt->bindValue(":reference",$reference);
 $run = $stmt->execute();
 $rs = $stmt->fetch(PDO::FETCH_ASSOC);
 return $rs; 
 
 }

 function atualizaPedido($reference, $status){
 $stmt = $this->pdo->prepare("UPDATE pedidos SET status = :status where id = :reference");
 $stmt->bindValue(":reference",$reference);
 $stmt->bindValue(":status",$status);
 $run = $stmt->execute();
 
 }
 
function listarPedidos(){
 $stmt = $this->pdo->prepare("SELECT p.descricao, p.id, s.status FROM pedidos as p INNER JOIN status_pedido as s on p.status = s.id order by p.id");
 $run = $stmt->execute();
 $rs = $stmt->fetchAll(PDO::FETCH_ASSOC);
 return $rs; 
 
 }
 
 function consultarUltimoPedido(){
 $stmt = $this->pdo->prepare("SELECT * FROM pedidos order by id DESC");
 $run = $stmt->execute();
 $rs = $stmt->fetch(PDO::FETCH_ASSOC);
 return $rs; 
 
 }

}

?>

config.php

<?php
class config{
 var $host = '';
 var $usuario = '';
 var $senha = '';
 var $db = ''; 
}
?>

salvarpedido.php

<?php
 
 include_once 'conecta.php';
 $conn = new conecta();
 
 $conn->salvarPedido();

 $pedido = $conn->consultarUltimoPedido();
 
 echo $pedido["id"];

?>


pedidos.php

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pedidos</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript" src="jquery.js"></script>

</head>

<body>
 <h1>PEDIDOS</h1>
 
 <?php
 include_once 'conecta.php';
 $conn = new conecta();
 $pedidos = $conn->listarPedidos();

 foreach ($pedidos as $pedido){
 echo '<p><strong>'.$pedido["descricao"].' '.$pedido["id"].'</strong> <br> <strong>Status:</strong> '.$pedido["status"].'</p>';
 }
 ?> 
</body>
</html>

 

  1. Ramos de Souza Janones

    Olá Alex,

    Conheci agora seu trabalho. Excelente!

    Neste exemplo do PagSeguro, o retorno me dá estes erros:


    Warning:  simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Start tag expected, ‘<' not found in /home/storage/a/f7/10/vovocooks/public_html/temp/notificacao.php on line 21

    Warning:  simplexml_load_string() [function.simplexml-load-string]: Unauthorized in /home/storage/a/f7/10/vovocooks/public_html/temp/notificacao.php on line 21

    Warning:  simplexml_load_string() [function.simplexml-load-string]: ^ in /home/storage/a/f7/10/vovocooks/public_html/temp/notificacao.php on line 21

    E tá igual seu código:

    $curl = curl_init($url);

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_URL, $url);
    $xml = curl_exec($curl);
    curl_close($curl);

    $xml = simplexml_load_string($xml);

    O que pode ser?

  2. Boa noite alex, cara gostei tanto dos seus videos e foi tão esclarecedores que resolvi parabenizar você nesta msg! muito obrigado por compartilhar estes conhecimentos de maneira rápida e sagaz!

    Att

  3. wesley mendonça

    Bom dia Alex, meu querido estou vendo a sua integração com o pagSeguro e seguindo passo a passo, porém estou fazendo algo de errado, o retorno não está gravando no banco, sou mineiro e já viu né, todo mineiro é bem devagar, se fosse possível, você poderia me mandar por e-mail os scripts com o banco pra eu ver o que estou fazendo de errado? E se fosse mais possível gravar a data na tabela pedido quando o pedido for aceito? Sei que seu tempo deve muito corrido, mas se você puder me ajudar, eu ficaria muito grato. Obrigado

  4. Olá. Funciona também para assinatura recorrente, apenas mudando a url?
    Estou tentando fazer, mais meu retorno vem em branco ;(

  5. Guilherme Duarte

    Boa tarde,
    eu fiz tudo exatamente como você falou!
    No primeiro video deu certinho, o pagamento foi para o sandbox.
    Ele armazena no banco de dados de tudo mais, mas na hora de abrir o LigthBox ai ele fica rodando e não sai do lugar.
    você sabe o que pode ser?

  6. José Everton Figueiredo Gomes

    Boa noite Alex quando eu retiro o sandbox das urls não consigo starta a conexão fica so carregando o lightbox pode me ajudar?

  7. Faaaala Alex, tudo bom?

    Cara, assisti suas aulas no youtube e depois copiei os scripts dessa página, mas não deu certo comigo, com certeza fiz algo errado, a página pedidos puxa do banco certinho, mas ao clicar no botão comprar da página index.html, não exibe o Lightbox e não salva no banco, o que pode ser? Lembrando que coloquei na página pagseguro.php o meu token oficial e email e na página notificacao.php coloquei meu email e o token do sandbox.

  8. Excelente vídeo parabéns me ajudou muito. só me tira uma duvida, como eu faço para passar o valor dinamicamente para o pagseguro.php

    • O arquivo deve ser conhecido apenas pela sua integração Edson. O que você pode fazer é permitir o acesso apenas se a requisição tiver a presença do parâmetro via POST. Ou então configurar no seu host para permitir requisições vindas apenas do PagSeguro.

  9. Boa Noite, Alex! Comecei a pouco tempo a progrmamar em php e estou com uma dúvida.

    Como faço para percorrer os registros de uma tabela??

    abraços

  10. Meu irmão sugerido eu pode assim blog .
    Ꭼle costumava ѕеr inteiramente certo. Іsto publicar
    verdadeiramente fеz o meu dia. Você cann ‘ t imagine
    só ⅽomo tantߋ tempo tinha passado ρor isso informação !
    Obrigado !

  11. Oi Alex,

    parabéns pelo vídeo, muito esclarecedor!!

    Estou tentando aplicar aqui para a minha realidade, porém, estou tentando dificuldades, na realidade eu estou usando aquela outra forma de pagamento que é o Pagamento Recorrente ( Assinaturas ), não sei se para o uso de Assinaturas muda a URL, ou algum parâmetro, o POST do Pagseguro chega até o meu código, porém aquela outra consulta com o curl, não retorna nada, vc sabe se para esse pagamento recorrente muda alguma coisa? Obrigado

  12. Muito bom MESMO. Irmão obrigado por este vídeo. Estou tendo um problema, será que pode me ajudar? Está quase tudo funcionando, porém ele me dá um erro na linha 14 do conecta, que no stmt da função salvarPedido, diz que a variável codigo está indefinida vejo isso lá no sendbox, o numero de referencia é cadastrado na transação com o erro, vem assim: brbNoticebUndefinedvariablecodigoinbCxampphtdocsdaLuzconectaphpbonlineb14bbr26 .. no caso, deveria ter só esse 26 lá na referencia da transação, mas vem tudo isso… Consegue me ajudar?

  13. Olá a todos e muito obrigado Alex por esse tutorial. Fiz todo o procedimento conforme vídeo, porem não tive sucesso. Fiz varias pesquisa onde o Lightbox fica apenas carregando, varias pessoas estão com esse problema, creio que seja algum problema com pagseguro. Gostaria de saber se tinha a possibilidade de ultilizar o Lightbox e após a confirmação do pagamento com pagseguro ser notificado pelo mesmo php de notificação que você criou. Será se tinha alguma possibilidade criar um campo no banco de dado e arquiva no mesmo o “transaction_id” e após a confirmação do pagamento ser notificado pela pagseguro e trocar os status conforme o seu tutorial. Espero que tenha compreendido, espero sua ajuda. Desde já agradeço pelo ajuda breve e por esse tutorial nota 1.000.

  14. copie os códigos fiz tudo conforme explicado no vídeo, quando click no batão não acontece nada não consigo entender onde esta erro alguém pode dar uma luz ???

  15. Obrigado pela sua sapiência e pela paciência em disponibilizar o material, consegui com sucesso através do seu tutorial a integrar as notificações em meu site, curti e estou te seguindo nas redes sociais, obrigado!

Deixe seu comentário

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