Skip to content
اللغة: العربية

الـ API للمطوّرين

إرسال المبيعات والبيانات المخصصة

آخر تحديث 1 نوفمبر 2026 القراءة: 5 د

استخدم Callbacks البيع لربط المبيعات من متجرك بالنقرات على الروابط، وتكامل Custom (API) لإرسال بيانات حيّة من أدواتك الخاصة إلى صفحتك.

يقبل LinkHarbor أيضًا بيانات من الخارج. ولحالتين توجد نقاط نهاية مخصّصة بأسرار خاصة بها، فلا تحتاج إلى مفتاح API لهما: تبلّغ Callbacks البيع عن المبيعات من متجرك، فترى في إحصائياتك أي رابط جلب إيرادات. ويجلب تكامل Custom (API) بيانات حيّة من أدواتك الخاصة إلى صفحتك كودجة، ويمكنه إطلاق إشعارات فورية.

Callbacks البيع: ربط المبيعات

كيف يتكامل معرّف النقرة (lt_click_id) والربط والتقارير مشروح في نسب التحويلات والمبيعات؛ وهنا تجد كل الحقول والاستجابات للمطوّرين. باختصار: عندما يعيد LinkHarbor توجيه نقرة محسوبة إلى هدف http أو https، يضيف المعامل lt_click_id؛ فيحتفظ به متجرك ويرسله مرة أخرى بعد الشراء.

إنشاء سر Callback

صفحة «Callback وواجهة API» مع بطاقة «أسرار Callback»
تنشئ أسرار Callback في صفحة «Callback وواجهة API»
  1. افتح «Callback وواجهة API»
  2. في بطاقة «أسرار Callback» انقر «+ إنشاء سر جديد»
  3. أعطه اسمًا اختياريًا، مثل Callback المتجر، وانقر «إنشاء السر»
  4. انسخ السر فورًا، فهو يُعرض مرة واحدة فقط
من
المالكون والمسؤولون، ابتداءً من Creator Pro. وفي Creator Free تظهر العبارة «أسرار Callback متاحة ابتداءً من Creator Pro.»
كم
حتى 5 أسرار لكل مساحة عمل، مثلًا سر لكل متجر.
«تعديل»
غيّر الاسم واضبط الحالة على «نشط» أو «غير نشط». ومع السر غير النشط ترفض الـ API عمليات Callback.
«↺ تدوير»
يُنشئ سرًا جديدًا؛ ويتوقف القديم عن العمل فورًا.
«آخر Callback:»
يعرض متى استُخدم السر آخر مرة بنجاح.

إرسال Callback

POST /v1/callbacks/sale
curl -X POST https://dock.at-harbor.com/v1/callbacks/sale \
  -H "Content-Type: application/json" \
  -H "X-Callback-Secret: $LH_CALLBACK_SECRET" \
  -d '{
    "click_id": "3f1c2a9e-8d4b-4a51-9f0e-6b7c1d2e3f40",
    "order_id": "A-10023",
    "amount": "49.90",
    "currency": "EUR",
    "occurred_at": "2026-11-01T10:15:00Z"
  }'
# → {"ok":true,"conversion_id":123}
الحقلمطلوبالمعنى
click_idنعمقيمة lt_click_id ‏(10–36 حرفًا)
order_idنعمرقم طلبك (1–128 حرفًا)؛ ولا يُحسب كل رقم طلب إلا مرة واحدة لكل مساحة عمل
amountنعمالمبلغ كرقم عشري، مثل "49.90"؛ دون قيم سالبة
currencyنعمالعملة كرمز من ثلاثة أحرف، مثل EUR؛ وتحوّل الـ API الأحرف الصغيرة
occurred_atلاوقت الشراء (ISO 8601)
amount_base_minor, base_currency, fx_rateلاالمبلغ المحوَّل بأصغر وحدة، والعملة الأساسية، وسعر الصرف، إذا كنت تبيع بعدة عملات
metaلابياناتك الإضافية الخاصة ككائن مسطّح: حتى 50 مفتاحًا بطول 1–64 حرفًا؛ والقيم نص (حتى 500 حرف) أو رقم أو true/false أو null؛ وتُرفض الكائنات والقوائم المتداخلة
workspace_idلامعرّف مساحة عملك؛ ومعه تبلّغ الـ API عن click_id غير المعروف بالخطأ 404 بدلًا من 403
الاستجابةالمعنى
200 {"ok":true,"conversion_id":…}حُفظ البيع، أو كان order_id هذا محفوظًا بالفعل (فيُعاد حينها معرّف التحويل الموجود)
403 forbiddenسر أو توقيع خاطئ، أو click_id غير معروف (دون workspace_id)
403 secret_inactiveالسر مضبوط على «غير نشط»
404 not_foundclick_id غير معروف (فقط مع workspace_id وسر صالح)
413 request_too_largeالجسم أكبر من 1 MB
422 validation_failedحقل مفقود أو غير صالح، مثل قيمة في meta طويلة جدًا أو متداخلة
429 rate_limitedأكثر من 120 Callback في الدقيقة من عنوان IP الخاص بك

توقيع اختياري

إضافة إلى السر، يمكنك إرسال الترويسة X-Callback-Signature. وهي تحتوي على sha256= وتوقيع HMAC-SHA256 للجسم الخام بالنظام الست عشري. والمفتاح ليس السر نفسه، بل تجزئة SHA-256 له بالصيغة الثنائية. وإذا أرسلت الترويسة، فيجب أن تكون صحيحة، وإلا رُفض الـ Callback.

حساب التوقيع (PHP)
<?php
$body = json_encode($payload);
$key  = hash('sha256', getenv('LH_CALLBACK_SECRET'), true); // binary hash of the secret
$sig  = 'sha256=' . hash_hmac('sha256', $body, $key);
// Headers: X-Callback-Secret and X-Callback-Signature: $sig, body: $body

أين ترى المبيعات

تظهر المبيعات المبلَّغ عنها كتحويلات في إحصائياتك، انظر نسب التحويلات والمبيعات. وعبر الـ API تقرؤها بالنطاق read:stats تحت /v1/stats/…/conversions/breakdown.

Custom (API): بياناتك الحيّة الخاصة

مع تكامل Custom (API) يستطيع أي برنامج قادر على إرسال طلبات HTTP، كإضافة لخادم ألعاب أو بوت أو سكربت cron، أن يرسل بيانات إلى LinkHarbor. وتتحول هذه البيانات إلى ودجة حيّة على صفحتك، ويمكن لقواعد الإشعارات الفورية إخطار متابعيك.

الربط

  1. افتح «التكاملات» في مساحة العمل
  2. اختر Custom (API) وأدخل اسمًا
  3. بعد الربط تعرض النافذة «رابط الاستقبال» و«السر» (مع «إظهار السر»)
  4. احفظ الاثنين في أداتك

التكاملات متاحة ابتداءً من Creator Pro. ولا يرى رابط الاستقبال والسر إلا المالكون والمسؤولون، بما في ذلك لاحقًا في عرض تفاصيل التكامل. والفصل ثم إعادة الربط يُنشئ سرًا جديدًا. وكيفية ربط التكاملات عمومًا مشروحة في ربط التكاملات وتجديدها وفصلها.

إرسال البيانات

إرسال حدث وحالة الودجة
curl -X POST "$INGEST_URL" \
  -H "Authorization: Bearer $INGEST_SECRET" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "player.joined",
    "event_id": "join-2026-11-01T20:01:02Z-steve",
    "data": { "player": "Steve" },
    "state": {
      "type": "game_server",
      "name": "Survival SMP",
      "online": true,
      "players_online": 3,
      "players_max": 20
    }
  }'
# → {"ok":true,"event_id":4711,"duplicate":false,"event_type":"player.joined"}
event
اسم حدث حر، مثل player.joined. يُحوَّل إلى أحرف صغيرة، وهو الاسم الذي تتفاعل معه قواعد الإشعارات الفورية. ودون event يُسمّى الحدث state.updated.
event_id
مفتاح اختياري يمنع المعالجة المزدوجة. إذا أُرسل event_id نفسه مرة أخرى، يستجيب LinkHarbor بـ duplicate: true ولا يفعل شيئًا.
data
قيم للعناصر النائبة في نصوص الإشعارات الفورية، مثل {player}. حتى 40 مفتاحًا، وبقيم بسيطة فقط.
state
الحالة الكاملة للودجة. وهي تستبدل الحالة السابقة بالكامل. وقيمة type هي game_server (بطاقة خادم ألعاب) أو status (بطاقة حالة).

بدلًا من Authorization: Bearer يمكنك أيضًا إرسال السر في الترويسة X-LinkHarbor-Secret. ويُسمح بـ 120 استدعاءً في الدقيقة لكل عنوان IP. واختياريًا توقّع الجسم: تحتوي الترويسة X-LinkHarbor-Signature على sha256= وتوقيع HMAC-SHA256 للجسم الخام مع السر مفتاحًا. وإذا أرسلتها، فيجب أن تكون صحيحة.

الاستجابةالمعنى
200 {"ok":true,…}حُفظ الحدث، مع duplicate: true عند event_id معروف
400 invalid_jsonالجسم ليس كائن JSON
401 invalid_secretسر خاطئ أو رابط استقبال غير معروف
401 signature_invalidX-LinkHarbor-Signature لا يطابق الجسم
413 request_too_largeالجسم أكبر من 64 KB
422 validation_failedلا يوجد event ولا state في الجسم
429 rate_limitedأكثر من 120 استدعاءً في الدقيقة من عنوان IP الخاص بك

لم تجد ما تبحث عنه؟

أخبرنا بما تحتاج إليه، وسيساعدك فريق الدعم لدينا شخصيًا.

تواصل مع الدعم