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

Deixe seu comentário

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