İçeriğe geç
Rate Extra

Webhook'lar ve imza doğrulama

Her iki API de olayları uç noktanıza iter. Her teslimatı işlemeden önce doğrulayın: imzayı sabit zamanlı karşılaştırmayla kontrol edin, eski zaman damgalarını reddedin ve teslimat kimliğiyle tekilleştirin.

TravelDistro webhook'ları

X-TD-Webhook-Signature
sha256=<hex>; uç nokta gizli anahtarıyla {TIMESTAMP}.{RAW_BODY} üzerinde HMAC-SHA256
X-TD-Webhook-Timestamp
Unix saniye; 300 s'den eskiyse reddedin
X-TD-Webhook-Event
Olay türü, ör. transfer.confirmed
X-TD-Webhook-Id
Teslimat kimliği, yeniden denemelerde sabit; bununla tekilleştirin
Yeniden deneme
Üstel geri çekilmeyle 2 deneme, sonra dead-letter

Transfer olayları

  • transfer.confirmed
  • transfer.updated
  • transfer.driver_assigned (sürücü bilgileri burada gelir)
  • transfer.driver_unassigned
  • transfer.cancelled

Node.js ile doğrulama

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.

Safaryar Holidays Hotel API

X-Webhook-Signature
Teslimatın HMAC imzası
Olaylar
booking.created, booking.cancelled, booking.prebook_confirmed, booking.prebook_rejected
Yeniden deneme
Yok; 10 saniye içinde yanıt verin

Uç nokta kontrol listesi

  • JSON ayrıştırmadan önce ham gövdeyi okuyun; imza tam baytları kapsar.
  • Hızlıca 2xx dönün ve asenkron işleyin.
  • İşlenen teslimat kimliklerini en az yeniden deneme penceresi boyunca saklayın.
  • Uç nokta gizli anahtarına API gizli anahtarı gibi davranın: yalnızca sunucu tarafında.

Lisanslı seyahat acentesi misiniz? API erişimi için başvurun.

API erişimi al