Callback
Como funciona
É possível receber em seu site notificações de alteração de status das suas cobranças, para um melhor acompanhamento das transações e dos clientes. Com essa ferramenta é possível manter seu sistema atualizado e ser notificado do pagamento, cancelamento ou visualização da cobrança automaticamente. Para utilizar esta ferramenta não é necessário enviar nenhum dado, visto que o nosso sistema se encarregará de avisá-lo das mudanças na situação da cobrança.
Para configurar esta ferramenta você precisa entrar em sua conta e acessar o menu Integrações. Em seguida selecione a aba ‘Callback’ e acessará o gerenciamento das notificações. Caso não possua nenhuma URL de notificação cadastrada, será exibido o formulário de cadastro. Se já possuir uma ou mais URLs de notificação, serão listadas todas as suas URLs cadastradas. Para cadastrar uma nova, digite no campo "URL de Notificação" a URL de seu site onde você irá receber e processar a notificação e selecione o tipo de notificação que deseja receber neste endereço:
- Cobranças com pagamento confirmado;
- Cobranças canceladas;
Caso não seja especificado qual protocolo utilizar, será utilizado HTTP. Se você adicionar gerencianet.com.br, a URL cadastrada será http://gerencianet.com.br/. Se a URL enviada fosse http://gerencianet.com.br ou https://gerencianet.com.br ela não sofreria alteração.
A sua URL cadastrada deve receber via POST um XML contendo os detalhes da transação. Para que a notificação seja considerada entregue é necessário que a requisição retorne o status HTTP "200 (OK)". Após algumas tentativas com falha, sua URL de notificação será desativada. Uma URL desativada pode ser reativada no Gerencianet, no menu Integrações - Callback.
</> Quais dados você receberá?
TAG | DESCRIÇÃO | TIPOS DE NOTIFICAÇÃO |
pagamento <pagamento> |
TAG que engloba os dados das notificações de pagamento |
Notificação de Pagamento de Cobrança |
cancelamento <cancelamento> |
TAG que engloba os dados das notificações de cancelamento |
Notificação de Cancelamento de Cobrança |
visualizado <visualizado> |
TAG que engloba os dados das notificações de visualização |
Notificação de Visualização de Cobrança |
codc <cliente> <codc> |
Código do cliente da fatura |
Todos os Tipos |
cliente <cliente> <cliente> |
Nome do cliente da fatura |
Todos os Tipos |
cpfcnpj <cliente> <cpfcnpj> |
CPF ou CNPJ do cliente da fatura |
Todos os Tipos |
<cliente> <email> |
E-mail do cliente da fatura |
Todos os Tipos |
endereco <cliente> <endereco> |
Endereço do cliente da fatura |
Todos os Tipos |
chave <cobranca> <chave> |
Chave de identificação da cobrança |
Todos os Tipos |
retorno <cobranca> <retorno> |
Retorno enviado quando da emissão da cobrança. Quando não enviado é igual à chave |
Todos os Tipos |
pedido <cobranca> <pedido> |
Número da fatura |
Todos os Tipos |
chaveLote <cobranca> <chaveLote> |
Chave do lote da cobrança |
Todos os Tipos |
vencimento <cobranca> <vencimento> |
Data de vencimento da fatura em formato brasileiro (dd/mm/aaaa) |
Todos os Tipos |
dataFin <cobranca> <dataFin> |
Data que a fatura foi finalizada em formato brasileiro (dd/mm/aaaa) |
Todos os Tipos, mas possui valor apenas em notificação de pagamento |
dataCanc <cobranca> <dataCanc> |
Data que a fatura foi cancelada em formato brasileiro (dd/mm/aaaa) |
Todos os Tipos, mas possui dados apenas em notificação de cancelamento. |
dataCredito <cobranca> <dataCredito> |
Data da disponibilização do crédito em sua conta no formato brasileiro (dd/mm/aaaa) |
Todos os Tipos |
pagconf <cobranca> <pagconf> |
Indica se o pagamento já foi confirmado |
Todos os Tipos |
status <cobranca> <status> |
Status da fatura:
|
Todos os Tipos |
valorPago <cobranca> <valorPago> |
Valor que foi pago e confirmado. No caso de não possuirmos esta informação, o valor retornado será "0" |
Todos os Tipos |
assinatura <cobranca> <assinatura> |
Identificador da URL de notificação. |
Todos os Tipos |
pag <cobranca> <pag> |
Opção de pagamento escolhida pelo cliente:
|
Todos os Tipos |
total <cobranca> <total> |
Valor total da fatura |
Todos os Tipos |
nparcela <cobranca> <nparcela> |
Número da parcela da cobrança caso seja um carnê, ou "0" caso contrário |
Todos os Tipos |
produto <itens> <item> <produto> |
Descrição do produto |
Todos os Tipos |
valor <itens> <item> <valor> |
Valor do produto |
Todos os Tipos |
quantidade <itens> <item> <quantidade> |
Quantidade do produto |
Todos os Tipos |
Exemplos
- <?php
- if(isset($_POST['xml'])){
- /**
- * Transformando o XML em Objeto
- */
- $objXml = simplexml_load_string($_POST['xml']);
- /**
- * Captura dos dados do cliente
- */
- $nome = $objXml->cliente->cliente;
- /**
- * Captura dos dados da cobrança
- */
- /**
- * Chave da cobrança
- */
- $chave = $objXml->cobranca->chave;
- /**
- * Retorno da cobrança
- */
- $retorno = $objXml->cobranca->retorno;
- /**
- * Número do pedido
- */
- $numeroPedido = $objXml->cobranca->documento;
- /**
- * Valor pago, caso essa informação não esteja disponível o valor será 0
- */
- $valorPago = $objXml->cobranca->valorPago;
- /**
- * Opção escolhida para pagamento, pag0 -> carnê, pag1 -> boleto, pag2 -> CC
- */
- $pag = $objXml->cobranca->pag;
- /**
- * Capturar dados dos itens
- */
- $produtos = array();
- foreach($objXml->itens->item as $item){
- $produtos[] = $item->produto;
- }
- }
- <%@page import="java.util.*"%><%@page import="javax.xml.parsers.*"%><%@page import="org.xml.sax.InputSource"%><%@page import="org.w3c.dom.*"%><%@page import="java.io.*"%><%@page contentType="text/html" pageEncoding="UTF-8"%><%
- Element elem;
- Node child;
- CharacterData cd;
- String xml = request.getParameter("xml");
- /**
- * Transformando o XML em Objeto
- */
- DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- InputSource is = new InputSource();
- is.setCharacterStream(new StringReader(xml));
- Document doc = db.parse(is);
- /**
- * Captura dos dados do cliente
- */
- elem = (Element)doc.getElementsByTagName("cliente").item(1);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- String nome = cd.getData();
- /**
- * Captura dos dados da cobrança
- */
- /**
- * Chave da cobrança
- */
- elem = (Element)doc.getElementsByTagName("chave").item(0);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- String chave = cd.getData();
- /**
- * Retorno da cobrança
- */
- elem = (Element)doc.getElementsByTagName("retorno").item(0);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- String retorno = cd.getData();
- /**
- * Número do pedido
- */
- elem = (Element)doc.getElementsByTagName("documento").item(0);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- String numeroPedido = cd.getData();
- /**
- * Valor pago, caso essa informação não esteja disponível o valor será 0
- */
- elem = (Element)doc.getElementsByTagName("valorPago").item(0);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- String valorPago = cd.getData();
- /**
- * Opção escolhida para pagamento, pag0 -> carnê, pag1 -> boleto, pag2 -> CC
- */
- elem = (Element)doc.getElementsByTagName("pag").item(0);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- String pag = cd.getData();
- /**
- * Capturar dados dos itens
- */
- ArrayList<String> produto = new ArrayList<String>();
- NodeList itens = doc.getElementsByTagName("produto");
- for (int i = 0; i<itens.getLength();i++) {
- elem = (Element) itens.item(i);
- child = elem.getFirstChild();
- cd = (CharacterData) child;
- produto.add(cd.getData());
- }
- %>
- <%@ Page AspCompat="true" ValidateRequest="false" %>
- <%
- dim xmlCallback, objxml, nodes, itens
- dim nome, chave, retorno, numeroPedido, valorPago, pag, produtos
- xmlCallback = request.Form("xml")
- '''
- ' Transformando o Xml em objeto
- '''
- objXML = Server.CreateObject("Microsoft.XMLDOM")
- objXML.loadXML(xmlCallback)
- '''
- ' Captura dos dados do cliente
- '''
- nome = objXML.getElementsByTagName("cliente/cliente")(0).text
- '''
- ' Captura dos dados da cobrança
- '''
- '''
- ' Chave da cobrança
- '''
- chave = objXML.getElementsByTagName("chave")(0).text
- '''
- ' Retorno da cobrança
- '''
- retorno = objXML.getElementsByTagName("retorno")(0).text
- '''
- ' Número do pedido
- '''
- numeroPedido = objXML.getElementsByTagName("documento")(0).text
- '''
- ' Valor pago, caso essa informação não esteja disponível o valor será 0
- '''
- valorPago = objXML.getElementsByTagName("valorPago")(0).text
- '''
- ' Opção escolhida para pagamento, pag0 -> carnê, pag1 -> boleto, pag2 -> CC
- '''
- pag = objXML.getElementsByTagName("pag")(0).text
- '''
- ' Capturar dados dos itens
- '''
- itens = objXML.getElementsByTagName("produto")
- produtos = new Collection
- For Each item in itens
- produtos.Add(item.text)
- Next
- %>
- <%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"
- CodeFile="callback.aspx.cs" Inherits="_Callback" ValidateRequest="false" %>
- using System;
- using System.Collections;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Xml;
- using System.Text;
- public partial class _Callback : System.Web.UI.Page
- {
- private string pagamento = "pagamento";
- private string cancelamento = "cancelamento";
- private string visualizado = "visualizado";
- /**
- * recebeCallback string: string
- *
- * Recebe o Xml em formato de string
- * verifica o tipo de callback
- * retorna o resultado do processamento do mesmo -> 200 = sucesso, 403 = falha
- *
- */
- public string recebeCallback(string xmlCallback)
- {
- XmlDocument xml = new XmlDocument();
- /**
- * Transformando o Xml em Objeto
- */
- xml.LoadXml(xmlCallback);
- /**
- * Selecionando o tipo de notificação
- */
- XmlNode xmlCancelado = xml.SelectSingleNode("/cancelamento");
- if (xmlCancelado == null)
- {
- XmlNode xmlVisualizado = xml.SelectSingleNode("/visualizado");
- if (xmlVisualizado == null)
- {
- XmlNode xmlPago = xml.SelectSingleNode("/pagamento");
- if (xmlPago == null)
- {
- return "403";
- }
- else
- {
- return processaCallback(xmlPago);
- }
- }
- else
- {
- return processaCallback(xmlVisualizado);
- }
- }
- else
- {
- return processaCallback(xmlCancelado);
- }
- }
- protected string processaCallback(XmlNode dadosCallback)
- {
- /**
- * Captura dos dados do cliente
- */
- string nome = dadosCallback.SelectSingleNode("cliente/cliente").InnerText;
- /**
- * Captura dos dados da cobrança
- */
- /**
- * Chave da cobrança
- */
- string chave = dadosCallback.SelectSingleNode("cobranca/chave").InnerText;
- /**
- * Chave da cobrança
- */
- string retorno = dadosCallback.SelectSingleNode("cobranca/retorno").InnerText;
- /**
- * Número do pedido
- */
- string numeroPedido = dadosCallback.SelectSingleNode("cobranca/documento").InnerText;
- /**
- * Valor pago, caso essa informação não esteja disponível o valor será 0
- */
- string valorPago = dadosCallback.SelectSingleNode("cobranca/valorPago").InnerText;
- /**
- * Opção escolhida para pagamento, pag0 -> carnê, pag1 -> boleto, pag2 -> CC
- */
- string pag = dadosCallback.SelectSingleNode("cobranca/pag").InnerText;
- /**
- * Capturar dados dos itens
- */
- XmlNodeList itens = dadosCallback.SelectNodes("itens");
- ArrayList produtos = new ArrayList();
- string a = "";
- foreach (XmlNode item in itens)
- {
- produtos.Add(item.SelectSingleNode("item/produto").InnerText);
- }
- return "200";
- }
- protected void Page_Load(object sender, EventArgs e)
- {
- HttpContext context = Context;
- context.Response.Write(recebeCallback(context.Request.Form["xml"]));
- }
- }