المستنداتدليل المطورينالميزات والبوابات المحلية الخاصة بإيران

الميزات الإقليمية وخيارات الدفع والشحن المحلية

دعم شامل للبوابات المصرفية الإقليمية، حقول العناوين المخصصة، والتحويل التلقائي للعملات.

تلميح للتهيئة الإقليمية
تأكد من ضبط العملة الافتراضية ورمز الدولة في ملف .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
env
SMS_PROVIDER=kavenegar
SMS_API_KEY=your_api_key_here
SMS_SENDER=10008000

4. بوابات الدفع المصرفية والبنكية

ربط آمن وسريع مع بوابات الدفع المحلية لمعالجة المعاملات المالية بالعملة الوطنية.

تكوين بوابة الدفع المصرفية
env
ZARINPAL_MERCHANT_ID=your-merchant-id-uuid
ZARINPAL_SANDBOX=false

5. خيارات الشحن والتوصيل الداخلي

توفير خيارات الشحن البريدي العادي، السريع، والدراجات النارية داخل المدن الكبرى.

تكوين أسعار الشحن المحلي
typescript
{
resolve: "./src/modules/fulfillment/providers/iran-post",
id: "iran-post",
options: {
originProvince: "تهران",
originCity: "تهران",
defaultPackagingWeight: 150, // گرم
},
}

6. تحويل العملات وتنسيق الأسعار

عرض الأسعار بالعملة المحلية مع مراعاة فواصل الآلاف والأرقام المنسقة بدقة.

دالة تحويل وتنسيق العملة
typescript
export 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);
}