الـ API والتكامل

الـ Webhooks

الصيغة

كل webhook هو HTTP POST بجسم JSON:

{
  "id":         "550e8400-e29b-41d4-a716-446655440000",
  "event":      "education.students.created",
  "tenant_id":  42,
  "created_at": "2026-04-26T10:30:15+03:00",
  "data": {
    "student": { "id": 123, "full_name": "...", ... }
  }
}

Headers

Header الوصف
X-Okta-Event اسم الحدث
X-Okta-Delivery-Id UUID فريد، ثابت عبر إعادة المحاولات للـ deduplication
X-Okta-Timestamp Unix timestamp وقت التوقيع
X-Okta-Signature HMAC-SHA256 hex

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

$expected = hash_hmac(
    'sha256',
    $request->header('X-Okta-Timestamp') . '.' . $request->getContent(),
    $YOUR_WEBHOOK_SECRET,
);

if (! hash_equals($expected, $request->header('X-Okta-Signature'))) {
    return response('invalid signature', 401);
}

حماية من Replay

افحص أن X-Okta-Timestamp ضمن آخر 5 دقائق، وخزّن X-Okta-Delivery-Id لمدة 15 دقيقة على الأقل لرفض إعادة الإرسال.

إعادة المحاولة

أوكتا يعيد المحاولة مع backoff: 30s → 2m → 10m → 1h → 6h. بعد 6 محاولات بدون 2xx، يُعتبر التسليم فاشلاً نهائياً ويُسجَّل في صفحة "تسليمات Webhook" في لوحة الشريك.

مهم: ردّك يجب أن يكون 2xx خلال 10 ثوانٍ. لو احتجت معالجة طويلة، اقبل الـ webhook بـ 202 Accepted فوراً وعالج خلفياً.


عرض الدليل كاملاً في صفحة واحدة · ↧ Markdown خام