مرجع الواجهة البرمجية
واجهة Forypay REST
JSON بسيط عبر HTTPS مع مصادقة bearer. نقطتا نهاية تغطّيان دورة حياة الدفعة بالكامل؛ وثالثة تتحقق من معاملة واحدة تملك بصمتها مسبقًا.
المصادقة
كل طلب يحمل مفتاح API للمشروع كرمز bearer. تُنشأ المفاتيح في لوحة التحكم ضمن مفاتيح API، وتُعرض مرة واحدة عند الإنشاء، وتُخزَّن كبصمة فقط — فإن فقدت مفتاحًا، أبطِله وأصدر غيره.
Authorization: Bearer fp_live_9f2c…المفاتيح أسرار
إنشاء دفعة
POST/api/v1/payments
يسجّل الدفعة التي تتوقّع استلامها ويبدأ مراقبة السلسلة. تخبرك الاستجابة بموعد إغلاق النافذة.
جرّبها| الحقل | النوع | الوصف |
|---|---|---|
| مطلوب | السلسلة التي سيرسل عليها الدافع. | |
| مطلوب | عنوان الاستلام الخاص بك. 0x… على BSC، و T… على TRON. | |
| مطلوب | المبلغ العشري كنص، مثل "25.00". يُرسل كنص لتجنّب تدوير الأعداد العائمة. | |
| اختياري | مرجعك الخاص، حتى 191 حرفًا. يُعاد إرساله مع كل Webhook. | |
| اختياري | الثواني حتى إغلاق نافذة الدفع. الحد الأدنى 60. أهمِله لعدم انتهاء الصلاحية. | |
| اختياري | يقيّد المطابقة على التحويلات القادمة من هذا العنوان. |
أضف ترويسة Idempotency-Key لتجعل إعادة المحاولة آمنة: الطلب المتكرّر بالمفتاح ذاته يُرجع الدفعة الأصلية بدل إنشاء دفعة ثانية.
curl -X POST https://your-host/api/v1/payments \
-H "Authorization: Bearer $FP_API_KEY" \
-H "Idempotency-Key: ORDER-1042" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ORDER-1042",
"network": "bsc",
"receiver": "0x2f1a…9c3e",
"amount": "25.00",
"expires_in": 1800
}'{
"id": "pay_8Fq2mZx1LrKd",
"order_id": "ORDER-1042",
"network": "bsc",
"token": "USDT",
"amount": "25.00",
"receiver": "0x2f1a…9c3e",
"status": "PENDING",
"expires_at": "2026-08-17T14:35:00.000Z"
}جلب دفعة
GET/api/v1/payments/{id}
يُرجع الحالة الراهنة مع كل تحويل مطابق. استخدمه للتسوية، أو كبديل إذا كانت نقطة نهاية Webhook لديك غير متاحة.
جرّبهاcurl https://your-host/api/v1/payments/pay_8Fq2mZx1LrKd \
-H "Authorization: Bearer $FP_API_KEY"{
"id": "pay_8Fq2mZx1LrKd",
"order_id": "ORDER-1042",
"network": "bsc",
"token": "USDT",
"expected_amount": "25.00",
"detected_amount": "25.00",
"status": "CONFIRMED",
"transaction_hash": "0x9d4c…7b21",
"sender": null,
"receiver": "0x2f1a…9c3e",
"created_at": "2026-08-17T14:05:00.000Z",
"detected_at": "2026-08-17T14:05:12.000Z",
"confirmed_at": "2026-08-17T14:05:21.000Z",
"transfers": [ /* … */ ]
}سرد المدفوعات
GET/api/v1/payments
يُرجع المدفوعات الحديثة، الأحدث أولًا، مغلَّفة في مصفوفة data. أضف limit لتغيير حجم الصفحة — القيمة الافتراضية 20 والحد الأقصى 100.
curl "https://your-host/api/v1/payments?limit=50" \
-H "Authorization: Bearer $FP_API_KEY"التحقق من معاملة
POST/api/v1/verify
فحص لمرة واحدة لبصمة تملكها مسبقًا. يقرأ السلسلة مباشرةً ولا يُنشئ سجل دفعة ولا يحدّثه — مفيد للتسوية اليدوية ولترحيل الطلبات التاريخية.
جرّبها| الحقل | النوع | الوصف |
|---|---|---|
| مطلوب | السلسلة المطلوب قراءتها. | |
| مطلوب | بصمة التحويل المطلوب فحصه. | |
| مطلوب | العنوان الذي يجب أن يكون التحويل قد أضاف إليه. |
curl -X POST https://your-host/api/v1/verify \
-H "Authorization: Bearer $FP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"network": "bsc",
"transaction_hash": "0x9d4c…7b21",
"receiver": "0x2f1a…9c3e"
}'{
"valid": true,
"status": "CONFIRMED",
"network": "bsc",
"transaction_hash": "0x9d4c…7b21",
"sender": "0x8f2a…1b4e",
"receiver": "0x2f1a…9c3e",
"amount": "25.00"
}حالات الدفعة
تبدأ الدفعة عند PENDING وتتقدّم إلى الأمام فقط. هذه هي الحالات التي ستراها في Webhooks واستجابات الواجهة ولوحة التحكم.
| الحالة | المعنى |
|---|---|
| قيد الانتظار | أُنشئت وتنتظر تحويلًا مطابقًا على السلسلة. |
| مكتشفة | وُجد تحويل مطابق؛ فتُسوّى الدفعة فورًا. |
| مؤكّدة | تمت التسوية. آمن لتنفيذ الطلب. |
| دفع زائد | تمت التسوية، لكن الدافع أرسل أكثر من المبلغ المتوقّع. |
| منتهية الصلاحية | أُغلقت النافذة قبل وصول تحويل مطابق. |
Webhooks
حدّد عنوان Webhook على المشروع، وسنرسل JSON بطلب POST مع تقدّم الدفعة. تُصطفّ الأحداث وتُعاد المحاولة بتراجع أُسّي حتى تُرجع نقطة النهاية لديك رمز 2xx، فتعامل مع المعالجات على أنها آمنة للتكرار — فقد يصل الحدث نفسه مرتين.
payment.detected— ظهر تحويل مطابق على السلسلة وتُسوّيت الدفعةpayment.confirmed— انتقلت الدفعة إلى حالة التسوية النهائيةpayment.expired— أُغلقت النافذة دون دفع
كل تسليم يحمل توقيع HMAC-SHA256 مشتقًّا من سرّ Webhook للمشروع، محسوبًا على ترويسة الوقت وجسم الطلب الخام موصولين بنقطة. قارنه بمقارنة ثابتة الزمن قبل الثقة بالحمولة، وارفض ما مضى عليه أكثر من خمس دقائق، ودوّر السرّ من إعدادات المشروع إن تعرّض للكشف يومًا.
POST /your/webhook
Content-Type: application/json
X-Forypay-Event: payment.confirmed
X-Forypay-Delivery: whk_3Kd9vQ2mTz
X-Forypay-Timestamp: 1755820800
X-Forypay-Signature: sha256=6f1b…a92c
{
"event": "payment.confirmed",
"data": {
"payment_id": "pay_8Fq2mZx1LrKd",
"order_id": "ORDER-1042",
"status": "CONFIRMED",
"transaction_hash": "0x9d4c…7b21"
}
}الأخطاء
تستخدم الأخطاء رموز حالة HTTP المعتادة وجسمًا متسقًا. ويستحق request_id التسجيل — اذكره عند طلب المساعدة لنجد الطلب بعينه.
{
"error": {
"code": "INVALID_AMOUNT",
"message": "Invalid amount",
"request_id": "req_7bQ1xKp0Za"
}
}| الرمز | HTTP | السبب |
|---|---|---|
| 400 | فشل الجسم في التحقق من المخطط. الرسالة تسمّي الحقل. | |
| 400 | لم يكن المبلغ نصًّا عشريًّا بسيطًا. | |
| 400 | التوكن غير مُمكَّن على تلك الشبكة. | |
| 401 | رمز bearer مفقود أو مُشوَّه أو مُبطَل أو غير معروف. | |
| 404 | لا توجد دفعة بهذا المعرّف. | |
| 500 | بيانات التوكن الوصفية ناقصة من جانبنا. | |
| 500 | فشلت قراءة السلسلة — أعد المحاولة ثم تواصل معنا. |
جرّبها دون كتابة كود
ترسل ساحة التجربة طلبًا حقيقيًّا إلى أي نقطة نهاية موثّقة بمفتاح تلصقه أنت، وتعرض الاستجابة الخام.
افتح ساحة تجربة الواجهة