🇮🇷 راهنمای جامع قابلیتهای بومی ایران (Iran Features)
پروژه Next-Strapi-Medusa دارای پشتیبانی توکار و سطح بالا از زیرساختهای بومی تجارت الکترونیک ایران است. با فعالسازی فلگ ENABLE_IRAN_FEATURES=true، امکانات ورود با شماره موبایل و پیامک OTP، درگاههای بانکی شتاب/شاپرک (زرینپال)، محاسبه تعرفه زنده پست پیشتاز، و نمایش قیمتها به تومان بدون هیچ دستکاری در هسته مدوسا فعال میشوند.
پشتیبانی بومی بدون تغییر در هسته Medusa
۱. فلگ سراسری ENABLE_IRAN_FEATURES
برای فعالسازی تمامی قابلیتهای اختصاصی ایران در کل استک (بکاند مدوسا، پنل استراپی و استورفرانت نکست)، کافیست متغیر زیر را در فایل .env و docker-compose.yml تنظیم کنید:
ENABLE_IRAN_FEATURES=trueNEXT_PUBLIC_ENABLE_IRAN_FEATURES=trueDEFAULT_REGION=IRDEFAULT_LOCALE=fa-IR۲. ورود و ثبتنام با پیامک و شماره موبایل (Phone Auth & OTP)
ماژول اختصاصی احراز هویت با شماره موبایل در مسیر store-admin/src/modules/auth/providers/otp پیادهسازی شده است. این سیستم شمارههای ایران را به صورت استاندارد فرمتبندی کرده و با ایجاد کدهای موقت ۴ تا ۶ رقمی، ارسال پیامک را با استراتژی Rate Limiting ایمن انجام میدهد.
- پشتیبانی از فرمتهای مختلف: پذیرش خودکار
0912xxxxxxxو+98912xxxxxxx. - تایمر شمارش معکوس و Rate Limiting: جلوگیری از درخواستهای مکرر پیامک (Cooldown ۱۲۰ ثانیهای).
- ثبتنام خودکار (Auto Register): در صورت جدید بودن شماره، حساب مشتری به صورت خودکار ساخته میشود.
{ resolve: "./src/modules/auth/providers/otp", id: "phone-auth", options: { jwtSecret: process.env.JWT_SECRET, },}۳. سرویسهای پیامک ایرانی (Kavenegar & SMS.ir)
سیستم ارسال پیامک از الگوهای وبسرویس سریع (Fast Pattern / خط خدماتی) پشتیبانی میکند تا پیامک تایید حتی به شمارههای بلکلیست تبلیغاتی نیز در کمتر از ۵ ثانیه ارسال شود:
# نوع ارائهدهنده: sms-ir یا kavenegarSMS_PROVIDER=sms-irSMS_API_KEY=your_sms_ir_api_keySMS_OTP_TEMPLATE_ID=100000 # شناسه قالب کد تایید (Pattern ID)SMS_ORDER_PLACED_TEMPLATE_ID=200000 # شناسه قالب ثبت سفارش۴. درگاه پرداخت اینترنتی زرینپال (Zarinpal Gateway)
ماژول اختصاصی درگاه زرینپال مستقیماً به سیستم Payment Sessions مدوسا متصل است. این ماژول امکان خرید با کارتهای بانکی عضو شتاب را فراهم ساخته و از حالت تست (Sandbox) نیز پشتیبانی میکند:
ZARINPAL_MERCHANT_ID=your-merchant-id-xxxx-xxxxZARINPAL_SANDBOX=false # در محیط توسعه true بگذارید۵. محاسبه زنده کرایه پست ایران (Iran Post Fulfillment)
پلاگین medusa-fulfillment-iran-post در مرحله Checkout تسویهحساب، هزینه پست پیشتاز و سفارشی را براساس مبدأ، استان مقصد و وزن مرسوله بر اساس آخرین تعرفه پستی محاسبه میکند و امکان درج کد رهگیری ۲۴ رقمی پست را در پنل سفارشات دارد.
{ resolve: "./src/modules/fulfillment/providers/iran-post", id: "iran-post", options: { originProvince: "تهران", originCity: "تهران", defaultPackagingWeight: 150, // گرم },}۶. تبدیل هوشمند واحد پول به تومان (convertToToman)
در دیتابیس مدوسا مبالغ به ریال ذخیره میشوند (جهت سازگاری با سیستمهای شاپرک)، اما در پنل استراپی با روشن کردن گزینه convertToToman در تنظیمات Storefront Settings، فرانتاند یک صفر از ارقام را برداشته و قیمتها را با جداکننده هزارگان به تومان به کاربران نمایش میدهد.
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);}