Ingénierie Résiliente

Idempotence des Webhooks et Relances Sécurisées

Assurez-vous que votre architecture e-commerce traite chaque paiement exactement une seule fois, même lorsque des latences réseau déclenchent des relances automatiques.

Pourquoi l'Idempotence est Essentielle dans les Paiements Web3

Les temps de confirmation blockchain étant variables et le routage internet pouvant subir des pics transitoires, le répartiteur automatique XPayr relance les webhooks non acquittés jusqu'à 5 fois. Un écouteur idempotent garantit que votre boutique ne livre jamais deux fois la même commande.

Spécifications des En-têtes Clés

  • X-XPayr-Delivery: UUID unique attribué à chaque événement webhook (ex. deliv_9f8a2c1e4d). Toujours identique lors de toutes les tentatives de relance d'un même événement.
  • X-XPayr-Signature: Empreinte HMAC SHA-256 empêchant toute altération ou attaque par rejeu.
  • X-XPayr-Event: Identifiant de l'événement (payment.confirmed, payment.failed).

Modèle d'Écouteur Prêt pour la Production (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']);
SDK NPM Officiels (v0.2.0) et Serveur MCP Distant

Intégrez Plus Vite avec les Paquets Officiels XPayr et MCP sans Installation

Installez @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) depuis NPM, ou exécutez des appels d'outils JSON-RPC 2.0 en direct via POST https://xpayr.com/api/mcp.

Playground MCP en Direct (/tools/mcp-playground) Vérificateur de licences ES256 Simulateur de politiques d'agents IA Testeur de Webhook HMAC-SHA256 mcp.xpayr.com docs.xpayr.com api-docs.xpayr.com