نظرة عامة
يُوضِّح هذا الدليل بالضبط ما يجب تغييره عند الانتقال من OneClickDz Flexy API الإصدار v2 إلى v3. يعرض كل مثال الكود الحالي في v2 ويسرد التغييرات المطلوبة ويُظهر النتيجة في v3.متاح بعدة لغات: أمثلة JavaScript/Node.js وPHP وPython متضمَّنة.الجديد في v3
استجابات موحّدة
جميع الاستجابات مُغلَّفة في هيكل
{(success, data, meta, requestId)}معالجة أخطاء أفضل
أخطاء منظّمة مع أكواد ورسائل وتفاصيل لتصحيح أسهل
تصحيح أخطاء محسَّن
كل استجابة تتضمن طوابع زمنية ومعرّفات طلب فريدة
endpoints أوضح
تجميع منطقي:
/mobile/* و/internet/* و/gift-cards/* و/account/*مفاتيح API منفصلة
أنشئ مفاتيح sandbox مخصصة للاختبار مع الحفاظ على مفتاح الإنتاج
القائمة البيضاء لعناوين IP
أضف قيود IP مباشرة من صفحة الإعدادات لأمان معزّز
قائمة التحقق السريع للهجرة
1
إنشاء مفتاح API للـ sandbox (اختياري)
أنشئ مفتاح API للـ sandbox من صفحة إعدادات لوحة التحكم لاختبار v3 قبل نقل الإنتاج
2
تهيئة القائمة البيضاء لعناوين IP (اختياري)
أضف قيود IP لأمان معزّز مباشرة من الإعدادات
3
تحديث رأس المصادقة
غيِّر من
authorization إلى X-Access-Token في جميع طلبات API4
تحديث معالجة الاستجابة
ادخل إلى البيانات عبر
result.data بدلاً من الوصول المباشر5
تحديث معالجة الأخطاء
تحقق من القيمة المنطقية
result.success وتعامل مع كائن result.error المنظّم6
تحديث مسارات الـ endpoints
رسِّم مسارات v2 على المسارات الجديدة في v3 (راجع جدول المرجع الكامل أدناه)
7
تحديث منطق ترقيم الصفحات
ادخل إلى معلومات الترقيم من
result.data.pagination بدلاً من المستوى الجذرياختر استراتيجية الهجرة الخاصة بك
خبر جيد: كلا API الإصداريْن v2 وv3 يعملان في آنٍ واحد حتى إيقاف v2.
مفتاح API الإنتاجي الحالي يعمل مع endpoints كلٍّ من v2 وv3، مما يمنحك مرونة في كيفية الانتقال.
تغيير عنوان URL الأساسي: يستخدم v3 عنوان URL أساسياً جديداً: - v2:
https://flexy-api.oneclickdz.com/v2 - v3: https://api.oneclickdz.com/v3🆕 بداية جديدة
الأنسب لـ: إعادة البناء الكاملة أو المشاريع الجديدة
- أنشئ مفتاح sandbox للاختبار من الإعدادات
- هيِّئ القائمة البيضاء لعناوين IP لمفتاح الإنتاج
- اختبر كل شيء في sandbox مع v3
- استخدم مفتاح الإنتاج عند الاستعداد
🔄 هجرة تدريجية
الأنسب لـ: أنظمة الإنتاج الحالية
- استمر في استخدام مفتاح الإنتاج الحالي لـ endpoints v2
- أنشئ مفتاح sandbox لاختبار v3 بأمان
- انقل الـ endpoints واحداً تلو الآخر إلى v3
- شغِّل v2 وv3 جنباً إلى جنب بنفس مفتاح الإنتاج
هجرة ذكية: ابدأ ببطاقات الهدايا
نصيحة احترافية: إذا كنت مهتماً ببطاقات الهدايا، ادمجها على v3 أولاً! لا تحتاج إلى نقل شحنات الجوال والإنترنت الحالية لتبدأ استخدام بطاقات الهدايا على v3. هذه طريقة منخفضة المخاطر لاختبار v3 مع إبقاء عملياتك الحرجة على v2. استخدم مفتاح sandbox للاختبار، ثم انتقل للإنتاج عند الاستعداد.
-
المرحلة 1: دمج بطاقات الهدايا على v3 (إذا كان ذلك مناسباً)
- أنشئ مفتاح sandbox للاختبار
- استخدم endpoints
/v3/gift-cards/*في sandbox - اختبر بدقة، ثم استخدم مفتاح الإنتاج
- أبقِ الجوال/الإنترنت على v2
-
المرحلة 2: نقل endpoints الحساب والتحقق
/v3/validate/v3/account/balance/v3/account/transactions
-
المرحلة 3: نقل شحنات الجوال تدريجياً
- اختبر بعمليات منخفضة الحجم أولاً
- راقب المشكلات
- وسِّع نطاق الهجرة تدريجياً
-
المرحلة 4: نقل شحنات الإنترنت
- أكمل قبل الموعد النهائي للإيقاف
التغييرات الثلاثة الرئيسية
1. رأس المصادقة
ما يجب تغييره: أعِد تسمية الرأس منauthorization إلى X-Access-Tokenإدارة المفاتيح الجديدة: يتيح لك v3 إنشاء مفتاح API sandbox منفصل للاختبار من إعدادات لوحة التحكم. يمكنك أيضاً إضافة قيود القائمة البيضاء لعناوين IP لأمان معزّز. مفتاح API الإنتاجي الحالي يعمل مع endpoints كلٍّ من v2 وv3.
- JavaScript
- PHP
- Python
- ❌ Remove:
authorization: "YOUR_API_KEY" - ✅ Add:
X-Access-Token: "YOUR_API_KEY" - ✅ Update: Base URL to
https://api.oneclickdz.com/v3
The authentication mechanism remains the same - only the header name changes. Your existing API key works with both v2 and v3.
- JavaScript
- PHP
- ❌ احذف:
authorization: "YOUR_API_KEY" - ✅ أضف:
X-Access-Token: "YOUR_API_KEY" - ✅ حدِّث: عنوان URL الأساسي إلى
https://api.oneclickdz.com/v3
آلية المصادقة تبقى كما هي - فقط اسم الرأس يتغير. مفتاح API الحالي يعمل مع v2 وv3.
- JavaScript
2. Response Structure
What to change: All responses are now wrapped in a standard structure- JavaScript
- PHP
- PHP
- Python
- PHP
- Python
3. Error Handling
What to change: Errors are now structured objects with codes- JavaScript
- PHP
- Python
- ❌ Remove: Checking
result.errorstring - ✅ Add: Check
result.success === false - ✅ Add: Access
result.error.codeandresult.error.message - ✅ Add: Handle different error codes with switch/if statements
- ✅ Add: Log
result.requestIdfor support tickets
Pro Tip: Always save the
requestId when logging errors. Our support team
needs this to trace issues in our system.- JavaScript
- PHP
- Python
Step-by-Step Migration Examples
Example 1: Get Mobile Plans
Step 1 - Your current v2 code:- JavaScript
- PHP
- Python
- Change base URL:
https://flexy-api.oneclickdz.com→https://api.oneclickdz.com - Change endpoint:
/v2/plans/listAll→/v3/mobile/plans - Change header:
authorization→X-Access-Token - Add success check:
if (result.success) - Access through data:
data.dymanicPlans→result.data.dynamicPlans(typo fixed!)
- JavaScript
- PHP
- Python
Example 2: Send Mobile Top-Up
Step 1 - Your current v2 code:- JavaScript
- PHP
- Python
- Change base URL:
https://flexy-api.oneclickdz.com→https://api.oneclickdz.com - Change endpoint:
/v2/topup/sendTopup→/v3/mobile/send - Change header:
authorization→X-Access-Token - Add success check:
if (result.success) - Access through data:
data.topupId→result.data.topupId - Add comprehensive error handling
- JavaScript
- PHP
- Python
Example 3: Check Top-Up Status
Step 1 - Your current v2 code:- JavaScript
- PHP
- Python
- Change base URL:
https://flexy-api.oneclickdz.com→https://api.oneclickdz.com - Change endpoint:
/v2/topup/checkStatus/REF/:ref→/v3/mobile/check-ref/:ref - Change header:
authorization→X-Access-Token - Add success check:
if (result.success) - Access directly:
data.topup.status→result.data.status(no more nestedtopupobject) - Handle new refund information fields
New Feature: v3 includes detailed refund information with suggested
alternative offers when a top-up is refunded.
- JavaScript
- PHP
- Python
Example 4: List Transactions with Pagination
Step 1 - Your current v2 code:- JavaScript
- PHP
- Python
- Change base URL:
https://flexy-api.oneclickdz.com→https://api.oneclickdz.com - Change version:
/v2/account/transactions→/v3/account/transactions - Change header:
authorization→X-Access-Token - Add success check:
if (result.success) - Access items:
data.transactions→result.data.items - Access pagination: Root level fields →
result.data.paginationobject
- JavaScript
- PHP
- Python
Example 5: Check Internet Products
Step 1 - Your current v2 code:- JavaScript
- PHP
- Python
- Change base URL:
https://flexy-api.oneclickdz.com→https://api.oneclickdz.com - Change endpoint:
/v2/internet/checkCards/:type→/v3/internet/products?type=:type - Change from path param to query param:
/ADSL→?type=ADSL - Change header:
authorization→X-Access-Token - Add success check:
if (result.success) - Access array: Direct array →
result.data.products
API Design: v3 uses query parameters instead of path parameters for type
selection, making it easier to add filters in the future.
- JavaScript
- PHP
- Python
Migrate Your API Client
Here’s how to update your API client wrapper:Step 1 - Your current v2 client:- JavaScript
- PHP
- Python
- Change base URL:
https://flexy-api.oneclickdz.com→https://api.oneclickdz.com - Change header:
authorization→X-Access-Token - Add response wrapper handling in
request()method - Check
result.successand handle errors - Update all endpoint paths to v3
- Throw structured errors with codes and request IDs
Best Practice: Centralize error handling in your API client. This makes it
easier to add logging, monitoring, and user notifications.
- JavaScript
- PHP
- Python
Complete Endpoint Reference
Error Code Reference
Common v2 errors and their v3 equivalents:How to handle v3 errors:
- JavaScript
- PHP
- Python
Common Migration Issues & Solutions
Issue: Getting 'undefined' When Accessing Data
Issue: Getting 'undefined' When Accessing Data
Problem: Trying to access data directly instead of through
result.data.
Solution: Always access response data through the data property.❌ Wrong const balance = result.balance; ✅ Correct const
Issue: 404 Not Found Errors
Issue: 404 Not Found Errors
Problem: Using old v2 endpoint paths.Solution: Update all paths according to the reference table above.
- ❌ احذف: الوصول المباشر إلى
data.balance - ✅ أضف: تحقق من
result.successأولاً - ✅ أضف: الوصول عبر
result.data.balance - ✅ إضافي: استخدم
result.requestIdلأغراض التصحيح - ✅ إضافي: استخدم
result.meta.timestampلمعلومات التوقيت
- JavaScript
- PHP
- Python
3. معالجة الأخطاء
ما يجب تغييره: الأخطاء الآن عبارة عن كائنات منظّمة مع أكواد- JavaScript
- PHP
- Python
- ❌ احذف: التحقق من سلسلة
result.error - ✅ أضف: تحقق من
result.success === false - ✅ أضف: ادخل إلى
result.error.codeوresult.error.message - ✅ أضف: تعامل مع أكواد الخطأ المختلفة باستخدام switch/if
- ✅ أضف: سجِّل
result.requestIdلتذاكر الدعم
نصيحة احترافية: احفظ دائماً
requestId عند تسجيل الأخطاء. يحتاج فريق الدعم لدينا إليه لتتبع المشكلات في نظامنا.- JavaScript
- PHP
- Python
أمثلة الهجرة خطوة بخطوة
المثال 1: الحصول على الخطط المتنقلة
الخطوة 1 - كودك الحالي في v2:- JavaScript
- PHP
- Python
- غيّر عنوان URL الأساسي:
https://flexy-api.oneclickdz.com←https://api.oneclickdz.com - غيّر الـ endpoint:
/v2/plans/listAll←/v3/mobile/plans - غيّر الرأس:
authorization←X-Access-Token - أضف فحص النجاح:
if (result.success) - الوصول عبر data:
data.dymanicPlans←result.data.dynamicPlans(تم تصحيح الخطأ المطبعي!)
- JavaScript
- PHP
- Python
المثال 2: إرسال شحن متنقل
الخطوة 1 - كودك الحالي في v2:- JavaScript
- PHP
- Python
- غيّر عنوان URL الأساسي:
https://flexy-api.oneclickdz.com←https://api.oneclickdz.com - غيّر الـ endpoint:
/v2/topup/sendTopup←/v3/mobile/send - غيّر الرأس:
authorization←X-Access-Token - أضف فحص النجاح:
if (result.success) - الوصول عبر data:
data.topupId←result.data.topupId - أضف معالجة شاملة للأخطاء
- JavaScript
- PHP
- Python
المثال 3: فحص حالة الشحن
الخطوة 1 - كودك الحالي في v2:- JavaScript
- PHP
- Python
- غيّر عنوان URL الأساسي:
https://flexy-api.oneclickdz.com←https://api.oneclickdz.com - غيّر الـ endpoint:
/v2/topup/checkStatus/REF/:ref←/v3/mobile/check-ref/:ref - غيّر الرأس:
authorization←X-Access-Token - أضف فحص النجاح:
if (result.success) - الوصول المباشر:
data.topup.status←result.data.status(لا مزيد من كائنtopupالمتداخل) - تعامل مع حقول معلومات الاسترداد الجديدة
ميزة جديدة: يتضمن v3 معلومات مفصلة عن الاسترداد مع عروض بديلة مقترحة عند استرداد الشحن.
- JavaScript
- PHP
- Python
المثال 4: قائمة المعاملات مع الترقيم
الخطوة 1 - كودك الحالي في v2:- JavaScript
- PHP
- Python
- غيّر عنوان URL الأساسي:
https://flexy-api.oneclickdz.com←https://api.oneclickdz.com - غيّر الإصدار:
/v2/account/transactions←/v3/account/transactions - غيّر الرأس:
authorization←X-Access-Token - أضف فحص النجاح:
if (result.success) - الوصول للعناصر:
data.transactions←result.data.items - الوصول للترقيم: الحقول على مستوى الجذر ← كائن
result.data.pagination
- JavaScript
- PHP
- Python
المثال 5: فحص منتجات الإنترنت
الخطوة 1 - كودك الحالي في v2:- JavaScript
- PHP
- Python
- غيّر عنوان URL الأساسي:
https://flexy-api.oneclickdz.com←https://api.oneclickdz.com - غيّر الـ endpoint:
/v2/internet/checkCards/:type←/v3/internet/products?type=:type - من معامل المسار إلى معامل الاستعلام:
/ADSL←?type=ADSL - غيّر الرأس:
authorization←X-Access-Token - أضف فحص النجاح:
if (result.success) - الوصول للمصفوفة: مصفوفة مباشرة ←
result.data.products
تصميم API: يستخدم v3 معاملات الاستعلام بدلاً من معاملات المسار لاختيار النوع، مما يسهّل إضافة الفلاتر مستقبلاً.
- JavaScript
- PHP
- Python
هجرة عميل API الخاص بك
إليك كيفية تحديث wrapper عميل API الخاص بك:الخطوة 1 - عميلك الحالي في v2:- JavaScript
- PHP
- Python
- غيّر عنوان URL الأساسي:
https://flexy-api.oneclickdz.com←https://api.oneclickdz.com - غيّر الرأس:
authorization←X-Access-Token - أضف معالجة غلاف الاستجابة في الـ method
request() - تحقق من
result.successوتعامل مع الأخطاء - حدّث جميع مسارات الـ endpoint إلى v3
- ألقِ أخطاء منظّمة مع أكواد ومعرّفات الطلبات
أفضل الممارسات: مركِّز معالجة الأخطاء في عميل API الخاص بك. هذا يسهّل إضافة التسجيل والمراقبة وإشعارات المستخدم.
- JavaScript
- PHP
- Python
مرجع أكواد الخطأ
أخطاء v2 الشائعة ومكافئاتها في v3:كيفية التعامل مع أخطاء v3:
- JavaScript
- PHP
- Python
مشاكل الهجرة الشائعة وحلولها
مشكلة: أخطاء 401 غير مصرح به
مشكلة: أخطاء 401 غير مصرح به
المشكلة: تم تغيير الـ endpoint لكن لم يتم تحديث اسم الرأس.الحل: استبدل
authorization بـ X-Access-Token في جميع الطلبات.مشكلة: الحصول على 'undefined' عند الوصول للبيانات
مشكلة: الحصول على 'undefined' عند الوصول للبيانات
المشكلة: محاولة الوصول للبيانات مباشرة بدون المرور بـ
result.data.الحل: الوصول دائماً لبيانات الاستجابة عبر خاصية data.مشكلة: الترقيم لا يعمل
مشكلة: الترقيم لا يعمل
المشكلة: البحث عن حقول الترقيم على المستوى الجذري.الحل: الوصول للترقيم عبر
data.pagination.مشكلة: معالجة الأخطاء لا تعمل
مشكلة: معالجة الأخطاء لا تعمل
المشكلة: التحقق من تنسيق الخطأ القديم.الحل: تحقق من البوليان
success وادخل إلى كائن الخطأ المنظّم.مشكلة: أخطاء 404 غير موجود
مشكلة: أخطاء 404 غير موجود
المشكلة: استخدام مسارات الـ endpoint القديمة في v2.الحل: حدّث جميع المسارات وفقاً لجدول المرجع أعلاه.
مرجع الـ endpoints الكامل
قائمة التحقق من الاختبار
قبل النشر في الإنتاج، تحقق من:- جميع رؤوس المصادقة غُيِّرت إلى
X-Access-Token - جميع مسارات الـ endpoints حُدِّثت إلى v3
- التحقق من النجاح/الخطأ مُطبَّق في كل مكان
- البيانات يمكن الوصول إليها عبر
result.data - الترقيم يمكن الوصول إليه عبر
result.data.pagination - أكواد الخطأ مُعالَجة مع
result.error.code - معرِّفات الطلبات مسجَّلة لأغراض التصحيح
- تم الاختبار في وضع sandbox أولاً
- جميع الوظائف الموجودة لا تزال تعمل
- سيناريوهات الخطأ مختبَرة (رصيد غير كافٍ، بيانات غير صالحة، إلخ)
تحتاج مساعدة؟
وثائق API v3
مرجع v3 الكامل والأمثلة
دليل معالجة الأخطاء
أفضل الممارسات لمعالجة الأخطاء
إعدادات لوحة التحكم
الوصول: سجِّل الدخول إلى لوحة التحكمإنشاء مفتاح sandbox: أنشئ مفتاحاً للاختبار الآمنالقائمة البيضاء لعناوين IP: أضف قيود IP لأمان معزّز
الدعم
البريد الإلكتروني: [email protected]مهم: أدرج دائماً معرِّف الطلب عند الإبلاغ عن مشكلات
دعم الهجرة: فريقنا هنا للمساعدة! راسلنا بالبريد الإلكتروني مع “دعم هجرة API v3” في سطر الموضوع، وأدرج: - تفاصيل تطبيقك الحالي - الأخطاء المحددة (مع معرِّفات الطلبات) - نماذج الكود التي تُظهر المشكلة

