Engenharia Resiliente

Idempotência de Webhooks e Retentativas Seguras

Garanta que sua plataforma comercial processe pagamentos exatamente uma vez, mesmo quando atrasos de rede acionarem retentativas automáticas de webhooks.

Por Que a Idempotência é Essencial em Pagamentos Web3

Como os tempos de confirmação na blockchain variam e o roteamento da internet pode sofrer oscilações temporárias, o despachante automático da XPayr reenvia webhooks não confirmados até 5 vezes. Um listener idempotente garante que sua loja nunca entregue o mesmo pedido duas vezes.

Especificações dos Cabeçalhos Principais

  • X-XPayr-Delivery: UUID exclusivo atribuído a cada evento webhook (ex.: deliv_9f8a2c1e4d). Permanece sempre idêntico em todas as retentativas do mesmo evento de transação.
  • X-XPayr-Signature: Hash HMAC SHA-256 que impede adulteração e ataques de repetição.
  • X-XPayr-Event: Identificador do evento (payment.confirmed, payment.failed).

Padrão de Listener Pronto para Produção (PHP)

<?php
// Secure Webhook Listener with Idempotency Protection
$rawPayload = file_get_contents('php://input');
$deliveryId = $_SERVER['HTTP_X_XPAYR_DELIVERY'] ?? '';
$signature = $_SERVER['HTTP_X_XPAYR_SIGNATURE'] ?? '';

// 1. Verify HMAC Signature
$expectedSignature = 'sha256=' . hash_hmac('sha256', $rawPayload, $webhookSecret);
if (!hash_equals($expectedSignature, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

$event = json_decode($rawPayload, true);
$orderId = $event['data']['order_id'] ?? null;

// 2. Check if this delivery or order was already processed (Atomic DB Lock)
$stmt = $pdo->prepare("INSERT INTO processed_webhooks (delivery_id, order_id, created_at) VALUES (?, ?, NOW())");
try {
    $stmt->execute([$deliveryId, $orderId]);
} catch (PDOException $e) {
    // Duplicate event detected (Unique constraint violation)
    // Return HTTP 200 OK immediately so XPayr stops retrying!
    http_response_code(200);
    echo json_encode(['status' => 'already_processed']);
    exit;
}

// 3. Fulfill Order (Guaranteed to execute exactly ONCE)
fulfillCustomerOrder($orderId, $event['data']);

http_response_code(200);
echo json_encode(['status' => 'success']);
SDKs Oficiais no NPM (v0.2.0) e Servidor MCP Remoto

Integre Mais Rápido com Pacotes Oficiais da XPayr e MCP sem Instalação

Instale @xpayr/node-sdk (v0.2.0), @xpayr/payment-evidence (v0.2.0), @xpayr/extension-kit (v0.2.0)ou @xpayr/mcp-server (v1.0.0) pelo NPM, ou execute chamadas de ferramentas JSON-RPC 2.0 ao vivo via POST https://xpayr.com/api/mcp.

Playground MCP ao Vivo (/tools/mcp-playground) Verificador de Licenças ES256 Simulador de Políticas para Agentes de IA Testador de Webhook HMAC-SHA256 mcp.xpayr.com docs.xpayr.com api-docs.xpayr.com