الانتقال إلى المحتوى
Rate Extra

Webhooks والتحقق من التوقيع

تدفع كلتا الواجهتين الأحداث إلى نقطة النهاية لديك. تحقق من كل تسليم قبل معالجته: افحص التوقيع بمقارنة ثابتة الزمن، وارفض الطوابع الزمنية القديمة، وأزل التكرار بمعرّف التسليم.

webhooks من TravelDistro

X-TD-Webhook-Signature
sha256=<hex>، وهو HMAC-SHA256 لـ {TIMESTAMP}.{RAW_BODY} بسر نقطة النهاية
X-TD-Webhook-Timestamp
ثوانٍ Unix؛ ارفض إذا كان أقدم من 300 ثانية
X-TD-Webhook-Event
نوع الحدث، مثل transfer.confirmed
X-TD-Webhook-Id
معرّف التسليم، ثابت عبر إعادة المحاولة؛ أزل التكرار به
إعادة المحاولة
محاولتان مع تراجع أُسّي ثم رسالة ميتة

أحداث النقل

  • transfer.confirmed
  • transfer.updated
  • transfer.driver_assigned (تصل بيانات السائق هنا)
  • transfer.driver_unassigned
  • transfer.cancelled

التحقق في Node.js

import crypto from "node:crypto";

// TravelDistro webhook: X-TD-Webhook-Signature = "sha256=" + HMAC-SHA256(`${timestamp}.${rawBody}`, endpointSecret)
export function verifyTravelDistroWebhook(headers: Record<string, string>, rawBody: string, endpointSecret: string): boolean {
  const timestamp = headers["x-td-webhook-timestamp"];
  const signature = headers["x-td-webhook-signature"] ?? "";
  if (!timestamp || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false; // stale or replayed

  const expected = "sha256=" + crypto.createHmac("sha256", endpointSecret).update(`${timestamp}.${rawBody}`).digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(signature);
  return a.length === b.length && crypto.timingSafeEqual(a, b); // constant-time compare
}

// Deduplicate by X-TD-Webhook-Id: the same id is reused on every retry of one delivery.

Hotel API من Safaryar Holidays

X-Webhook-Signature
توقيع HMAC للتسليم
الأحداث
booking.created وbooking.cancelled وbooking.prebook_confirmed وbooking.prebook_rejected
إعادة المحاولة
لا توجد؛ استجب خلال 10 ثوانٍ

قائمة تحقق نقطة النهاية

  • اقرأ المحتوى الخام قبل أي تحليل JSON؛ يغطي التوقيع البايتات الدقيقة.
  • أعد 2xx بسرعة وعالج بشكل غير متزامن.
  • خزّن معرّفات التسليم المعالجة لمدة نافذة إعادة المحاولة على الأقل.
  • عامل سر نقطة النهاية كسر API: على الخادم فقط.

وكالة سفر مرخّصة؟ قدّم طلب الوصول إلى API.

احصل على وصول API