MUAKKAD API · v1

أضف تأكيد الدفع إلى موقعك

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

استخدام الخادم فقطلا تضع API key أو Webhook secret في JavaScript الخاص بالمتصفح أو تطبيق الهاتف.
1

أنشئ مفاتيح الربط

سجّل الدخول وافتح API والتكاملات. أدخل عنوان مسار Webhook عام يبدأ بـ HTTPS على خادم متجرك، ثم خزّن API key وWebhook secret كأسرار على الخادم فقط.

فتح إعدادات التكامل ←
MUAKKAD_API_KEY=mk_live_...MUAKKAD_WEBHOOK_SECRET=whsec_...
2

فعّل وسائل الدفع

أنشئ وفعّل وسائل الدفع من إعدادات المتجر في لوحة مؤكد. ستظهر كل الوسائل الفعّالة داخل Checkout ليختار العميل وسيلة الدفع المناسبة.

فتح إعدادات المتجر ←
3

أنشئ Checkout ثم وجّه العميل

ينشئ موقعك مرجع طلب فريدًا ويرسله في order_reference، ويرسل المبلغ الصحيح من سلة العميل. لا ينشئ مؤكد مرجع الطلب أو المبلغ، ويختار العميل وسيلة الدفع من كل الوسائل الفعّالة. تكرار نفس الطلب بنفس التفاصيل آمن ويعيد Checkout الموجود.

curl -X POST https://api.muakkad.com/v1/checkouts \
  -H "X-API-Key: mk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"amount":"250.00",
       "order_reference":"ORDER-1042",
       "return_url":"https://store.example.com/thanks"}'

استجابة ناجحة · 201

{
  "id": "CHECKOUT_UUID",
  "order_reference": "ORDER-1042",
  "amount": "250.00",
  "currency": "EGP",
  "status": "pending",
  "checkout_url": "https://www.muakkad.com/checkout/CHECKOUT_UUID",
  "created_at": "2026-09-25T10:00:00Z",
  "expires_at": "2026-09-26T10:00:00Z",
  "confirmed_at": null
}

وجّه متصفح العميل إلى checkout_url. لا تعتمد على رجوع العميل لإتمام الطلب؛ اعتمد على Webhook أو استعلم عن الحالة.

4

تحقق من النتيجة

يرسل مؤكد X-Muakkad-Signature بالشكل t=timestamp,v1=digest. احسب HMAC-SHA256 من timestamp + نقطة + نص الطلب الخام، وقارن بثبات زمني.

import crypto from "node:crypto";

// Configure this route to receive the unparsed request body.
const signature = request.headers["x-muakkad-signature"];
const [timestampPart, digestPart] = signature.split(",");
const timestamp = timestampPart.slice(2);
const received = digestPart.slice(3);
const age = Math.abs(Date.now() / 1000 - Number(timestamp));
if (age > 300) throw new Error("Stale webhook");

const expected = crypto
  .createHmac("sha256", process.env.MUAKKAD_WEBHOOK_SECRET)
  .update(timestamp + "." + rawBody)
  .digest("hex");
if (received.length !== expected.length ||
    !crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected)))
  throw new Error("Invalid webhook signature");

أعد HTTP 2xx بعد حفظ الحدث. عند انتهاء المهلة أو إرجاع استجابة غير 2xx، يعيد مؤكد المحاولة افتراضياً بعد نحو 30 ثانية بتأخير أُسّي متدرج يصل إلى ساعة، وبحد أقصى 12 محاولة. استخدم X-Muakkad-Delivery لمنع معالجة المحاولة نفسها مرتين، وX-Muakkad-Event لمعرفة نوع الحدث.

استعلام احتياطي عن الحالة

curl https://api.muakkad.com/v1/checkouts/ORDER-1042 \
  -H "X-API-Key: mk_live_..."
5

طريقة اختبار التكامل

  1. أنشئ وفعّل وسائل الدفع من إعدادات المتجر، ثم أنشئ مفاتيح الربط بعنوان Webhook تجريبي عام يبدأ بـ HTTPS.
  2. أنشئ Checkout من خادم موقعك باستخدام مرجع طلب فريد ومبلغ الطلب الذي حسبه موقعك.
  3. افتح checkout_url ودع العميل يختار وسيلة الدفع، ثم أرسل بيانات التحويل.
  4. تحقق من وصول Webhook ومن صحة توقيعه.
  5. نفّذ استعلام الحالة وتأكد أن status يطابق confirmed أو rejected.

مرجع سريع

POST /v1/checkoutsإنشاء CheckoutGET /v1/checkouts/{order_reference}قراءة حالة Checkout

كل المسارات تتطلب X-API-Key. الحالات النهائية هي confirmed وrejected وexpired؛ وقد تظهر pending أو manual_review أثناء المعالجة.