مركز التوثيق ودليل المطورين الشامل
دليلك الكامل لمعرفة تفاصيل العمولات، بوابات الإيداع والسحب، محرك تبديل العملات، وطريقة ربط بوابة الدفع عبر REST API.
محافظ العملات المتعددة
يتم إنشاء المحفظة الأساسية تلقائياً بعملة دولتك (الجنيه المصري، الدينار العراقي، الريال السعودي، الدولار...)، مع إمكانية فتح محافظ لجميع العملات العالمية الأخرى بنقرة واحدة.
محرك تبديل العملات FX
نظام تبديل مالي متطور بأسعار بيع وشراء منفصلة، توجيه دقيق للأزواج المسموحة، وحدود دنيا وقصوى وعمولة ثابتة ونسبية واضحة.
التحويلات البنكية Net30
دعم سحب أرباح التجار عبر الحوالات البنكية المجدولة شهرياً (Net30 كل أول يوم عمل من كل شهر) للدول المعتمدة.
💳 رسوم طرق الإيداع والسحب المتاحة في قاعدة البيانات
| الوسيلة | النوع | العملة / الدولة | الحد الأدنى - الأقصى | رسوم المزود الخارجي | عمولة منصة Paynimb | وقت التنفيذ |
|---|
🔄 أسعار وعمولات أزواج تبديل العملات (FX Pairs)
| الزوج | سعر الشراء (Buy Rate) | سعر البيع (Sell Rate) | العمولة الثابتة + النسبة | الحدود |
|---|
1. إنشاء جلسة دفع (Create Checkout Session)
يقوم متجرك بإرسال طلب إلى الـ API لتوليد رابط صفحة الدفع المخصصة للعميل على Paynimb.
curl -X POST https://paynimb.com/api/v1/checkout/create \
-H "Content-Type: application/json" \
-H "X-API-KEY: YOUR_PUBLIC_KEY" \
-H "X-API-SECRET: YOUR_SECRET_KEY" \
-d '{
"amount": 49.99,
"currency": "USD",
"order_id": "ORD-2026-991",
"customer_email": "client@example.com",
"success_url": "https://mystore.com/order/success",
"cancel_url": "https://mystore.com/cart"
}'
<?php
$payload = [
'amount' => 49.99,
'currency' => 'USD',
'order_id' => 'ORD-2026-991',
'customer_email' => 'client@example.com',
'success_url' => 'https://mystore.com/order/success',
'cancel_url' => 'https://mystore.com/cart'
];
$ch = curl_init('https://paynimb.com/api/v1/checkout/create');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-KEY: YOUR_PUBLIC_KEY',
'X-API-SECRET: YOUR_SECRET_KEY'
]
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
// Redirect client to hosted checkout
header('Location: ' . $response['checkout_url']);
exit;
const res = await fetch('https://paynimb.com/api/v1/checkout/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': 'YOUR_PUBLIC_KEY',
'X-API-SECRET': 'YOUR_SECRET_KEY'
},
body: JSON.stringify({
amount: 49.99,
currency: 'USD',
order_id: 'ORD-2026-991',
customer_email: 'client@example.com',
success_url: 'https://mystore.com/order/success',
cancel_url: 'https://mystore.com/cart'
})
});
const data = await res.json();
window.location.href = data.checkout_url;
import requests
headers = {
'Content-Type': 'application/json',
'X-API-KEY': 'YOUR_PUBLIC_KEY',
'X-API-SECRET': 'YOUR_SECRET_KEY'
}
data = {
'amount': 49.99,
'currency': 'USD',
'order_id': 'ORD-2026-991',
'customer_email': 'client@example.com',
'success_url': 'https://mystore.com/order/success',
'cancel_url': 'https://mystore.com/cart'
}
response = requests.post('https://paynimb.com/api/v1/checkout/create', headers=headers, json=data)
checkout_data = response.json()
print("Checkout URL:", checkout_data['checkout_url'])
نموذج الاستجابة الناجحة (HTTP 201 Created):
{
"status": "success",
"charge_id": "ch_7a9f1c2e8d3b4a5690f1234567890abc",
"amount": 49.99,
"currency": "USD",
"mode": "live",
"checkout_url": "https://paynimb.com/checkout/ch_7a9f1c2e8d3b4a5690f1234567890abc",
"expires_at": "2026-09-05T21:30:00+00:00"
}
2. التحقق اليدوي من حالة الدفع (Verify Charge Status)
يمكن لمتجرك الاستعلام المباشر عن حالة أي جلسة دفع في أي وقت.
curl -X GET https://paynimb.com/api/v1/checkout/verify/ch_7a9f1c2e8d3b4a5690f1234567890abc \
-H "X-API-KEY: YOUR_PUBLIC_KEY" \
-H "X-API-SECRET: YOUR_SECRET_KEY"
نموذج استجابة التحقق (HTTP 200 OK):
{
"status": "success",
"charge_id": "ch_7a9f1c2e8d3b4a5690f1234567890abc",
"paid": true,
"amount": 49.99,
"transaction_id": "TXN-8821940182",
"order_id": "ORD-2026-991",
"paid_at": "2026-09-05 20:30:15"
}
التحقق من صحة إشعار الـ Webhook وتأمين المتجر
عند إتمام أي عملية بنجاح، يُرسل خادم Paynimb إشعار HTTP POST إلى رابط الـ Webhook الخاص بك مصحوباً بهيدر التوقيع الرقمي X-Paynimb-Signature.
1. نموذج بيانات الإشعار المرسل (JSON Payload):
{
"event": "payment.succeeded",
"charge_id": "ch_7a9f1c2e8d3b4a5690f1234567890abc",
"order_id": "ORD-2026-991",
"amount": 49.99,
"currency": "USD",
"transaction_id": "TXN-8821940182",
"timestamp": 1757104215
}
2. كود التحقق من التوقيع ومنع التلاعب (PHP Backend):
<?php
// 1. استقبال الـ Raw Payload والهيدر
$rawPayload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_PAYNIMB_SIGNATURE'] ?? '';
$webhookSecret = 'YOUR_WEBHOOK_SECRET'; // من لوحة تحكم التاجر
// 2. حساب التوقيع المتوقع باستخدام HMAC-SHA256
$expectedSignature = hash_hmac('sha256', $rawPayload, $webhookSecret);
// 3. مقارنة التوقيع في وقت ثابت لمنع Timing Attacks
if (!hash_equals($expectedSignature, $signature)) {
http_response_code(400);
echo json_encode(['error' => 'Invalid signature']);
exit;
}
// 4. معالجة الحدث بعد التأكد من صحة التوقيع 100%
$eventData = json_decode($rawPayload, true);
$eventName = $eventData['event'] ?? '';
switch ($eventName) {
// ==========================================
// 1. نجاح دفع فاتورة / طلب (One-time Payment)
// ==========================================
case 'payment.succeeded':
$orderId = $eventData['order_id']; // معرف الطلب في متجرك (مثال: ORD-1002)
$chargeId = $eventData['charge_id']; // معرف جلسة الدفع في Paynimb (ch_...)
$transactionId = $eventData['transaction_id']; // رقم المعاملة المرجعي (TXN-...)
$amount = (float)$eventData['amount']; // المبلغ المدفوع (مثال: 49.99)
$currency = $eventData['currency']; // عملة الدفع (USD, EGP, SAR...)
$timestamp = $eventData['timestamp']; // وقت الدفع Unix timestamp
// مثال الإجراء: تحديث حالة الطلب إلى "مدفوع" وشحن الرصيد أو إرسال المنتج للعميل
// updateOrderStatus($orderId, 'paid', $transactionId);
// sendOrderConfirmationEmail($orderId);
break;
// ==========================================
// 2. فشل عملية دفع (Payment Failed)
// ==========================================
case 'payment.failed':
$orderId = $eventData['order_id'];
$chargeId = $eventData['charge_id'];
$failureReason = $eventData['reason'] ?? 'رصيد غير كافٍ أو تم إلغاء العملية من العميل';
// مثال الإجراء: إشعار العميل بفشل المحاولة وإتاحة رابط إعادة الدفع
// markOrderAsFailed($orderId, $failureReason);
// notifyCustomerPaymentFailed($orderId);
break;
// ==========================================
// 3. اشتراك جديد / تجربة مجانية (New Subscription)
// ==========================================
case 'subscription.created':
$subUuid = $eventData['subscription_uuid']; // معرف الاشتراك الفريد (sub_...)
$planUuid = $eventData['plan_uuid']; // معرف الخطة (plan_...)
$planTitle = $eventData['plan_title']; // اسم الباقة (مثال: Pro Monthly)
$customerEmail = $eventData['customer_email']; // بريد المشترك
$amount = (float)$eventData['amount'];
$currency = $eventData['currency'];
$billingCycle = $eventData['billing_cycle']; // monthly, yearly, weekly
$nextBilling = $eventData['next_billing_date']; // تاريخ التجديد القادم (2026-10-11)
$isTrial = !empty($eventData['is_trial']); // هل هو في فترة تجريبية؟
// مثال الإجراء: ترقية حساب العميل في موقعك لمنحه صلاحيات الباقة
// grantUserSubscription($customerEmail, $planTitle, $nextBilling);
break;
// ==========================================
// 4. تجديد اشتراك دوري بنجاح (Subscription Renewed)
// ==========================================
case 'subscription.renewed':
$subUuid = $eventData['subscription_uuid'];
$amount = (float)$eventData['amount'];
$currency = $eventData['currency'];
$nextBilling = $eventData['next_billing_date']; // موعد الفاتورة القادمة الجديد
$txnId = $eventData['transaction_id'];
// مثال الإجراء: تمديد صلاحية العميل لشهر أو سنة إضافية
// extendSubscriptionAccess($subUuid, $nextBilling);
break;
// ==========================================
// 5. إلغاء اشتراك أو إيقاف التجديد (Subscription Cancelled)
// ==========================================
case 'subscription.cancelled':
$subUuid = $eventData['subscription_uuid'];
$cancelledAt = $eventData['cancelled_at'];
$graceUntil = $eventData['access_until'] ?? null; // إتاحة الخدمة حتى نهاية المدة المدفوعة
// مثال الإجراء: إيقاف الحساب أو تركه حتى انتهاء الفترة الحالية
// revokeSubscriptionAccess($subUuid, $graceUntil);
break;
// ==========================================
// 6. فشل تجديد الاشتراك (Past Due / Balance Failed)
// ==========================================
case 'subscription.past_due':
$subUuid = $eventData['subscription_uuid'];
$customerEmail = $eventData['customer_email'];
// مثال الإجراء: إرسال تنبيه بالبريد أو واتساب لتغذية رصيده لإعادة المحاولة
// sendPaymentReminderNotice($customerEmail, $subUuid);
break;
// ==========================================
// 7. فتح نزاع أو شكوى (Dispute / Chargeback Opened)
// ==========================================
case 'dispute.opened':
$disputeId = $eventData['dispute_id'];
$transactionId = $eventData['transaction_id'];
$reason = $eventData['reason'];
$claimAmount = (float)$eventData['claim_amount'];
// مثال الإجراء: تجميد الحساب أو الطلب مؤقتاً ومراجعة الشكوى
// holdAccountOrDeliverables($transactionId, $reason);
break;
// ==========================================
// 8. إرجاع أموال (Refund Processed)
// ==========================================
case 'refund.processed':
$refundId = $eventData['refund_id'];
$orderId = $eventData['order_id'];
$refundAmount = (float)$eventData['amount'];
// مثال الإجراء: تسجيل الاسترجاع وإلغاء صلاحية المنتج الرقمي
// recordRefundInDb($orderId, $refundAmount);
break;
default:
// حدث غير معروف - تسجيله في السجلات للمعاينة
// error_log("Unhandled Paynimb event: " . $eventName);
break;
}
// 5. إرجاع كود 200 OK فوراً لتأكيد الاستلام ومنع إعادة الإرسال
http_response_code(200);
echo json_encode(['status' => 'acknowledged']);
exit;
⚠️ إرشادات أمنية هامة للمطورين:
- استخدم دائماً
file_get_contents('php://input')لقراءة البايلود الخام قبل فك تشفيره لتطابق التوقيع. - استخدم دالة
hash_equals()بدلاً من===لتجنب ثغرات التوقيت الزمني (Timing Attacks). - تأكد من إرجاع كود الاستجابة
200 OKفوراً لكي لا يعيد النظام إرسال الإشعار مرة أخرى.
توثيق ربط الاشتراكات الدورية (Subscriptions API)
يتيح لك نظام الاشتراكات في Paynimb إنشاء باقات دورية (أسبوعية، شهرية، أو سنوية) مع خصم تلقائي وتجديد ذكي وإشعارات Webhook فورية.
/api/v1/subscriptions/plans
إنشاء خطة اشتراك برمجياً
// Headers: X-API-KEY & X-API-SECRET
{
"title": "باقة البريميوم الشهرية",
"price": 19.99,
"currency": "USD",
"billing_cycle": "monthly", // weekly, monthly, yearly
"trial_days": 7,
"description": "وصول كامل لكافة المميزات والخدمات السحابية"
}
أمثلة الاستخدام عبر المكتبات الرسمية (SDKs)
use Paynimb\PaynimbClient;
$client = new PaynimbClient('YOUR_API_KEY', 'YOUR_API_SECRET');
// 1. إنشاء خطة اشتراك
$plan = $client->createPlan([
'title' => 'VIP Pro Subscription',
'price' => 29.99,
'currency' => 'USD',
'billing_cycle' => 'monthly',
'trial_days' => 14
]);
// توجيه العميل لصفحة الاشتراك
$checkoutUrl = $plan['checkout_url'];
const Paynimb = require('paynimb-node');
const client = new Paynimb({ apiKey: 'YOUR_API_KEY', apiSecret: 'YOUR_API_SECRET' });
// إنشاء خطة اشتراك
const plan = await client.createPlan({
title: 'VIP Pro Subscription',
price: 29.99,
currency: 'USD',
billingCycle: 'monthly',
trialDays: 14
});
console.log('Checkout URL:', plan.checkout_url);
from paynimb import PaynimbClient
client = PaynimbClient('YOUR_PUBLIC_KEY', 'YOUR_SECRET_KEY')
plan = client.create_plan({
'title': 'VIP Pro Subscription',
'price': 29.99,
'currency': 'USD',
'billing_cycle': 'monthly',
'trial_days': 14
})
print("Checkout URL:", plan['checkout_url'])
أحداث الـ Webhook الخاصة بالاشتراكات:
subscription.created
يتم إرساله فور اشتراك عميل جديد بنجاح أو بدء فترة التجربة.
subscription.renewed
يتم إرساله عند نجاح تجديد الاشتراك الدوري تلقائياً بالكرون جوب.
subscription.cancelled
يتم إرساله عند إلغاء الاشتراك أو إيقاف التجديد التلقائي.
الإضافات الجاهزة والمكتبات البرمجية الرسمية
قم بالربط والتكامل الفوري مع متجرك أو منصتك دون الحاجة لكتابة كود من الصفر مع دعم التحقق التلقائي من الفواتير والـ IPN
موديول WHMCS (استضافات وخدمات)
إضافة بوابة الدفع الرسمية لمنصة إدارة الاستضافات WHMCS مع معالجة فواتير التجديد التلقائي وتأكيد الدفع عبر Callback IPN الفوري.
/modules/gateways/paynimb.php
إضافة ووكومرس (WooCommerce)
إضافة ووردبريس وووكومرس لقبول المدفوعات والبطاقات وزين كاش وفاس باي في متجرك الإلكتروني مع توجيه سلس وتحديث تلقائي لحالة الطلبات.
/wp-content/plugins/paynimb/
إضافة أوبن كارت (OpenCart)
موديول الدفع الكامل لمتاجر OpenCart مع لوحة إعدادات متكاملة داخل لوحة إدارة المتجر لدعم العملات المتعددة.
extension/payment/paynimb
موديول بريستاشوب (PrestaShop)
إضافة بوابة PayNimb الرسمية لمتاجر PrestaShop العالمية مع دعم التثبيت التلقائي بنقرة واحدة من لوحة التحكم.
/modules/paynimb/
حزمة PHP & Laravel SDK
مكتبة برمجية PSR-4 متوافقة مع إطار عمل Laravel و Symfony مع دعم إنشاء عمليات الدفع والتحقق من التوقيع الرقمي للـ Webhooks.
مكتبة Node.js & Express
حزمة JavaScript / TypeScript لربط خوادم Node.js و Express و NestJS مع دعم كامل لعمليات الدفع والتأكد الأمني الآمن.
حزمة Python / Django SDK
مكتبة بايثون المتوافقة مع Django, Flask, FastAPI مع أدوات التحقق من التوقيع HMAC وتوليد الفواتير والاشتراكات.