🇮🇷 Руководство по региональным и локальным модулям (Iran Features)
Проект Next-Strapi-Medusa включает встроенную поддержку локальной коммерческой инфраструктуры корпоративного уровня. При установке переменной ENABLE_IRAN_FEATURES=true активируются вход по номеру телефона с SMS OTP, шлюзы онлайн-банкинга (Zarinpal), расчет тарифов доставки и конвертация цен без изменения ядра Medusa.
Нативная поддержка без вмешательства в ядро Medusa
1. Глобальный флаг ENABLE_IRAN_FEATURES
Для активации региональных возможностей во всем стеке (бэкенд Medusa, Strapi CMS и витрина Next.js) задайте следующие переменные в файлах .env и docker-compose.yml:
ENABLE_IRAN_FEATURES=trueNEXT_PUBLIC_ENABLE_IRAN_FEATURES=trueDEFAULT_REGION=IRDEFAULT_LOCALE=fa-IR2. Вход по номеру телефона и SMS OTP (Phone Auth & OTP)
Модуль телефонной аутентификации реализован в store-admin/src/modules/auth/providers/otp. Он нормализует телефонные номера, генерирует безопасные одноразовые коды и защищает от частого вызова.
- Поддержка форматов: Автоматически принимает как
0912xxxxxxx, так и+98912xxxxxxx. - Таймер и ограничение запросов: Защита от повторной отправки SMS с интервалом в 120 секунд.
- Автоматическая регистрация: Автоматическое создание учетной записи для новых подтвержденных номеров.
{ resolve: "./src/modules/auth/providers/otp", id: "phone-auth", options: { jwtSecret: process.env.JWT_SECRET, },}3. SMS-шлюзы (Kavenegar & SMS.ir)
Сервис отправки SMS поддерживает шаблоны с доставкой кодов менее чем за 5 секунд:
# Провайдер: sms-ir или kavenegarSMS_PROVIDER=sms-irSMS_API_KEY=your_sms_api_keySMS_OTP_TEMPLATE_ID=100000 # ID шаблона кода подтвержденияSMS_ORDER_PLACED_TEMPLATE_ID=200000 # ID шаблона подтверждения заказа4. Платежный онлайн-шлюз Zarinpal
Модуль Zarinpal интегрирован в систему платежных сессий Medusa, обеспечивая безопасные банковские транзакции с поддержкой тестового режима (Sandbox):
ZARINPAL_MERCHANT_ID=your-merchant-id-xxxx-xxxxZARINPAL_SANDBOX=false # Установите true для тестирования5. Расчет стоимости доставки в реальном времени (Fulfillment)
Плагин medusa-fulfillment-iran-post рассчитывает тарифы стандартной и экспресс-доставки при оформлении заказа на основе пункта отправления, назначения и веса посылки, поддерживая 24-значные трек-номера.
{ resolve: "./src/modules/fulfillment/providers/iran-post", id: "iran-post", options: { originProvince: "تهران", originCity: "تهران", defaultPackagingWeight: 150, // گرم },}6. Интеллектуальная конвертация валюты (convertToToman)
Цены сохраняются в минимальных единицах в базе данных. В Strapi при включении опции 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);}