مرجع الواجهة البرمجية

واجهة Forypay REST

JSON بسيط عبر HTTPS مع مصادقة bearer. نقطتا نهاية تغطّيان دورة حياة الدفعة بالكامل؛ وثالثة تتحقق من معاملة واحدة تملك بصمتها مسبقًا.

المصادقة

كل طلب يحمل مفتاح API للمشروع كرمز bearer. تُنشأ المفاتيح في لوحة التحكم ضمن مفاتيح API، وتُعرض مرة واحدة عند الإنشاء، وتُخزَّن كبصمة فقط — فإن فقدت مفتاحًا، أبطِله وأصدر غيره.

الترويسة
Authorization: Bearer fp_live_9f2c…

المفاتيح أسرار

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

إنشاء دفعة

POST/api/v1/payments

يسجّل الدفعة التي تتوقّع استلامها ويبدأ مراقبة السلسلة. تخبرك الاستجابة بموعد إغلاق النافذة.

جرّبها
حقول جسم الطلب لإنشاء دفعة
الحقلالنوعالوصف
networkمطلوب"bsc" | "tron"السلسلة التي سيرسل عليها الدافع.
receiverمطلوبstringعنوان الاستلام الخاص بك. 0x… على BSC، و T… على TRON.
amountمطلوبstringالمبلغ العشري كنص، مثل "25.00". يُرسل كنص لتجنّب تدوير الأعداد العائمة.
order_idاختياريstringمرجعك الخاص، حتى 191 حرفًا. يُعاد إرساله مع كل Webhook.
expires_inاختياريintegerالثواني حتى إغلاق نافذة الدفع. الحد الأدنى 60. أهمِله لعدم انتهاء الصلاحية.
expected_senderاختياريstringيقيّد المطابقة على التحويلات القادمة من هذا العنوان.

أضف ترويسة 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
  }'
استجابة 200
{
  "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"
استجابة 200
{
  "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

فحص لمرة واحدة لبصمة تملكها مسبقًا. يقرأ السلسلة مباشرةً ولا يُنشئ سجل دفعة ولا يحدّثه — مفيد للتسوية اليدوية ولترحيل الطلبات التاريخية.

جرّبها
حقول جسم الطلب للتحقق من معاملة
الحقلالنوعالوصف
networkمطلوب"bsc" | "tron"السلسلة المطلوب قراءتها.
transaction_hashمطلوبstringبصمة التحويل المطلوب فحصه.
receiverمطلوبstringالعنوان الذي يجب أن يكون التحويل قد أضاف إليه.
الطلب
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"
  }'
استجابة 200
{
  "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 التسجيل — اذكره عند طلب المساعدة لنجد الطلب بعينه.

استجابة 400
{
  "error": {
    "code": "INVALID_AMOUNT",
    "message": "Invalid amount",
    "request_id": "req_7bQ1xKp0Za"
  }
}
رموز الأخطاء التي تُرجعها الواجهة
الرمزHTTPالسبب
INVALID_REQUEST400فشل الجسم في التحقق من المخطط. الرسالة تسمّي الحقل.
INVALID_AMOUNT400لم يكن المبلغ نصًّا عشريًّا بسيطًا.
INVALID_TOKEN400التوكن غير مُمكَّن على تلك الشبكة.
INVALID_API_KEY401رمز bearer مفقود أو مُشوَّه أو مُبطَل أو غير معروف.
PAYMENT_NOT_FOUND404لا توجد دفعة بهذا المعرّف.
UNKNOWN_TOKEN_DECIMALS500بيانات التوكن الوصفية ناقصة من جانبنا.
VERIFICATION_ERROR500فشلت قراءة السلسلة — أعد المحاولة ثم تواصل معنا.

جرّبها دون كتابة كود

ترسل ساحة التجربة طلبًا حقيقيًّا إلى أي نقطة نهاية موثّقة بمفتاح تلصقه أنت، وتعرض الاستجابة الخام.

افتح ساحة تجربة الواجهة