إنتقل إلى المحتوى الرئيسي

البداية السريعة

تكامل دفع بالحد الأدنى: إنشاء فاتورة عبر API ومعالجة إشعار الدفع. ويتناول القسم الأخير تسليم الطلب. الأمثلة مكتفية بذاتها؛ ولا تستخدم أي SDK.

تلميح

تعمل مع وكيل ذكاء اصطناعي؟ أعطه نسخة markdown من هذه الصفحة. فيها تفصيل كافٍ لبناء تكامل لموقعك أو متجرك.

ما تحتاج إليه

القيمةمن أين تحصل عليها
مفتاح APIقسم عمليات التكامل (Integrations)
معرّف المشروعقسم المشاريع (Projects)
المفتاح السري للـ Webhookإعدادات المشروع

في إعدادات المشروع نفسها، حدّد Webhook URL — عنوان معالج الإشعارات على خادمك. HTTPS فقط؛ ولا تتبع الخدمة عمليات إعادة التوجيه.

تستخدم الأمثلة قيمًا اختبارية — استبدلها بقيمك.

إنشاء فاتورة

POST https://api.bitsby.app/invoices/create، وتمرّر مفتاح API في ترويسة Authorization.

المعطىإلزاميالقيمة
projectIdنعممعرّف المشروع، UUID
amountFiatنعممبلغ الفاتورة
currencyFiatنعمالعملة: USD وEUR وRUB
timeToPayنعممهلة الدفع بالساعات: 0.5 و1 و3 و6 و12
descriptionلاالوصف، يظهر للمشتري على صفحة الدفع
serviceDataلابيانات خدمية لا تظهر للمشتري. ننصح بتمرير رقم الطلب: فهو يعود في إشعار الدفع
curl -X POST https://api.bitsby.app/invoices/create \
-H "Authorization: Token MSvL2ltaDZdWVjmZURURMVWhqSJLT2NURjhL2Fla1Z1T1IxQTltKs1T3Ay" \
-F "projectId=9deea1e2-0c08-41a3-bdc2-a34eada3892d" \
-F "amountFiat=49.90" \
-F "currencyFiat=USD" \
-F "timeToPay=1" \
-F "description=Order 4172" \
-F "serviceData=order-4172"

الاستجابة:

{
"result": "success",
"data": {
"id": "ade9550d-3dc7-4fd3-b94e-3b4c12aaaa0c",
"uid": "MXNj4m8HhcM4",
"createDatetime": "2026-09-14 10:12:03",
"timeToPayDatetime": "2026-09-14 11:12:03",
"commissionFiatUSD": 0.5,
"amountFiatUSD": 49.9,
"url": "https://dash.bitsby.app/invoices/pay/MXNj4m8HhcM4"
}
}

احفظ data.id مع الطلب وأرسل المشتري إلى data.url — صفحة الدفع. أوصل الرابط بأي طريقة تريدها: إعادة توجيه، أو رسالة بريد إلكتروني، أو رسالة من بوت. تبقى الفاتورة صالحة حتى timeToPayDatetime (UTC).

معالجة الإشعار

عندما تنتقل الفاتورة إلى الحالة مدفوعة (Paid)، ترسل الخدمة طلب POST إلى Webhook URL المحدَّد في المشروع. الجسم بصيغة JSON؛ والتوقيع في الترويسات:

الترويسةالقيمة
X-Timestampوقت الإرسال، unix time بالثواني
X-Signaturesha256= + قيمة HMAC-SHA256 بالنظام الست عشري للسلسلة <timestamp>.<request body>

مفتاح التوقيع هو المفتاح السري للـ Webhook. ويُحسب التوقيع على الجسم الخام للطلب، لذلك تحقق منه قبل تحليل JSON.

<?php
$secret = 'k7QwR2mZ9tXbN4vL8sJpH3dF6yA1cE0u';

$body = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_TIMESTAMP'] ?? '';
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';

// Reject replayed requests: allow up to 5 minutes of clock drift
if (abs(time() - (int)$timestamp) > 300) {
http_response_code(400);
exit;
}

$expected = 'sha256='.hash_hmac('sha256', $timestamp.'.'.$body, $secret);

if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit;
}

$invoice = json_decode($body, true)['invoice'];

if ($invoice['status'] === 'paid') {
// $invoice['serviceData'] — the order id passed at creation: 'order-4172'
// $invoice['amountFiat'] — the original invoice amount: 49.9
// Issue the order here, see the next section
}

http_response_code(200);

أجب برمز 2xx خلال 10 ثوانٍ. أي رمز آخر أو إعادة توجيه أو انتهاء مهلة يُعد تسليمًا فاشلًا: تعيد الخدمة المحاولة على فترات متزايدة من 5 دقائق حتى 24 ساعة، ثم تتوقف. انقل المعالجة الطويلة إلى طابور: أجب بالرمز 200 أولًا، ثم اشتغل على الطلب.

صيغة الإشعار الكاملة ومرجع الحقول في قسم Webhook URL.

تسليم الطلب

إشعار متحقَّق منه بالحالة paid يؤكد الدفع. خطوات التسليم:

  1. ابحث عن الطلب عبر invoice.serviceData — القيمة المُمرَّرة عند إنشاء الفاتورة (order-4172).
  2. تحقق عبر invoice.id مما إذا كانت هذه الفاتورة قد سُلِّمت من قبل. قد يصل إشعار بالمعرّف invoice.id نفسه أكثر من مرة — سلّم الطلب مرة واحدة واحفظ علامة المعالجة.
  3. تحقق من المبلغ والعملة مقابل invoice.amountFiat وinvoice.currencyFiat — وهما قيمتا الفاتورة الأصليتان ولا تتغيران أبدًا. أما amountFiatUSD فتُستبدل بالمبلغ المستلم فعليًا. قارن المبالغ كأرقام لا كسلاسل نصية: تُحذف الأصفار الأخيرة، فتصل 49.90 بالشكل 49.9. وإذا لم تطابق القيم الطلب، وجّه الفاتورة إلى مراجعة يدوية بدل التسليم — هذه الحالات يتناولها قسم ربط الدفعات واختلاف المبالغ.
  4. سلّم الطلب وعلّمه كمعالَج.

لا تتحقق من مهلة الدفع عند التسليم: فقد تكون الدفعة قد تأكدت على السلسلة بعد timeToPayDatetime، ويستطيع التاجر ربط الدفعة بالفاتورة يدويًا. الإشعار نفسه يؤكد الدفع.

ما التالي