Ingeniería Resiliente
Idempotencia de Webhooks y Reintentos Seguros
Asegura que tu plataforma comercial procese cada pago exactamente una vez, incluso cuando las demoras de red activen reintentos automáticos de webhooks.
Por Qué Importa la Idempotencia en los Pagos Web3
Dado que los tiempos de confirmación en blockchain varían y el enrutamiento de internet puede sufrir picos transitorios, el despachador automático de XPayr reintenta los webhooks no confirmados hasta 5 veces. Un receptor idempotente garantiza que tu tienda nunca entregue un pedido dos veces.
Especificaciones de Cabeceras Clave
X-XPayr-Delivery: UUID único asignado a cada evento webhook (p. ej.,deliv_9f8a2c1e4d). Siempre idéntico en todos los intentos de reenvío del mismo evento de transacción.X-XPayr-Signature: Hash HMAC SHA-256 que impide la manipulación y ataques de repetición.X-XPayr-Event: Identificador del evento (payment.confirmed,payment.failed).
Patrón de Receptor Listo para Producción (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 Oficiales en NPM (v0.2.0) y Servidor MCP Remoto
Integra Más Rápido con los Paquetes Oficiales de XPayr y MCP sin Instalación
Instala @xpayr/node-sdk (v0.2.0), @xpayr/payment-evidence (v0.2.0), @xpayr/extension-kit (v0.2.0)o @xpayr/mcp-server (v1.0.0) desde NPM, o ejecuta llamadas a herramientas JSON-RPC 2.0 en vivo mediante POST https://xpayr.com/api/mcp.