🇮🇷 Bölgesel ve Yerel Özellikler Kapsamlı Rehberi (Iran Features)
Next-Strapi-Medusa projesi, yerel e-ticaret altyapıları için kurumsal düzeyde entegre destek sunar. ENABLE_IRAN_FEATURES=true bayrağı etkinleştirildiğinde; cep telefonu numarası ile giriş ve SMS OTP, yerel banka ağları ve ödeme geçitleri (Zarinpal), canlı kargo ücreti hesaplama ve yerel para birimi dönüşümleri Medusa çekirdeğine dokunulmadan aktif hale gelir.
Medusa Çekirdeği Değiştirilmeden Yerel Destek
1. Genel ENABLE_IRAN_FEATURES Bayrağı
Tüm sistemde (Medusa arka uç, Strapi CMS ve Next.js Mağaza Arayüzü) yerel özellikleri etkinleştirmek için .env ve docker-compose.yml dosyalarınızda aşağıdaki değişkenleri tanımlayın:
ENABLE_IRAN_FEATURES=trueNEXT_PUBLIC_ENABLE_IRAN_FEATURES=trueDEFAULT_REGION=IRDEFAULT_LOCALE=fa-IR2. Cep Telefonu Numarası ve SMS OTP ile Giriş (Phone Auth & OTP)
Özel telefon kimlik doğrulama modülü store-admin/src/modules/auth/providers/otp altında geliştirilmiştir. Yerel telefon numaralarını standart hale getirir, güvenli 4-6 haneli geçici doğrulama kodları üretir ve hız sınırlaması (rate limiting) uygular.
- Çoklu format desteği:
0912xxxxxxxve+98912xxxxxxxformatlarını otomatik olarak kabul eder. - Geri sayım sayacı ve hız sınırlaması: 120 saniyelik bekleme süresi (cooldown) ile mükerrer SMS isteklerini engeller.
- Otomatik Kayıt: Yeni doğrulanan telefon numaraları için otomatik olarak müşteri hesabı oluşturur.
{ resolve: "./src/modules/auth/providers/otp", id: "phone-auth", options: { jwtSecret: process.env.JWT_SECRET, },}3. SMS Servis Entegrasyonları (Kavenegar & SMS.ir)
SMS gönderim servisi, doğrulama kodlarının reklam engelli numaralara bile 5 saniyenin altında ulaşması için hızlı şablon (Fast Pattern / servis hattı) web kancalarını destekler:
# Sağlayıcı: sms-ir veya kavenegarSMS_PROVIDER=sms-irSMS_API_KEY=sms_ir_api_anahtarinizSMS_OTP_TEMPLATE_ID=100000 # Doğrulama şablon ID'siSMS_ORDER_PLACED_TEMPLATE_ID=200000 # Sipariş onay şablon ID'si4. Çevrimiçi Ödeme Ağ Geçidi Entegrasyonu
Ödeme modülü, Medusa'nın Payment Sessions sistemine doğrudan entegre olarak yerel banka kartlarıyla işlemleri mümkün kılar ve geliştirme ortamı için test modunu (Sandbox) destekler:
ZARINPAL_MERCHANT_ID=magaza-id-xxxx-xxxxZARINPAL_SANDBOX=false # Geliştirme ortamında true yapın5. Canlı Kargo Ücreti Hesaplama
medusa-fulfillment-iran-post eklentisi, ödeme (Checkout) aşamasında çıkış yeri, varış ili ve paket ağırlığına göre hızlı ve standart kargo ücretlerini dinamik olarak hesaplar ve sipariş yönetim panelinde 24 haneli takip kodlarını destekler.
{ resolve: "./src/modules/fulfillment/providers/iran-post", id: "iran-post", options: { originProvince: "تهران", originCity: "تهران", defaultPackagingWeight: 150, // گرم },}6. Otomatik Para Birimi Dönüşümü (convertToToman)
Fiyatlar veritabanında en küçük birimde saklanır. Strapi'deki Storefront Settings bölümünde convertToToman seçeneği etkinleştirildiğinde, ön yüz bir sıfır silerek sayıları binlik basamak ayracıyla formatlar.
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);}