pk_…
للـ wallets،
payment/create،
payment/confirm.
ينفع من المتصفح ومن السيرفر.
توثيق الـ API · v2
كل عملية إيداع بتبدأ من الـ API بتاعك، وتمشي على مخزون الشبكة بتاعنا. العميل بيوافق على موبايله، والرصيد بيتضاف في حسابك على المنصة تلقائياً، وإنت بتعرف بالـ webhook أو بالسؤال عن المرجع.
عنوان الـ API
ابدأ من هنا
تلات خطوات: اعمل العملية، اسأل عنها بمرجعك إنت، واستقبل الإشعار. المفاتيح بتلاقيها في صفحة مفاتيحي.
١ أنشئ العملية
٢ العميل يوافق على موبايله — وبعدها اسأل
٣ خلّي التاجر يعرف — webhook أو استعلام
سجّل webhook_url وقت الإنشاء، وهيوصلك
transaction.completed موقّع. أو اسأل بنفسك بأي وقت
بـ order_id أو الـ reference.
202 · MH-4031 في الخطوة ٢ معناه العميل لسه ما وافقش —
كرّر السؤال بعد ثوانٍ، أو استنى الـ webhook.
المصادقة
للـ wallets،
payment/create،
payment/confirm.
ينفع من المتصفح ومن السيرفر.
لـ payment/info بس.
يتحقن مرة واحدة في الحياة وما بيترشّحش تاني. مكانه سيرفرك بس.
المفتاح يشتغل زي ما هو في الهيدر، وبنقبل Bearer كمان لو معتاد في HTTP clients بتاعتك.
حدود المعدل (per minute)
60 طلب لكل مفتاح · 120 لكل IP ·
30 إنشاء طلب · 1 إنشاء لكل رقم في الدقيقة.
المفتاح الخاطئ
10 محاولات خاطئة من نفس IP خلال 5 دقايق →
429 · MH-2004 لباقي المدة.
الـ endpoints
قائمة المحافظ المتاحة
GET /api/v2/wallets
إنشاء عملية إيداع
POST /api/v2/payment/create
بيبعت طلب تأكيد ( USSD) على موبايل العميل
لرقم المحفظة اللي انت بعته. لسه مفيش فلوس بتحرك —
الفلوس بتتحرك بس لما العميل يوافق على موبايله، وساعتها بتتأكد أنت بـ
payment/confirm.
| الحقل | مطلوب | الوصف |
|---|---|---|
| order_id | نعم | معرّف طلبك — تكراره بيرجّع نفس العملية بدون خصم جديد (MH-2004) |
| number | نعم | رقم محفظة العميل |
| amount | نعم | المبلغ بالجنيه (5 – 10,000) |
| method | نعم | كود المحفظة من GET /wallets |
| webhook_url | لا | لينك الإشعار — ينفع تبعته في الطلب أو تسيبها |
| metadata | لا | أي بيانات إضافية (10 حقول كحد أقصى) بترجعلك زي ما هي |
تأكيد العملية
POST /api/v2/payment/confirm
بيسأل الشبكة: العميل وافق؟ لو آه، الفلوس بتتحصّل ورصيدك على المنصة
بيتحدّث في نفس اللحظة (قيد مزدوج كامل). متكرر النداء بأمان —
العملية المكتملة هترجع مكتملة.
تقدر تبعت order_id بتاعك بدل
reference — الاتنين يوصلوا لنفس العملية.
مكتملة
الفلوس اتحصّلت ورصيدك اتضاف. في الـ data هتلاقي
fee وnet وbalance_impact.
لسه معلقة
العميل ما وافقش لسه — أعد المحاولة بعد ثوانٍ.
انتهت المدة
خلصت نافذة الـ 60 ثانية — طلب جديد بـ
order_id تاني.
سؤال عن عملية
GET /api/v2/payment/info/{reference}
مرجع دائم للعملية مع الحالة والرسوم والصافي. المفتاح السري بس —
المفتاح العام بيرفض هنا بالتصميم. المسار
{reference} بيفهم كمان
order_id بتاعك، وينفع كمان على الـ
query string:
GET /payment/info?reference=MH-…
الـ webhook
بدل ما تلفّ على
payment/info كل شوية، المنصة بتبعت
POST لرابطك أول ما العملية تخلص. الأحداث:
transaction.completed و
transaction.rejected.
إعادة المحاولة تلقائية حتى 3 مرات مع backoff أسّي، وبعد كده يفضل
dead ظاهر في الكونسول.
الهيدرز
في كل إشعار
الـ payload
التوقيع بيتحسب على حقل data بس
التحقق من التوقيع
HMAC-SHA256 على: reference | number | amount | method | status
المفتاح هو sk_… نفسه بتاعك (مش سر منفصل) —
عشان كده مكانه سيرفرك بس. استخدم hash_equals للمقارنة
(ثابتة الزمن)، والمقارنة بـ == تفتح timing attack.
رجّع 200 بسرعة، واعمل business logic في الخلفية —
وإلا التكرار هيوصلك تاني.
الأكواد
والرد نفسه دايماً في نفس الـ envelope:
success · code · message · data · errors · meta.
الأسعار
الإيداع
0%
المبلغ كله بيتحسب في حسابك — المنصة بتكسب من السحب.
السحب
1% + 1
بتاخد على الإجمالي، والحد الأدنى 2 ج.م — الرسوم بتظهر في
fee وnet في كل عملية.
اطلع مفاتيحك من الكونسول وجرّب أول عملية.