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