المطوّرون
واجهة برمجة لمدفوعات العملات المشفرة مصممة للتسوية المباشرة
أنشئ فاتورة بطلب واحد موثَّق، وتعيد Unheld عنوان الدفع والمبلغ الدقيق وعمق التأكيد الذي ستنتظره. تصل المدفوعات مباشرة إلى محفظة تتحكم بها أنت — والواجهة لا تحتفظ أبدًا بما تُبلغ عنه.
إنشاء فاتورة
طلب POST واحد. يُكتب المبلغ كما يكتبه الإنسان ويُحوَّل في الخادم حسب منازل الأصل العشرية، فلا تحوّل يدويًا إلى الوحدات الأساسية أبدًا.
curl -X POST https://api.unheld.io/api/v1/invoices \
-H "Authorization: Bearer $UNHELD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chainId": "11155111",
"assetType": "native",
"amountDecimal": "0.05",
"expiresInSeconds": 900,
"metadata": { "orderId": "A-1043" }
}'الاستجابة
{
"id": "e2b0…",
"status": "CREATED",
"receiveAddress": "0x…",
"expectedAmount": "50000000000000000",
"minConfirmations": 3,
"expiresAt": "2026-08-10T14:15:00.000Z",
"instructions": {
"chainId": "11155111",
"to": "0x…",
"amount": "50000000000000000",
"assetType": "native"
}
}يُشتق receiveAddress من محفظتك ويُقفل على هذه الفاتورة. وexpectedAmount بالوحدات الأساسية. أما minConfirmations فهو حد الشبكة نفسها، وليس إعدادًا اخترعناه.
المصادقة والصلاحيات
المفاتيح رموز bearer تُنشأ في لوحة التحكم وتُعرض مرة واحدة. ولكل مفتاح قائمة صلاحيات صريحة، ويُرفض الطلب إن لم يحمل المفتاح صلاحية ذلك المسار.
الصلاحيات المتاحة
- invoices:write
- invoices:read
- webhooks:write
- webhooks:read
- balances:read
- customers:write
- customers:read
- subscriptions:write
- subscriptions:read
امنح أضيق مجموعة تكفي. المفتاح الذي ينشئ الفواتير فقط لا يستطيع قراءة عملائك، ومفتاح القراءة المسرَّب لا يستطيع تحريك شيء — لأن لا شيء في هذه الواجهة يستطيع ذلك.
webhooks يمكنك التحقق منها
كل عملية تسليم موقَّعة. والتوقيع هو HMAC-SHA256 للطابع الزمني والجسم الخام موصولين بنقطة، باستخدام سر webhook الخاص بك، ويُرسل بصيغة سداسية عشرية.
التحقق من عملية تسليم
const signature = crypto
.createHmac("sha256", webhookSecret)
.update(`${req.headers["x-timestamp"]}.${rawBody}`)
.digest("hex");
crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(req.headers["x-signature"])
);قارن البصمات بزمن ثابت، وارفض أي طابع زمني خارج نافذة التسامح لديك، وتعامل مع X-Request-Id كمفتاح عدم تكرار: فالمحاولات المعادة تستخدم القيمة نفسها، ووصول الحدث ذاته مرتين أمر طبيعي ويجب ألا يُعالَج مرتين.
أحداث الفاتورة
تمر الدفعة عبر حالات بدل أن تنتقل فجأة من غير مدفوعة إلى مدفوعة، وكل انتقال هو webhook. والدفع الناقص والدفع الزائد حدثان مستقلان، لا أخطاء.
| الحدث | ما الذي حدث |
|---|---|
| invoice.created | الفاتورة موجودة وعنوان الاستلام قيد المراقبة. |
| invoice.receiving | رُصدت معاملة دفع على الشبكة لكنها لم تُؤكَّد بعد. |
| invoice.confirming | الدفعة قيد التأكيد ولم تبلغ حد الشبكة. |
| invoice.paid | مؤكَّدة بالكامل بالعمق الذي تشترطه الشبكة. من الآمن تنفيذ الطلب. |
| invoice.underpaid | وصل أقل من المتوقع. المدفوعات الجزئية تتراكم، فقد يُكملها تحويل ثانٍ. |
| invoice.overpaid | وصل أكثر من المتوقع، وسُجِّل بدقة بدل تقريبه. |
| invoice.expired | أُغلقت النافذة دون سداد كامل. |
اختبر المسار كاملًا مجانًا
اختبر الفواتير والاكتشاف والتأكيدات وwebhooks بلا أموال حقيقية. رموز الاختبار بلا قيمة مالية، ونشاط شبكة الاختبار ليس دفعة حقيقية.
نطاق الخدمة
- لا تحتفظ بالأموال إطلاقًا. ولا يوجد مسار رصيد تسحب منه، لأن المدفوعات تصل إلى عنوانك وتبقى فيه.
- لا تحوّل ولا تسوّي بالعملات التقليدية. تصل المدفوعات بالأصل الذي أُرسلت به وعلى الشبكة نفسها.
- لا توجد بعد حزم SDK رسمية. كل ما هنا HTTP بسيط، وننشر أمثلة بدل حزم قد نسيء صيانتها.
أسئلة المطوّرين
هل توجد بيئة اختبار؟
اختبر الفواتير والاكتشاف والتأكيدات وwebhooks بلا أموال حقيقية. رموز الاختبار بلا قيمة مالية، ونشاط شبكة الاختبار ليس دفعة حقيقية.
كيف أتجنّب معالجة الـwebhook نفسه مرتين؟
استخدم X-Request-Id كمفتاح عدم تكرار. تعيد المحاولات استخدام القيمة نفسها، فسجّلها وتجاهل التكرار. والمحاولات المعادة متوقعة: التسليم الفاشل يُعاد وفق جدول بدل أن يُهمل.
هل عليّ تحويل المبالغ إلى الوحدات الأساسية بنفسي؟
لا. أرسل amountDecimal كما يكتبه الإنسان وتتولى الواجهة تحويله حسب منازل الأصل العشرية. وتعيد الاستجابة expectedAmount بالوحدات الأساسية، فتبقى الصيغتان صريحتين ولا يمكن أن تتباعدا.
جرى التحقق من الأمثلة على الواجهة المباشرة في .
ابنِ على شبكة الاختبار أولًا
أنشئ مفتاحًا، ووجّهه إلى شبكة اختبار، وامضِ في المسار كاملًا قبل أن يتحرك أي شيء حقيقي.
ابدأ مجانًا