Отказоустойчивая инженерия
Идемпотентность вебхуков и безопасные повторы
Гарантируйте строго однократную обработку платежей вашей коммерческой системой, даже если сетевые задержки вызывают автоматические повторы вебхуков.
Почему идемпотентность критически важна в Web3-платежах
Поскольку время подтверждения в блокчейне варьируется, а интернет-маршрутизация подвержена кратковременным сбоям, автоматический диспетчер XPayr повторяет неподтвержденные вебхуки до 5 раз. Идемпотентный обработчик гарантирует, что ваш магазин никогда не выполнит один заказ дважды.
Спецификации ключевых заголовков
X-XPayr-Delivery: Уникальный UUID, присваиваемый каждому событию вебхука (напр.,deliv_9f8a2c1e4d). Всегда остается неизменным при всех повторных попытках доставки одного и того же события.X-XPayr-Signature: Хэш HMAC SHA-256, защищающий от подделки данных и атак повторного воспроизведения.X-XPayr-Event: Идентификатор типа события (payment.confirmed,payment.failed).
Готовый к продакшену шаблон обработчика (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']);
Официальные NPM SDK (v0.2.0) и удаленный MCP-сервер
Быстрая интеграция с официальными пакетами XPayr и MCP без установки
Установите @xpayr/node-sdk (v0.2.0), @xpayr/payment-evidence (v0.2.0), @xpayr/extension-kit (v0.2.0)или @xpayr/mcp-server (v1.0.0) из NPM или выполняйте живые вызовы инструментов JSON-RPC 2.0 через POST https://xpayr.com/api/mcp.