أنشئ مفاتيح الربط
سجّل الدخول وافتح API والتكاملات. أدخل عنوان مسار Webhook عام يبدأ بـ HTTPS على خادم متجرك، ثم خزّن API key وWebhook secret كأسرار على الخادم فقط.
فتح إعدادات التكامل ←MUAKKAD_API_KEY=mk_live_...MUAKKAD_WEBHOOK_SECRET=whsec_...أنشئ جلسة دفع من خادمك، أرسل العميل إلى صفحة مؤكد المستضافة، واستقبل النتيجة بتوقيع يمكن التحقق منه.
سجّل الدخول وافتح API والتكاملات. أدخل عنوان مسار Webhook عام يبدأ بـ HTTPS على خادم متجرك، ثم خزّن API key وWebhook secret كأسرار على الخادم فقط.
فتح إعدادات التكامل ←MUAKKAD_API_KEY=mk_live_...MUAKKAD_WEBHOOK_SECRET=whsec_...أنشئ وفعّل وسائل الدفع من إعدادات المتجر في لوحة مؤكد. ستظهر كل الوسائل الفعّالة داخل 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"}'{
"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 أو استعلم عن الحالة.
يرسل مؤكد 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_..."POST /v1/checkoutsإنشاء CheckoutGET /v1/checkouts/{order_reference}قراءة حالة Checkoutكل المسارات تتطلب X-API-Key. الحالات النهائية هي confirmed وrejected وexpired؛ وقد تظهر pending أو manual_review أثناء المعالجة.