Webhook - Atualização de Status
Este webhook é enviado sempre que o status de pagamento de uma venda é atualizado.
🔔 Quando é Disparado: Este webhook é enviado quando:
• Um pagamento PIX é confirmado
• Um pagamento é recusado
• Um pagamento é estornado
• Um chargeback é recebido
Estrutura do Payload
| Campo | Tipo | Descrição |
|---|---|---|
event |
string | Tipo do evento (order.created, order.paid, order.processing, order.cancelled, order.chargeback, order.refunded, order.expired) |
title |
string | Título do pedido (ex: "Loja | Pedido gWswsHZo Paid") |
platform |
string | Plataforma de origem (ex: "AproveiCheckout") |
orderId |
string | Identificador único do pedido |
status |
string | Status do pagamento (ver tabela abaixo) |
statusName |
string | Nome legível do status (ex: "Aprovado") |
paymentMethod |
string | Método de pagamento (ex: "pix") |
createdAt |
datetime | Data de criação do pedido (ISO 8601) |
updatedAt |
datetime | Data da última atualização (ISO 8601) |
approvedDate |
datetime|null | Data de aprovação do pagamento |
refundedAt |
datetime|null | Data de estorno/chargeback |
Customer (cliente)
| Campo | Tipo | Descrição |
|---|---|---|
customer.name |
string | Nome completo do cliente |
customer.email |
string | E-mail do cliente |
customer.phone |
string | Telefone do cliente |
customer.document |
string | CPF do cliente |
customer.ip |
string | Endereço IP do cliente |
Products (produtos)
Array com os produtos da venda
| Campo | Tipo | Descrição |
|---|---|---|
products[x].id |
integer | ID do produto |
products[x].name |
string | Nome do produto |
products[x].quantity |
integer | Quantidade |
products[x].priceInCents |
integer | Preço unitário em centavos |
products[x].priceFinalInCents |
integer | Preço final em centavos (após descontos) |
products[x].image |
string|null | URL da imagem do produto |
Commission (comissão)
| Campo | Tipo | Descrição |
|---|---|---|
commission.totalPriceInCents |
integer | Valor total em centavos |
commission.checkoutFeeInCents |
integer | Taxa do checkout em centavos |
commission.gatewayFeeInCents |
integer | Taxa do gateway em centavos |
commission.userCommissionInCents |
integer | Comissão do usuário em centavos |
Address (endereço)
| Campo | Tipo | Descrição |
|---|---|---|
address.street |
string | Logradouro |
address.number |
string | Número |
address.complement |
string|null | Complemento |
address.neighborhood |
string | Bairro |
address.city |
string | Cidade |
address.state |
string | Estado (UF) |
address.zipcode |
string | CEP |
address.country |
string | País (código ISO) |
TrackingParameters (rastreamento)
| Campo | Tipo | Descrição |
|---|---|---|
trackingParameters.src |
string|null | Origem do tráfego |
trackingParameters.sck |
string|null | Parâmetro Sck |
trackingParameters.utm_source |
string|null | UTM Source |
trackingParameters.utm_campaign |
string|null | UTM Campaign |
trackingParameters.utm_medium |
string|null | UTM Medium |
trackingParameters.utm_content |
string|null | UTM Content |
trackingParameters.utm_term |
string|null | UTM Term |
Payments (pagamentos)
Array com os pagamentos realizados
| Campo | Tipo | Descrição |
|---|---|---|
payments[x].payment_method |
string | Método de pagamento |
payments[x].transaction_id_gateway |
string | ID da transação no gateway |
payments[x].amount |
string | Valor pago (formato decimal) |
payments[x].installments |
integer | Número de parcelas |
payments[x].paid_at |
datetime | Data do pagamento (ISO 8601) |
Store (loja)
| Campo | Tipo | Descrição |
|---|---|---|
store.id |
integer | ID da loja |
store.name |
string | Nome da loja |
store.slug |
string | Slug da loja |
Status de Pagamento
| Status | Descrição |
|---|---|
pending |
Pendente - aguardando confirmação |
paid |
Aprovado - pagamento confirmado |
processing |
Processando - pagamento em análise |
cancelled |
Cancelado |
chargeback |
Chargeback recebido |
refunded |
Estornado |
expired |
Expirado |
Exemplo de Webhook - Pagamento Aprovado
JSON Payload
{
"event": "order.paid",
"title": "Wrath Store | Pedido gWswsHZo Paid",
"platform": "AproveiCheckout",
"orderId": "gWswsHZo",
"status": "paid",
"statusName": "Aprovado",
"paymentMethod": "pix",
"createdAt": "2026-02-20T00:28:39.000000Z",
"updatedAt": "2026-02-20T00:30:02.000000Z",
"approvedDate": "2026-02-20T00:30:02.000000Z",
"refundedAt": null,
"customer": {
"name": "João Miguel Costa",
"email": "joaomiguel.costa@outlook.com",
"phone": "1522664885",
"document": "67743776450",
"ip": "127.0.0.1"
},
"products": [
{
"id": 25,
"name": "Cortina Blackout",
"quantity": 1,
"priceInCents": 4200,
"priceFinalInCents": 4200,
"image": null
}
],
"commission": {
"totalPriceInCents": 5100,
"checkoutFeeInCents": 77,
"gatewayFeeInCents": 528,
"userCommissionInCents": 1195
},
"address": {
"street": "Rua Coriolano Durand",
"number": "34159",
"complement": null,
"neighborhood": "Vila Santa Catarina",
"city": "São Paulo",
"state": "SP",
"zipcode": "04375050",
"country": "BR"
},
"trackingParameters": {
"src": null,
"sck": null,
"utm_source": null,
"utm_campaign": null,
"utm_medium": null,
"utm_content": null,
"utm_term": null
},
"trackingNumber": null,
"payments": [
{
"payment_method": "pix",
"transaction_id_gateway": "40694866",
"amount": "51.00",
"installments": 1,
"paid_at": "2026-02-20T00:30:02.000000Z"
}
],
"store": {
"id": 4,
"name": "Wrath Store",
"slug": "wrath-store"
}
}
Exemplo de Webhook - Pagamento Estornado
JSON Payload
{
"event": "order.refunded",
"title": "Wrath Store | Pedido gWswsHZo Refunded",
"platform": "AproveiCheckout",
"orderId": "gWswsHZo",
"status": "refunded",
"statusName": "Estornado",
"paymentMethod": "pix",
"createdAt": "2026-02-20T00:28:39.000000Z",
"updatedAt": "2026-02-20T01:15:00.000000Z",
"approvedDate": "2026-02-20T00:30:02.000000Z",
"refundedAt": "2026-02-20T01:15:00.000000Z",
"customer": {
"name": "João Miguel Costa",
"email": "joaomiguel.costa@outlook.com",
"phone": "1522664885",
"document": "67743776450",
"ip": "127.0.0.1"
},
"products": [
{
"id": 25,
"name": "Cortina Blackout",
"quantity": 1,
"priceInCents": 4200,
"priceFinalInCents": 4200,
"image": null
}
],
"commission": {
"totalPriceInCents": 5100,
"checkoutFeeInCents": 77,
"gatewayFeeInCents": 528,
"userCommissionInCents": 1195
},
"address": {
"street": "Rua Coriolano Durand",
"number": "34159",
"complement": null,
"neighborhood": "Vila Santa Catarina",
"city": "São Paulo",
"state": "SP",
"zipcode": "04375050",
"country": "BR"
},
"trackingParameters": {
"src": null,
"sck": null,
"utm_source": null,
"utm_campaign": null,
"utm_medium": null,
"utm_content": null,
"utm_term": null
},
"trackingNumber": null,
"payments": [
{
"payment_method": "pix",
"transaction_id_gateway": "40694866",
"amount": "51.00",
"installments": 1,
"paid_at": "2026-02-20T00:30:02.000000Z"
}
],
"store": {
"id": 4,
"name": "Wrath Store",
"slug": "wrath-store"
}
}
Exemplo de Implementação
PHP
<?php
// Recebe o payload
$payload = file_get_contents('php://input');
$data = json_decode($payload, true);
// Log para debug
error_log("Webhook recebido: " . json_encode($data));
// Extrai informações importantes
$orderId = $data['orderId'];
$status = $data['status'];
$totalAmount = $data['commission']['totalPriceInCents'] ?? 0;
// Verifica se já processou este webhook
if (webhookJaProcessado($orderId)) {
http_response_code(200);
echo json_encode(['status' => 'already_processed']);
exit;
}
// Processa baseado no status
switch ($status) {
case 'paid':
// Marca pedido como pago
atualizarPedido($orderId, [
'status' => 'paid',
'orderId' => $orderId,
'paid_at' => $data['approvedDate']
]);
// Envia e-mail de confirmação
enviarEmailConfirmacao($orderId);
// Libera produtos digitais
liberarProdutosDigitais($orderId);
break;
case 'refunded':
case 'chargeback':
// Marca pedido como estornado
atualizarPedido($orderId, [
'status' => 'refunded',
'refunded_at' => $data['refundedAt']
]);
// Notifica o cliente
enviarEmailEstorno($orderId);
// Remove acesso a produtos digitais
revogarAcessoProdutos($orderId);
break;
case 'cancelled':
// Marca pedido como cancelado
atualizarPedido($orderId, [
'status' => 'cancelled'
]);
break;
}
// Marca webhook como processado
marcarWebhookComoProcessado($orderId);
// Retorna sucesso
http_response_code(200);
echo json_encode(['status' => 'success']);
⚠️ Importante: Sempre valide e sanitize os dados recebidos antes de processar. Implemente controles de idempotência para evitar processar o mesmo webhook múltiplas vezes.
💡 Dica: Use o orderId para identificar o pedido no seu sistema.
Certifique-se de armazenar o orderId para referência futura e suporte.