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.