Postback S2S
Conversão notificada pelo backend do anunciante, autenticada por token. Sem JavaScript, sem cookie, sem navegador.
Quando usar#
O postback server-to-server é a via mais confiável de registrar conversão, porque não depende de nada que aconteça no navegador. Casos em que ele é a resposta certa:
- Checkout em domínio de terceiro, onde o cookie não sobrevive
- Conversão confirmada depois do pedido — pagamento aprovado, boleto pago, assinatura ativada
- Conversão que acontece fora do site: telefone, aplicativo de mensagens, loja física, CRM
- Anunciante que não pode ou não quer instalar JavaScript de terceiro
- Ambiente com bloqueador agressivo de script
A URL de postback#
O time Moclick fornece a URL completa e o token da campanha. O token é gerado automaticamente por campanha e não é reaproveitado entre campanhas.
https://bridge.moclick.com.br/wp-json/moclick/v1/postback ?slug=SUA-CAMPANHA &token=SEU-TOKEN &click_id={CLICK_ID} &txid={TXID} &value={VALUE}
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
slug | Sim | Identificador da campanha. |
token | Sim | Token da campanha, fornecido pela Moclick. |
click_id | Sim | Identificador do clique, até 100 caracteres. Sem ele nada é gravado. |
txid | Recomendado | Identificador da transação, até 100 caracteres. É a chave de deduplicação. |
value | Recomendado | Valor da conversão. Ponto como separador decimal. |
Como o anunciante obtém o click_id#
O identificador precisa chegar ao backend do anunciante e ser guardado junto ao pedido. Se a tag global estiver instalada, ele já está em cookie — leia no servidor ao gravar o pedido:
// O nome do cookie é informado pelo time Moclick para a sua campanha. $click_id = $_COOKIE[MOCLICK_COOKIE] ?? ''; // Guarde junto ao pedido, para usar quando a conversão confirmar save_order_meta($order_id, 'moclick_click_id', $click_id);
Sem a tag global, capture o parâmetro de identificação na entrada e persista na sessão. O time Moclick informa qual parâmetro a campanha utiliza.
Exemplo de chamada#
curl -sS -G "https://bridge.moclick.com.br/wp-json/moclick/v1/postback" --data-urlencode "slug=minha-campanha" --data-urlencode "token=SEU_TOKEN" --data-urlencode "click_id=abc-123" --data-urlencode "txid=PEDIDO-9001" --data-urlencode "value=249.90"
$url = 'https://bridge.moclick.com.br/wp-json/moclick/v1/postback?' . http_build_query([ 'slug' => 'minha-campanha', 'token' => MOCLICK_TOKEN, 'click_id' => $click_id, 'txid' => $order_number, 'value' => number_format($total, 2, '.', ''), ]); $res = wp_remote_get($url, ['timeout' => 5]); if (is_wp_error($res) || wp_remote_retrieve_response_code($res) !== 200) { // Enfileire para nova tentativa — ver "Reenvio" abaixo }
const url = new URL("https://bridge.moclick.com.br/wp-json/moclick/v1/postback"); url.search = new URLSearchParams({ slug: "minha-campanha", token: process.env.MOCLICK_TOKEN, click_id: clickId, txid: orderNumber, value: total.toFixed(2) }); const res = await fetch(url, { signal: AbortSignal.timeout(5000) }); if (!res.ok) throw new Error(`postback falhou: ${res.status}`);
import requests r = requests.get( "https://bridge.moclick.com.br/wp-json/moclick/v1/postback", params={ "slug": "minha-campanha", "token": MOCLICK_TOKEN, "click_id": click_id, "txid": order_number, "value": f"{total:.2f}", }, timeout=5, ) r.raise_for_status()
Respostas#
| Código | Corpo | Significado |
|---|---|---|
200 |
OK em text/plain |
Recebido. Inclui o caso de duplicata, que é sucesso por contrato. |
403 |
{"error":"invalid_token"} |
Token inválido, ausente ou campanha inexistente. |
Token errado, token vazio e campanha inexistente produzem resposta idêntica, e a comparação do token é feita em tempo constante. Isso evita que a resposta revele quais campanhas existem ou permita descobrir o token por medição de tempo.
Um detalhe que evita confusão: 200 OK confirma o recebimento, não
necessariamente a gravação. Requisição sem click_id, ou em campanha que
não usa medição própria, responde OK sem gravar — mesma política
silenciosa dos demais endpoints. Ao integrar, confirme no
painel que o evento apareceu.
Reenvio e idempotência#
A chamada é idempotente pelo par click_id +
txid: repetir a mesma requisição não gera conversão duplicada. Isso torna
o reenvio seguro, e o reenvio é recomendado.
Trate o postback como fila, não como chamada única. Timeout ou erro
5xx deve entrar em nova tentativa com espera progressiva — por
exemplo 1 min, 5 min, 30 min, 2 h. Como a operação é
idempotente, não há risco em tentar de novo. Já 403 não deve ser
repetido: é erro de configuração, e reenviar não resolve.
Segurança do token#
- Mantenha o token no servidor. Nunca em JavaScript, HTML ou aplicativo móvel
- Guarde em variável de ambiente ou cofre de segredos, não no repositório
- Um token por campanha: comprometer um não expõe as outras
- Quem tem o token pode inserir conversões nessa campanha — trate como credencial
A URL de postback contém o token. Não a publique em documentação compartilhada, ticket de suporte, log de acesso público nem repositório. Se um token vazar, peça um novo ao time Moclick e atualize a integração.