الميزات الإقليمية وخيارات الدفع والشحن المحلية
دعم شامل للبوابات المصرفية الإقليمية، حقول العناوين المخصصة، والتحويل التلقائي للعملات.
تلميح للتهيئة الإقليمية
تأكد من ضبط العملة الافتراضية ورمز الدولة في ملف .env لضمان التنسيق التلقائي الصحيح.
1. نظام التحقق وتحديد المنطقة
التعرف التلقائي على دولة الزائر لتحديد بوابات الدفع المناسبة وطرق الشحن المتاحة.
تحديد المنطقة في Middleware
env// تحديد العملة والبوابة بناءً على كود الدولة في طلب العميل2. تسجيل الدخول برقم الهاتف ورمز التحقق (OTP SMS)
تسجيل دخول سريع وآمن دون الحاجة لكلمة مرور عبر إرسال كود تحقق مؤقت برسالة SMS.
- إرسال رمز تحقق عشوائي مكون من 5 إلى 6 أرقام عبر مزود خدمة SMS.
- تخزين الرمز مؤقتاً في ذاكرة Redis مع صلاحية دقيقتين لمنع التخمين.
- التحقق وتوليد توكن JWT للمستخدم فور إدخال الرمز الصحيح.
كود التحقق من رقم الهاتف (OTP)
typescript{ resolve: "./src/modules/auth/providers/otp", id: "phone-auth", options: { jwtSecret: process.env.JWT_SECRET, },}3. مزودات خدمة الرسائل النصية (SMS Providers)
تكامل جاهز مع كبرى بوابات الرسائل النصية القصيرة لإرسال إشعارات الطلبات وتأكيد الشحن.
إعداد مزود خدمة SMS
envSMS_PROVIDER=kavenegarSMS_API_KEY=your_api_key_hereSMS_SENDER=100080004. بوابات الدفع المصرفية والبنكية
ربط آمن وسريع مع بوابات الدفع المحلية لمعالجة المعاملات المالية بالعملة الوطنية.
تكوين بوابة الدفع المصرفية
envZARINPAL_MERCHANT_ID=your-merchant-id-uuidZARINPAL_SANDBOX=false5. خيارات الشحن والتوصيل الداخلي
توفير خيارات الشحن البريدي العادي، السريع، والدراجات النارية داخل المدن الكبرى.
تكوين أسعار الشحن المحلي
typescript{ resolve: "./src/modules/fulfillment/providers/iran-post", id: "iran-post", options: { originProvince: "تهران", originCity: "تهران", defaultPackagingWeight: 150, // گرم },}6. تحويل العملات وتنسيق الأسعار
عرض الأسعار بالعملة المحلية مع مراعاة فواصل الآلاف والأرقام المنسقة بدقة.
دالة تحويل وتنسيق العملة
typescriptexport function formatPrice(amount: number, currencyCode: string, convertToToman = false) { if (currencyCode.toLowerCase() === 'irr' && convertToToman) { const tomanAmount = Math.round(amount / 10); return `${new Intl.NumberFormat('fa-IR').format(tomanAmount)} تومان`; } return new Intl.NumberFormat('fa-IR', { style: 'currency', currency: currencyCode }).format(amount);}