VibeFox SF Express for OpenCart — المساعدة
المتطلبات
OpenCart: 3.0.x (تم اختباره على 3.0.5.0) أو 4.0.2 وما بعدها (تم اختباره على 4.1.0.3).
PHP: 8.0 أو أحدث.
حساب SF Express (للأسعار المباشرة فقط): تستخدم الأسعار المباشرة منصة FengQiao المفتوحة التابعة لشركة SF Express (open.sf-express.com). تحتاج إلى حساب شهري لدى SF Express وحساب مطوّر على FengQiao. سجّل هناك، وأنشئ تطبيقًا، وأضف إليه واجهة البرمجة "Delivery time standard and price query" (EXP_RECE_QUERY_DELIVERTM)، وانسخ رمز العميل وcheckword. يختلف checkword لبيئة الاختبار (sandbox) عن checkword لبيئة الإنتاج. إذا كنت تستخدم جدول الأسعار فقط، فلا تحتاج إلى حساب SF Express.
المحافظات الصينية (للأسعار المباشرة فقط): يحتاج السعر المباشر إلى محافظة عنوان التوصيل، وهي منطقة OpenCart (Region / State) الخاصة بالعنوان. تتضمن OpenCart مناطق الصين، لكن التبت غير موجودة. يمكن للإضافة أن تضيفها لك (انظر Chinese provinces أدناه).
مفتاح ترخيص VibeFox: يُشترى من vibefox.net. ويعمل المفتاح الواحد على نطاق واحد.
التثبيت
التنزيل ملف zip واحد يحتوي على الحزم لكلا إصداري OpenCart. فكّ ضغطه على حاسوبك. ويحتوي على README.txt، وحزمة OpenCart 3 vfd_sf_express-oc3-(version).ocmod.zip، وحزمة OpenCart 4 vfd_sf_express.ocmod.zip. ثبّت الحزمة الخاصة بإصدار OpenCart لديك فقط. ومفتاح الترخيص هو نفسه لكلا الإصدارين.
OpenCart 3
1. في لوحة الإدارة، انتقل إلى Extensions > Installer، واضغط Upload، واختر الملف vfd_sf_express-oc3-(version).ocmod.zip. لا تضيف الإضافة أي تعديلات OCMOD، لذلك لا تحتاج إلى تحديث Extensions > Modifications. وبدلًا من Installer، يمكنك نسخ محتويات المجلد upload الموجود في الحزمة إلى المجلد الجذري لمتجرك.
2. انتقل إلى Extensions > Extensions، واختر نوع الإضافة Shipping. ابحث عن VibeFox SF Express واضغط Install (الزر الأخضر +).
3. اضغط Edit (زر القلم) لفتح صفحة الإعدادات.
4. أدخل مفتاح ترخيص VibeFox في License key ضمن كتلة الترخيص في أعلى صفحة Edit، ثم اضغط Activate (انظر مفتاح الترخيص).
5. املأ جدول الأسعار و/أو التكلفة الاحتياطية.
6. للأسعار المباشرة في البر الصيني الرئيسي، أدخل رمز العميل وcheckword، ومحافظة المرسل ومدينته، وإذا لم تكن عملة متجرك CNY فأدخل سعر صرف العملة. اضغط Add Chinese provinces إذا طلبت الصفحة ذلك. اختبر أولًا باستخدام Sandbox وبيانات اعتماد بيئة الاختبار.
7. فعّل Enable SF Express واضغط Save.
OpenCart 4
1. في لوحة الإدارة، انتقل إلى Extensions > Installer، واضغط Upload، واختر الملف vfd_sf_express.ocmod.zip. لا تُعِد تسمية الملف: فـ OpenCart 4 يأخذ رمز الإضافة من اسم الملف، والحزمة التي أُعيد تسميتها لا تعمل.
2. تظهر الحزمة في قائمة الإضافات المثبتة في الصفحة نفسها. اضغط Install (الزر الأخضر +) بجانبها.
3. انتقل إلى Extensions > Extensions، واختر نوع الإضافة Shipping. ابحث عن VibeFox SF Express، واضغط Install (الزر الأخضر +)، ثم Edit (زر القلم).
4. أدخل مفتاح الترخيص والإعدادات كما في الخطوات من 4 إلى 7 لـ OpenCart 3. صفحة الإعدادات وحقولها متطابقة في الإصدارين.
بعد التثبيت تبقى الطريقة معطلة حتى تفعّل Enable SF Express وتحفظ. وإذا أعدت تثبيت الإضافة بعد إلغاء تثبيتها، فستُستخدم من جديد إعدادات SF Express التي احتفظت بها.
الإعدادات
جميع الإعدادات موجودة في صفحة الإضافة: Extensions > Extensions > Shipping > VibeFox SF Express > Edit. وتظهر الأقسام في الجهة اليسرى. وتُطبَّق على كل المناطق الجغرافية. يحفظ زر Save في أسفل الصفحة كل الصفحة دون إعادة تحميلها. ويمسح كل حفظ أيضًا أسعار SF Express المخزّنة مؤقتًا. ولا يمكن حفظ الإعدادات إلا للمسؤولين الذين لديهم صلاحية التعديل على هذه الإضافة.
عند الحفظ، تتحقق الإضافة من القيم. يُرفض أي عنوان فارغ لطريقة الشحن، أو أطول من 64 حرفًا، أو يحتوي على الرموز < > ; = # { }، وكذلك أي قيمة ليست رقمًا، أو مبلغ أو وزن سالب، أو سعر صرف عملة يساوي 0، أو Min weight (kg) أكبر من Max weight (kg)، أو سعر خاطئ في جدول الأسعار، أو ترتيب عرض ليس عددًا صحيحًا. تُرفض هذه القيم مع رسالة، ولا يُحفظ أي شيء حتى تصححها. وتخبرك التحذيرات أعلى الإعدادات بأن الأسعار المباشرة مُعدّة جزئيًا (وتُدرج الإعدادات الناقصة)، أو أن سعر صرف العملة مفقود، أو أن المتجر لا يحتوي على مناطق للصين، أو أن المتجر لا يملك وحدة وزن بالكيلوغرام أو وحدة طول بالسنتيمتر، وأن وحدته الافتراضية غير معروفة للإضافة.
عام
Enable SF Express: يُظهر SF Express أو يخفيه في صفحة الدفع. الافتراضي: غير مفعّل.
Method title: اسم الطريقة الذي يظهر في السلة وفي صفحة الدفع. الافتراضي: SF Express. حقل مطلوب، بحد أقصى 64 حرفًا.
Tax class: الفئة الضريبية لتكلفة الشحن، أو No tax. مع اختيار فئة ضريبية تُضاف ضريبة شحن متجرك فوق التكلفة. اختر No tax إذا كان سعر SF Express يتضمن بالفعل كل ما تريد تحصيله.
Sort order: ترتيب SF Express بين طرق الشحن في صفحة الدفع. عدد صحيح.
واجهة FengQiao البرمجية لـ SF Express (الأسعار المباشرة) (اختياري، لعناوين التوصيل في البر الصيني الرئيسي)
Customer code (partnerID): رمز العميل (顾客编码) الخاص بتطبيق FengQiao. مسح هذا الحقل يمسح أيضًا checkword المحفوظ، حتى تتمكن من إزالة بيانات الاعتماد.
Checkword: الـ checkword (校验码) للبيئة نفسها. يُستخدم فقط لتوقيع الطلبات، ولا يُرسل أو يُسجَّل في أي مكان. بعد الحفظ يبقى الحقل فارغًا ويعرض Saved — leave empty to keep it. أدخل قيمة جديدة فقط إذا أردت تغييرها.
Sandbox: يستخدم بيئة الاختبار الخاصة بـ FengQiao (sfapi-sbox.sf-express.com) للاختبار ببيانات اعتماد بيئة الاختبار. أسعار بيئة الاختبار ليست حقيقية. أوقفه في المتجر الفعلي. الافتراضي: غير مفعّل.
SF Express product: منتج SF Express الذي يُعرض سعره.
Sender province: المحافظة التي تُرسل منها الطرود، مثل Guangdong / 广东. يستخدم الخيار الأول منطقة متجرك (System > Settings > Store > Local) عندما يكون المتجر في الصين، ثم يعرض Same as the store region مع اسم المحافظة، وإلا يعرض — Select —.
Sender city: الاسم الصيني القياسي للمدينة، مثل 深圳市. مطلوب للأسعار المباشرة: عنوان المتجر في OpenCart نص حر، ولذلك لا تُؤخذ المدينة منه أبدًا.
Currency conversion rate: أسعار SF Express بالعملة CNY (اليوان). إذا لم تكن عملة متجرك الافتراضية CNY، فأدخل عدد وحدات عملتك التي تساوي CNY واحدًا (1 CNY = ? وحدة)، مثل 0.13. بدون هذا السعر لا تُستخدم الأسعار المباشرة. إذا كانت عملة متجرك CNY، يوضح الحقل أنه غير لازم وتُستخدم الأسعار كما هي. ويُقبل كل من النقطة والفاصلة كفاصل عشري.
Chinese provinces: يعرض عدد المحافظات والمناطق ذات الحكم الذاتي والبلديات الـ 32 التابعة لـ SF Express التي هي مناطق صينية في OpenCart، وأيها ناقص. تحصل العناوين الواقعة في محافظة ناقصة على سعر الجدول. اضغط Add Chinese provinces لإضافة الناقصة فقط كمناطق صينية (رمز ISO واسم مثل "Tibet / 西藏"). لا تُغيَّر المناطق الموجودة. ولا يتغير شيء دون هذا النقر. وتبقى المناطق المضافة بهذه الطريقة في المتجر بعد إلغاء التثبيت.
جدول الأسعار والتكلفة الاحتياطية (يُستخدم لهونغ كونغ وماكاو وتايوان وبلدان أخرى، عندما لا تكون الأسعار المباشرة مُعدّة أو عندما لا تُرجع SF Express سعرًا؛ الأسعار بعملة متجرك الافتراضية دون الضريبة)
Country prices: جدول بسعر أساسي لكل بلد. اضغط Add country لإضافة صف، وزر الحذف لإزالة صف. يُطبَّق الصف * All other countries على كل البلدان التي لا يوجد لها صف خاص. وسعر فئة الوزن الأكبر من 0 يحل محل السعر الأساسي للطرود في تلك الفئة: XS حتى 1 كغ، وS حتى 2 كغ، وM حتى 3 كغ، وL حتى 5 كغ، وXL أكثر من 5 كغ. السعر Base بقيمة 0 يعني شحنًا مجانيًا. والسعر الأساسي الفارغ يعني أنه لا يوجد سعر لهذا البلد، وتُستخدم التكلفة الاحتياطية. وتُقبل القيمتان "9.99" و"9,99". ولا يُحفظ أي صف لا يحتوي على أي سعر.
Fallback cost: تُستخدم عندما لا تقدم SF Express ولا الجدول سعرًا. اتركه فارغًا لإخفاء الطريقة في هذه الحالة.
Table / fallback price is: كيفية تحصيل أسعار الجدول والأسعار الاحتياطية.
أسعار SF Express المباشرة تكون دائمًا للطلب كاملًا.
الشروط
Free shipping from: المجموع الفرعي للسلة (المنتجات التي تحتاج إلى شحن، بعد القسيمة وقبل الضريبة) الذي يصبح الشحن عنده مجانيًا. اتركه فارغًا إذا لم ترغب في تقديم شحن مجاني أبدًا. يُفحص الشحن المجاني قبل البحث عن أي سعر، لذلك فمن هذا المبلغ تُعرض الطريقة مجانًا لكل وجهة تتوفر فيها، حتى لو كان البلد بلا صف في الجدول أو بلا Fallback cost.
Minimum subtotal: أظهر الطريقة فقط عندما يصل المجموع الفرعي للسلة إلى هذا المبلغ. اتركه فارغًا لإظهارها دائمًا.
Min weight (kg): الحد الأدنى لوزن السلة بالكيلوغرام لإظهار الطريقة. تُحوَّل أوزان المنتجات من فئة الوزن الخاصة بها. القيمة 0 تعني بلا حد.
Max weight (kg): تُخفى الطريقة إذا تجاوز وزن السلة هذه القيمة. الافتراضي: 50. القيمة 0 أو الحقل الفارغ تعني بلا حد.
Geo zone: اعرض SF Express فقط للعناوين الواقعة في هذه المنطقة الجغرافية. All zones (الافتراضي) تعني بلا حد. وتُدار المناطق الجغرافية في System > Localisation > Geo Zones. ولا يُفحص هذا الحقل عندما تكون Ignore shipping zones مفعّلة.
التوفر بدون مناطق الشحن
Ignore shipping zones: اعرض SF Express للبلدان المذكورة أدناه بغض النظر عن المنطقة الجغرافية. عند إيقافه، تحدد المنطقة الجغرافية الأمر ولا تُستخدم قائمة البلدان.
Countries: بلدان الوجهة لهذا الوضع. اتركه فارغًا للسماح بكل البلدان المفعّلة. ولا يُستخدم هذا الحقل إلا عندما تكون Ignore shipping zones مفعّلة.
متقدم
Debug log: يكتب حسابات الأسعار في storage/logs/vfd_sfex_debug.log.php. لا يمكن قراءة الملف من الويب. تُسجَّل أخطاء الواجهة البرمجية دائمًا، حتى عندما يكون هذا الخيار غير مفعّل. ولا يُكتب فيه checkword أو عناوين العملاء. وعندما يصل الملف إلى 5 ميغابايت، يُنقل إلى vfd_sfex_debug.old.log.php ويبدأ سجل جديد.
Log: يعرض حجم السجل وأحدث إدخالاته. اضغط Clear log لتفريغه.
Remove data on uninstall: عند التفعيل، يؤدي إلغاء تثبيت الإضافة إلى حذف الإعدادات والسجل. وعند التعطيل (الافتراضي)، يُحتفظ بهما لإعادة التثبيت. وتُحذف الأسعار المخزّنة مؤقتًا دائمًا.
الاستيراد / التصدير
Export: اضغط Download JSON لحفظ الإعدادات في ملف JSON، دون checkword.
Import: الصق ملف JSON مصدَّرًا سابقًا واضغط Import لاستعادة الإعدادات. تُفحص القيم كما في الحفظ العادي. ويبقى checkword المحفوظ كما هو.
كيف تعمل في صفحة الدفع
عندما يعرض OpenCart طرق الشحن، يطلب من الإضافة سعر SF Express. إذا كانت Geo zone مضبوطة والعنوان خارجها، فلن تُعرض SF Express (إلا إذا كانت Ignore shipping zones مفعّلة). ولا تُحسب إلا المنتجات التي تحمل Requires Shipping بقيمة Yes: فالمنتجات الأخرى لا تضيف وزنًا ولا تدخل في المجموع الفرعي. والمجموع الفرعي هو سعر هذه المنتجات بعد خصم القسيمة وقبل الضريبة. ولا تُؤخذ في الحسبان بطاقات الهدايا ونقاط المكافآت والرصيد في المتجر. ثم تتحقق الإضافة من الشروط: البلدان المسموح بها (مع Ignore shipping zones)، ووزن السلة، والحد الأدنى للمجموع الفرعي. وإذا بلغ المجموع الفرعي Free shipping from، يكون السعر 0 ولا يُرسل أي طلب إلى SF Express.
لعنوان توصيل في البر الصيني الرئيسي مع ضبط رمز العميل وcheckword، ترسل الإضافة إلى SF Express محافظة مرسلك ومدينته، ومحافظة العميل ومدينته، ووزن السلة (على الأقل 0.1 كغ)، وحجم السلة (من المنتجات التي لها أبعاد الثلاثة). يُوقَّع الطلب بـ checkword الخاص بك. تُرجع SF Express الأسعار بالعملة CNY، وتحوّل الإضافة السعر المختار إلى عملة متجرك الافتراضية وتقربه إلى المنازل العشرية. ثم يُعرض السعر بعملة العميل مع الضريبة من Tax class المختارة.
تتعرف SF Express على العناوين من خلال أسمائها الصينية القياسية. تأتي محافظة العميل من منطقة Region / State الخاصة بالعنوان، وتُطابَق باسمها. أما منطقة "Hong Kong" فليست محافظة من البر الصيني الرئيسي، وتحصل على سعر الجدول. ويجب كتابة المدينة بالصينية، مثل 广州市. وبالنسبة لبكين وشانغهاي وتيانجين وتشونغتشينغ تُملأ المدينة تلقائيًا. أما المدينة المكتوبة بالحروف اللاتينية، مثل "Guangzhou"، فتحصل على سعر الجدول.
يُخزَّن كل سعر مؤقتًا لمدة ساعة، فلا تؤدي السلة نفسها إلى طلب جديد. ويُخزَّن الطلب الفاشل مؤقتًا لمدة 10 دقائق، حتى لا تنتظر صفحة الدفع SF Express عند كل تحديث. ومهلة HTTP هي 10 ثوانٍ.
إذا لم يكن هناك سعر مباشر، يأتي السعر من جدول الأسعار، ثم من Fallback cost. وإذا لم ينطبق أي منهما، تُخفى الطريقة. ولا يرى العميل أي خطأ أبدًا. ويُكتب الخطأ في السجل.
تحسب الإضافة الأسعار فقط. فلا تنشئ بوالص شحن أو ملصقات، ولا تنشئ طلبات في SF Express، ولا تحجز مواعيد استلام، ولا تلغي الشحنات أو تتتبعها. أنشئ شحناتك وتتبعها في حسابك لدى SF Express كالمعتاد. ولا يستطيع العملاء اختيار نقطة خدمة SF أو خزانة استلام. وتُستخدم SF Express كشركة توصيل من الباب إلى الباب. والأسعار المباشرة متاحة فقط لعناوين التوصيل في البر الصيني الرئيسي. وقد بُنيت الإضافة على وثائق FengQiao وردود محاكاة، لذلك أكِّد الأسعار مع حسابك لدى SF Express (في بيئة الاختبار أولًا) قبل التشغيل الفعلي.
في OpenCart 4 ينقر العميل على Choose في كتلة طرق الشحن بصفحة الدفع، ويختار SF Express في نافذة Shipping method options، حيث يظهر اسم الطريقة مع السعر. وتعمل الطريقة بالطريقة نفسها كما في OpenCart 3.
مفتاح الترخيص
تعمل الإضافة بمفتاح ترخيص VibeFox من vibefox.net. كتلة الترخيص License — VibeFox SF Express هي الكتلة الأولى في صفحة Extensions > Extensions > Shipping > VibeFox SF Express > Edit، فوق الإعدادات. الصق المفتاح في License key واضغط Activate. بعد ذلك تعرض الكتلة المفتاح مخفيًا، والحالة (مثل تاريخ انتهاء الترخيص ونطاقك)، والأزرار Check now لإعادة فحص الحالة، وChange key لإدخال مفتاح آخر، وRemove key لإزالة المفتاح من هذا المتجر. وتحتها السطر Product: opencart-shipping-sf-express والرابط Manage licenses and domains in your account الذي يفتح حسابك في vibefox.net. ولا يمكن تغيير المفتاح إلا للمسؤولين الذين لديهم صلاحية Modify للإضافة. ونصوص الكتلة تتبع لغة لوحة الإدارة (وتشمل الإنجليزية والروسية).
إذا لم يُقبل المفتاح، تذكر الكتلة السبب، مثل Key not found أو This key belongs to another product أو Domain limit reached أو License expired on مع تاريخ. بعد تغيير عنوان المتجر، أو بعد تحرير خانة نطاق في حسابك، اضغط Check now. وإذا تعذر الوصول إلى خادم التراخيص، تستمر الإضافة في العمل بآخر حالة معروفة.
المفتاح الواحد يعمل على نطاق واحد: عنوان المتجر من إعدادات OpenCart. وإزالة المفتاح من المتجر لا تحرر خانة النطاق. حرّرها من حسابك في vibefox.net.
بدون مفتاح نشط، لا تُعرض طريقة الشحن SF Express للعملاء في صفحة الدفع، ولا يُحسب أي سعر. ولا يزال مستخدم المسؤول الذي سجّل الدخول إلى لوحة الإدارة في المتصفح نفسه يرى الطريقة في المتجر، وعليها الإشارة (unlicensed — visible to admins only)، حتى تتمكن من إعداد الإضافة واختبارها قبل شراء المفتاح. وفي OpenCart 4 لا تتوفر هذه المعاينة: لا يرى المتجر تسجيل دخول المسؤول، لذلك تُخفى الطريقة عن الجميع بدون مفتاح نشط. وبعد فتح صفحة Edit مرة واحدة، يظهر تذكير في Dashboard لوحة الإدارة. أغلقه بالرمز × لإخفائه لمدة 7 أيام. ولا تتأثر الطلبات الحالية.
عندما تنتهي صلاحية الترخيص، تستمر الإضافة في العمل، لكن التحديثات والدعم تحتاج إلى تجديد. وتُعاد مراجعة الحالة تلقائيًا عند فتح Dashboard أو صفحة Edit في لوحة الإدارة: مرة يوميًا خلال أول 14 يومًا بعد إدخال المفتاح، ثم مرة أسبوعيًا. ولا حاجة إلى مهمة cron. وإلغاء تثبيت الإضافة يزيل دائمًا مفتاح الترخيص وحالته.
استكشاف الأخطاء وإصلاحها
لا تظهر SF Express في صفحة الدفع: تحقق من أن الترخيص نشط وأن Enable SF Express مفعّلة. تحقق من Geo zone أو فعّل Ignore shipping zones وتحقق من Countries. تحقق من حدود الوزن وMinimum subtotal. تحقق من أن الجدول أو Fallback cost يتضمن سعرًا للبلد. تحقق من أن المنتجات لديها Requires Shipping بقيمة Yes.
السعر يأتي من الجدول، وليس من SF Express: تحتاج الأسعار المباشرة إلى رمز العميل وcheckword، ومحافظة مرسل ومدينة، وعنوان توصيل في البر الصيني الرئيسي مع محافظة واسم مدينة صيني، وإلى سعر صرف العملة (للمتاجر التي لا تستخدم CNY). اقرأ التحذيرات أعلى صفحة الإضافة، ثم فعّل Debug log، وأعد تحميل صفحة الدفع، وانظر إلى الحقل Log لمعرفة السبب. ويُعاد الطلب الفاشل بعد 10 دقائق.
يعرض السجل خطأ توقيع: الـ checkword خاطئ أو يخص البيئة الأخرى. تحقق من إعداد Sandbox. وإذا أعلنت SF Express أن الواجهة البرمجية غير مسموح بها، فأضف واجهة استعلام الأسعار إلى تطبيق FengQiao.
العناوين في التبت تحصل على سعر الجدول: اضغط Add Chinese provinces في قسم الواجهة البرمجية في صفحة الإضافة.
هونغ كونغ: تعمل مع جدول الأسعار والتكلفة الاحتياطية. واستعلام أسعار FengQiao مخصص لعناوين البر الصيني الرئيسي.
تبدو الأسعار قديمة بعد تغيير: اضغط Save في صفحة الإضافة. وهذا يمسح أسعار SF Express المخزّنة مؤقتًا.
تقول الصفحة "Warning: You do not have permission to modify VibeFox SF Express!": قد تملك مجموعة المستخدمين الإدارية صلاحية العرض فقط. امنح المجموعة صلاحية التعديل لـ extension/shipping/vfd_sf_express (OpenCart 3) أو extension/vfd_sf_express/shipping/vfd_sf_express (OpenCart 4) في System > Users > User Groups.
للمطورين: تتيح أحداث OpenCart vfd_sf_express/quote_request وvfd_sf_express/api_url لإضافة أخرى تغيير طلب السعر (مثلًا إلى رمز منتج آخر) وعنوان البوابة.
إلغاء التثبيت
انتقل إلى Extensions > Extensions، واختر النوع Shipping، واضغط Uninstall (الزر الأحمر −) بجوار VibeFox SF Express. تُزال دائمًا مفتاح ترخيص هذه الإضافة وحالته. ويعيد OpenCart دائمًا ضبط Enable SF Express وSort order وTax class وGeo zone. وتُحذف الأسعار المخزّنة مؤقتًا دائمًا. وإذا كانت Remove data on uninstall مفعّلة، فتُحذف الإعدادات الأخرى والسجل أيضًا. وإذا كانت معطلة، فتُحفظ وتُستخدم من جديد عند إعادة تثبيت الإضافة. وتبقى المناطق الصينية التي أضفتها بـ Add Chinese provinces. وتحتفظ الطلبات الحالية بطريقة الشحن وتكلفتها.
في OpenCart 4، ولإزالة ملفات الإضافة أيضًا، انتقل بعد إلغاء التثبيت إلى Extensions > Installer، واضغط Uninstall (الزر البرتقالي −) بجوار VibeFox SF Express في قائمة الإضافات المثبتة، ثم اضغط Delete (زر سلة المهملات الأحمر) لإزالة الحزمة المرفوعة.
SF Express علامة تجارية مسجلة لمالكها. هذه الإضافة غير تابعة لـ SF Express ولا تحظى بتأييدها.
