تخطي إلى المحتوى الرئيسي
← العودة إلى الوثائق

مرجع API

نقاط نهاية REST لإضافة DHRU والتكاملات المباشرة.

مرجع API

Base URL: https://triapay.net. تُصادَق طلبات server-to-server باستخدام Authorization: Bearer <api_key>. تستخدم جلسات المتصفح ملف تعريف الارتباط الذي يضعه /auth/login بالإضافة إلى رمز CSRF من /auth/csrf.

المصادقة

مستويان من المفاتيح لكل حساب:

البادئة الاستخدام
pk_live_* الإنتاج. لا يمكن كشفه بعد الإنشاء. درّسه للاستبدال.
pk_test_* Sandbox. قابل للكشف من اللوحة. خاصّ بنقاط نهاية sandbox فقط.

درّس المفاتيح و webhook secrets من صفحة Integration. يتطلّب التدوير email OTP.

إنشاء طلب

POST /api/v1/orders
Authorization: Bearer pk_live_...
Content-Type: application/json

{
  "invoiceId": 12345,
  "userId": 678,
  "baseAmount": "10.00",
  "currency": "USD",
  "chain": "bep20",
  "asset": "USDT",
  "idempotencyKey": "01HT8X1V...-uuid",
  "returnUrl": "https://shop.example.com/orders/12345"
}
Field النوع ملاحظات
invoiceId int invoice id الخاص بـ DHRU عندك.
userId int user id الخاص بـ DHRU لنسبة الإيداع.
baseAmount string سلسلة عشرية. تُضاف لاحقة مبلغ صغيرة لـ crypto chains.
currency string عملة المصدر.
chain enum trc20 | bep20 | binance_pay. يقبل BEP20 و TRC20 أيضًا تحويلات Binance الداخلية (off-chain) إلى عنوان الإيداع نفسه.
asset enum USDT | USDC. TRC20 يدعم USDT فقط.
idempotencyKey string UUID. الطلبات المتكرّرة بنفس الـ payload تُعيد الطلب نفسه.
returnUrl string وجهة إعادة التوجيه بعد انتهاء الطلب.

الاستجابة

{
  "orderId": 4711,
  "checkoutToken": "ck_a8f3...",
  "checkoutUrl": "https://triapay.net/checkout/ck_a8f3...",
  "expectedAmount": "10.0001",
  "matchCode": 1,
  "expiresAt": "2026-05-08T05:30:00Z",
  "status": "pending"
}

أعد توجيه العميل إلى checkoutUrl. استخدم expectedAmount بصفته المبلغ الدقيق الذي يجب أن يرسله العميل.

حالة الطلب

GET /api/v1/orders/{idempotencyKey}/status
Authorization: Bearer pk_live_...
{
  "orderId": 4711,
  "status": "credited",
  "txHash": "0xabc...",
  "matchedAmount": "10.0001",
  "creditedAt": "2026-05-08T05:18:42Z"
}

تشكّل حالات الطلب آلة حالات صندوقَ-أسود:

  • pending — في انتظار الدفع.
  • matched — وصلت الأموال، الإيداع قيد التنفيذ.
  • credited — نجاح نهائي. تمّ إقرار الـ webhook.
  • expired — نهائي. لم يدفع العميل في الوقت المحدّد.
  • failed — نهائي. استنفد تسليم الـ webhook المحاولات.
  • overpaid — نهائي. أرسل العميل أكثر من المتوقّع. يُقيَّد الطلب ويُعلَّم للمراجعة اليدوية.

الوصولات المتأخرة (تسوية الـ chain بعد expiresAt) لا تُقيَّد تلقائيًا. استرجعها من Admin → Orphan transactions.

مساعدات sandbox

متاحة فقط مع pk_test_*. افرض الحالات النهائية دون انتظار تسوية الـ chain:

POST /api/v1/sandbox/orders/{idempotencyKey}/force-match
POST /api/v1/sandbox/orders/{idempotencyKey}/force-credit
POST /api/v1/sandbox/orders/{idempotencyKey}/force-expire
POST /api/v1/sandbox/webhook/replay

Body فارغ. تُعيد الطلب المحدَّث. تتضمّن webhooks الخاصة بـ sandbox X-Payment-Mode: sandbox؛ تقطعها إضافة DHRU المدمجة دون قيد أي فاتورة.

checkout للعميل

مصادقة بالرمز فقط. تستخدمها صفحة checkout المستضافة:

GET  /api/v1/checkout/{token}/status
GET  /api/v1/checkout/{token}/methods
POST /api/v1/checkout/{token}/select-method

Body الخاص بـ select-method: {"chain": "bep20", "asset": "USDT"}. تُعيد الطلب مع عنوان الإيداع، والمبلغ المتوقّع، و QR data URI، و match code.

الأخطاء

غلاف JSON؛ status HTTP يعكس الفئة:

{ "error": "invalid_credentials", "code": "unauthorized" }
HTTP code متى
400 validation_error شكل payload غير صالح، حقول إلزامية مفقودة.
401 unauthorized bearer أو جلسة مفقودة أو غير صالحة.
403 forbidden IP غير موجود في allowlist، مفتاح live على نقطة sandbox-only.
404 not_found الرمز منتهي الصلاحية، idempotency key غير معروف.
409 conflict إعادة استخدام idempotency-key مع payload مختلف.
429 rate_limited احترم رأس Retry-After (بالثواني).
500 internal خطأ في الخادم. أعد المحاولة مع backoff.

تُطبَّق rate limits لكل حساب. احترم Retry-After عند كلّ 429.

Idempotency

كل طلب يغيّر الحالة يتطلّب idempotencyKey. تكرار المفتاح نفسه بـ payload نفسه يُعيد الطلب الأصلي. تكرار المفتاح نفسه بـ payload مختلف يُعيد:

{ "error": "idempotency_payload_mismatch", "code": "conflict" }

ولّد المفتاح كـ UUIDv4 لكل فاتورة واحتفظ به على جانبك حتى لا تؤدّي إعادات المحاولة بعد فشل الشبكة إلى تحصيل مزدوج.


تحتاج المزيد؟

أي شيء يتجاوز هذه الصفحة متاح بموجب اتفاقية شراكة. تواصل معنا عبر WhatsApp من الصفحة الرئيسية.