Documentation Index
Fetch the complete documentation index at: https://docs.oneclickdz.com/llms.txt
Use this file to discover all available pages before exploring further.
نظرة عامة
يوفر SDK Navio PHP واجهة حديثة وآمنة من حيث الأنواع لدمج مدفوعات Navio في تطبيقات PHP الخاصة بك. مبني باستخدام ميزات PHP 8.1+ وأفضل الممارسات.آمن من حيث الأنواع
تلميحات أنواع PHP 8.1+ الكاملة وأنواع الإرجاع
متوافق مع Composer
التحميل التلقائي PSR-4 والتثبيت السهل
API بسيط
واجهة نظيفة وبديهية
معالجة الأخطاء
استثناءات مخصصة لأنواع الأخطاء المختلفة
المتطلبات
- PHP 8.1 أو أحدث
- Composer
- امتداد
ext-json
- امتداد
ext-curl
التثبيت
قم بالتثبيت عبر Composer:composer require oneclickdz/ocpay-php-sdk
أو أضف إلى composer.json الخاص بك:{
"require": {
"oneclickdz/ocpay-php-sdk": "^1.0"
}
}
البدء السريع
1. تهيئة SDK
<?php
require 'vendor/autoload.php';
use OneClickDz\OCPay\OCPay;
// Initialize with your API access token
$ocpay = new OCPay('your-api-access-token');
خزّن مفتاح API الخاص بك في متغيرات البيئة، وليس في الكود مباشرة
# .env file
ONECLICK_API_KEY=your_api_key_here
// Load from environment
$ocpay = new OCPay(getenv('ONECLICK_API_KEY'));
2. إنشاء رابط دفع
use OneClickDz\OCPay\DTO\CreateLinkRequest;
use OneClickDz\OCPay\DTO\ProductInfo;
// Create product information
$productInfo = new ProductInfo(
title: 'Premium Subscription',
amount: 5000, // Amount in DZD (500 - 500,000)
description: 'Monthly access to premium features'
);
// Create payment link request
$request = new CreateLinkRequest(
productInfo: $productInfo,
feeMode: CreateLinkRequest::FEE_MODE_NO_FEE,
successMessage: 'Thank you for your purchase!',
redirectUrl: 'https://yourstore.com/success?order=12345'
);
// Create the payment link
try {
$response = $ocpay->createLink($request);
// Redirect customer to payment page
echo "Payment URL: " . $response->paymentUrl . "\n";
// IMPORTANT: Save this reference!
echo "Payment Reference: " . $response->paymentRef . "\n";
saveOrderPaymentRef($orderId, $response->paymentRef);
} catch (\OneClickDz\OCPay\Exception\ValidationException $e) {
echo "Validation error: " . $e->getMessage() . "\n";
} catch (\OneClickDz\OCPay\Exception\UnauthorizedException $e) {
echo "Auth error: " . $e->getMessage() . "\n";
} catch (\OneClickDz\OCPay\Exception\ApiException $e) {
echo "API error: " . $e->getMessage() . "\n";
}
3. التحقق من حالة الدفع
// Check payment status using the payment reference
try {
$status = $ocpay->checkPayment('OCPL-A1B2C3-D4E5');
if ($status->isConfirmed()) {
// Payment successful - fulfill the order
echo "Payment confirmed!\n";
echo "Amount: " . $status->transactionDetails->amount . " DZD\n";
fulfillOrder($orderId);
} elseif ($status->isFailed()) {
// Payment failed or expired
echo "Payment failed: " . $status->message . "\n";
markOrderFailed($orderId);
} else {
// Still pending - check again later
echo "Payment pending...\n";
}
} catch (\OneClickDz\OCPay\Exception\NotFoundException $e) {
echo "Payment not found\n";
} catch (\OneClickDz\OCPay\Exception\PaymentExpiredException $e) {
echo "Payment link expired\n";
} catch (\OneClickDz\OCPay\Exception\ApiException $e) {
echo "API error: " . $e->getMessage() . "\n";
}
مثال تجارة إلكترونية كامل
إليك تدفقاً كاملاً لعملية دفع في التجارة الإلكترونية:<?php
require 'vendor/autoload.php';
use OneClickDz\OCPay\OCPay;
use OneClickDz\OCPay\DTO\CreateLinkRequest;
use OneClickDz\OCPay\DTO\ProductInfo;
// Initialize SDK
$ocpay = new OCPay(getenv('ONECLICK_API_KEY'));
// Step 1: Create order in your system
$orderId = createOrder([
'customer_id' => 123,
'items' => [
['name' => 'Product A', 'price' => 5000],
['name' => 'Product B', 'price' => 3000],
],
'total' => 8000,
]);
// Step 2: Create payment link
try {
$productInfo = new ProductInfo(
title: "Order #{$orderId}",
amount: 8000,
description: "Payment for order #{$orderId}"
);
$request = new CreateLinkRequest(
productInfo: $productInfo,
feeMode: CreateLinkRequest::FEE_MODE_NO_FEE,
successMessage: "Thank you! Order #{$orderId} confirmed.",
redirectUrl: "https://yourstore.com/orders/{$orderId}/success"
);
$response = $ocpay->createLink($request);
// Step 3: Save payment reference
updateOrder($orderId, [
'payment_ref' => $response->paymentRef,
'payment_url' => $response->paymentUrl,
'status' => 'pending_payment',
]);
// Step 4: Redirect customer
header("Location: " . $response->paymentUrl);
exit;
} catch (ApiException $e) {
error_log("Payment creation failed: " . $e->getMessage());
showErrorPage("Failed to create payment. Please try again.");
}
مهمة خلفية للتحقق من الحالة
قم بإعداد مهمة cron أو عامل خلفي:<?php
// check_payments.php - Run every 20 minutes
require 'vendor/autoload.php';
use OneClickDz\OCPay\OCPay;
$ocpay = new OCPay(getenv('ONECLICK_API_KEY'));
// Get all pending orders
$pendingOrders = getPendingOrders();
foreach ($pendingOrders as $order) {
if (!$order['payment_ref']) {
continue;
}
try {
$status = $ocpay->checkPayment($order['payment_ref']);
if ($status->isConfirmed()) {
// Mark as paid and fulfill
updateOrder($order['id'], [
'status' => 'paid',
'paid_at' => date('Y-m-d H:i:s'),
]);
fulfillOrder($order['id']);
} elseif ($status->isFailed()) {
// Mark as failed
updateOrder($order['id'], [
'status' => 'payment_failed',
]);
}
} catch (ApiException $e) {
error_log("Status check failed: " . $e->getMessage());
}
}
أضف إلى crontab:*/20 * * * * php /path/to/check_payments.php
مرجع API
فئة Navio
نقطة الدخول الرئيسية لـ SDK.المنشئ
public function __construct(
string $accessToken,
array $options = []
)
المعاملات:
$accessToken: رمز الوصول إلى API الخاص بك
$options: إعداد اختياري لعميل Guzzle
timeout: مهلة الطلب بالثواني (الافتراضي: 30)
الطرق
createLink(CreateLinkRequest $request): CreateLinkResponseينشئ رابط دفع.checkPayment(string $paymentRef): CheckPaymentResponseيتحقق من حالة الدفع.كائنات نقل البيانات (DTOs)
ProductInfo
new ProductInfo(
title: string, // Product name (1-200 chars)
amount: int, // Amount in DZD (500 - 500,000)
description?: string // Optional (max 1000 chars)
)
CreateLinkRequest
new CreateLinkRequest(
productInfo: ProductInfo,
feeMode?: string, // NO_FEE (default), SPLIT_FEE, CUSTOMER_FEE
successMessage?: string, // Optional success message
redirectUrl?: string // Optional redirect URL
)
ثوابت وضع الرسوم:
CreateLinkRequest::FEE_MODE_NO_FEE - التاجر يدفع (الافتراضي)
CreateLinkRequest::FEE_MODE_SPLIT_FEE - تقسيم 50/50
CreateLinkRequest::FEE_MODE_CUSTOMER_FEE - العميل يدفع
CreateLinkResponse
$response->paymentUrl // URL to redirect customer
$response->paymentRef // Payment reference (SAVE THIS!)
$response->paymentLink // Full payment link object
CheckPaymentResponse
$response->status // PaymentStatus enum
$response->message // Status message
$response->paymentRef // Payment reference
$response->transactionDetails // Transaction details (if confirmed)
// Helper methods
$response->isConfirmed() // true if payment confirmed
$response->isPending() // true if still pending
$response->isFailed() // true if failed
معالجة الاستثناءات
جميع الاستثناءات ترث من NavioException:| الاستثناء | كود HTTP | عند الإطلاق |
|---|
ValidationException | 400 | بيانات طلب غير صالحة |
UnauthorizedException | 403 | مفتاح API غير صالح |
NotFoundException | 404 | الدفع غير موجود |
PaymentExpiredException | 410 | الرابط منتهي الصلاحية (>20 دقيقة) |
ApiException | متنوعة | أخطاء API أخرى |
جميع الاستثناءات توفر:try {
$response = $ocpay->createLink($request);
} catch (ApiException $e) {
echo $e->getMessage(); // Error message
echo $e->getStatusCode(); // HTTP status code
echo $e->getRequestId(); // Request ID for support
var_dump($e->getErrorData()); // Full error data
}
ملاحظات مهمة
التحقق من التاجر مطلوب
حدود المبلغ
- الحد الأدنى: 500 دج
- الحد الأقصى: 500,000 دج
- يجب أن يكون عدداً صحيحاً
هيكل الرسوم
رسوم منخفضة: 0% على الرصيد، رسوم سحب 1% فقط
انتهاء صلاحية رابط الدفع
تنتهي صلاحية الروابط بعد 20 دقيقة من الإنشاء إذا لم يُبدأ الدفع.تدفق حالة الدفع
- PENDING - الدفع قيد التنفيذ → أعد التحقق لاحقاً
- CONFIRMED - الدفع ناجح → نفّذ الطلب
- FAILED - الدفع مرفوض/منتهي الصلاحية → علّم الطلب كفاشل
تكامل Laravel
لمشاريع Laravel، راجع مثال التكامل الكامل في مستودع GitHub.يشمل:
- إعداد مزود الخدمة
- فئة خدمة الدفع
- أمثلة على المتحكمات
- ترحيلات قاعدة البيانات
- مهمة خلفية للتحقق
- معالجة الأخطاء
الاختبار
استخدام Sandbox
يستخدم API تلقائياً وضع sandbox لحسابات الاختبار:$response = $ocpay->createLink($request);
if ($response->paymentLink->isSandbox) {
echo "This is a test payment\n";
}
اختبارات الوحدة
composer install --dev
vendor/bin/phpunit
أفضل الممارسات
خزّن paymentRef فوراً بعد إنشاء الرابط. ستحتاجه للتحقق من حالة الدفع.
قم بإعداد مهمة خلفية للتحقق من حالة الدفع كل 20 دقيقة للطلبات المعلقة.
تعامل مع جميع الاستثناءات
التقط جميع أنواع الاستثناءات وتعامل معها بشكل مناسب. سجّل الأخطاء لأغراض التصحيح.
خزّن مفاتيح API في متغيرات البيئة، ولا تلتزم بها أبداً في نظام التحكم بالإصدار.
استخدم دائماً HTTPS لعناوين URL لإعادة التوجيه ونقاط النهاية في تطبيقك.
الدعم والموارد
مستودع GitHub
الكود المصدري والأمثلة والمشاكل
مثال Laravel
تكامل Laravel كامل
اتصل بالدعم
احصل على المساعدة من فريقنا
الخطوات التالية
أفضل ممارسات Navio
تعلم نصائح الإنتاج وأفضل ممارسات الأمان