
Bir Shopify mağazasında “Sepette özel üretim ürün varsa vergi numarası girilmeden sipariş verilemez” gibi bir kural olabilir.
İlk çözüm checkout'a JavaScript ekleyip alan boşsa ilerlemeyi engellemek gibi görünür. Ancak UI'da bir şeyi engellemek ile commerce engine'in işlemi reddetmesi aynı şey değildir.
Checkout validation nedir?
Validation, siparişin tamamlanabilmesi için belirli business rule'ların sağlanıp sağlanmadığının kontrol edilmesidir.
Örnekler:
- minimum sipariş tutarı,
- maksimum ürün adedi,
- belirli ülkeye ürün gönderememe,
- B2B siparişinde PO numarası zorunluluğu,
- belirli ürünlerin birlikte satın alınamaması,
- müşteri segmentine göre satın alma kısıtı.
UI validation ile commerce validation farkı
UI kullanıcıya erken geri bildirim verir. Commerce validation ise kuralın gerçek enforcement noktasıdır.
Neden frontend yeterli değil?
Commerce normal storefront, express checkout, Shop Pay, apps, headless storefront ve agentic commerce yüzeyleri gibi farklı yollardan çalışabilir. Business rule yalnız belirli UI component'inde yaşıyorsa başka bir akış tarafından bypass edilebilir.
Cart and Checkout Validation Functions nedir?
Shopify Functions, validation logic'in commerce execution katmanında çalışmasını sağlar.
Checkout Attempt → Shopify → Validation Function → Business Rules → PASS / REJECT
Örnekler
Minimum sipariş tutarı
Toptan müşteriler için minimum 10.000 TL sipariş kuralı frontend'de anlatılabilir ama commerce katmanında enforce edilmelidir.
B2B PO numarası
PO numarası yalnız required UI field değil, gerçek transaction rule olabilir.
Billing country restriction
Belirli ürün veya müşteri grubunun bazı ülkelere satılamaması client-side script'e bağımlı olmadan uygulanmalıdır.
Birlikte satın alınamayan ürünler
UI kullanıcıya erken uyarı gösterebilir; checkout validation aynı kuralı gerçekten enforce etmelidir.
Business rule neden tek yerde tanımlanmalı?
Aynı kural theme, checkout extension, backend ve ERP'de kopyalanırsa zamanla farklılaşır.
Daha doğru model: Business Rule → Commerce Enforcement + UI Presentation
Checkout UI Extension ne zaman kullanılmalı?
- açıklama göstermek,
- özel form toplamak,
- ek seçenek sunmak,
- kullanıcıya validation durumunu önceden anlatmak,
- custom content göstermek.
Ancak kritik business rule'ın güvenliği yalnız UI extension'a bırakılmamalıdır.
Validation performansı neden önemli?
Checkout conversion path üzerindedir. Validation logic deterministic, hızlı ve mümkün olduğunca external dependency'siz olmalıdır.
External API gerekiyorsa ne yapılmalı?
State mümkünse önceden Shopify'a synchronize edilmelidir. Checkout anında uzak ERP API'sine synchronous request atmak latency ve timeout riskini artırabilir.
Headless storefront'ta validation nasıl düşünülmeli?
Headless storefront tamamen size ait olsa bile gerçek transaction rule mümkün olduğunca commerce katmanında enforce edilmelidir. Frontend aynı rule'ı daha erken kullanıcıya anlatabilir.
B2B commerce'te validation neden daha kritik?
B2B tarafında minimum sipariş, maximum quantity, PO number, company context, özel ödeme koşulları, bölgesel restriction ve contract pricing gibi daha fazla kural bulunur.
Checkout validation test matrisi
| Senaryo | Kontrol |
|---|---|
| Guest | Kural uygulanıyor mu? |
| Logged-in customer | Customer state doğru mu? |
| B2B buyer | Company context doğru mu? |
| Express checkout | Kural bypass oluyor mu? |
| Shop Pay | Validation çalışıyor mu? |
| Headless | Aynı rule geçerli mi? |
| Mobile | Error anlaşılır mı? |
| Multiple discounts | Threshold doğru mu? |
Validation checklist
- Business rule dokümante edilmiş mi?
- UI rule ile backend rule ayrılmış mı?
- Function deterministic mi?
- External API dependency var mı?
- Failure mode tanımlı mı?
- Guest, B2B, Shop Pay, express ve headless test edildi mi?
- Currency/market değişiminde threshold doğru mu?
- Subscription ve bundle senaryoları test edildi mi?
Validation observability
Production sonrasında hangi validation'ın checkout'u ne sıklıkta engellediği izlenmelidir. Bu veri debugging yanında CRO açısından da değerlidir.
Validation ile UI warning aynı şey değildir
Checkout UI'da “minimum sipariş 500 TL” yazmak kullanıcı iletişimidir. Gerçek business enforcement backend/checkout rule katmanında olmalıdır.
Validation rule sınıfları
Cart integrity
- minimum/maximum quantity,
- incompatible products.
Customer eligibility
- B2B/customer segment.
Geography
- ülke/region kısıtları.
Compliance
- özel koşul/ürün.
Rule ordering
Bir sepet aynı anda üç rule'u ihlal edebilir. Fail-fast veya all-errors politikası bilinçli seçilmelidir.
Config-driven validation
Hard-coded threshold yerine:
market=TR
minimum=500
currency=TRY
config kullanılabilir.
Currency problemi
Minimum order validation presentment currency ile mi, shop currency ile mi çalışacak? Conversion kuralı açık tanımlanmalıdır.
Bundle/discount etkileşimi
Validation subtotal:
- discount öncesi mi?
- sonrası mı?
- shipping dahil mi?
dokümante edilmelidir.
Test matrix
- zero cart,
- exact threshold,
- below threshold,
- automatic discount,
- code discount,
- multi-currency,
- bundle,
- subscription,
- customer segment,
- accelerated checkout.
Boundary test özellikle önemlidir.
Observability
Validation block rate:
- reason,
- market,
- device,
- cart value
ile ölçülebilir.
Validation mesajı CRO'nun parçasıdır
Kural doğru olsa bile mesaj kötü olabilir.
Kötü: “Checkout validation failed.”
İyi: “Bu ürün yalnızca Türkiye teslimatında kullanılabilir. Ürünü sepetten çıkarın veya teslimat ülkesini Türkiye olarak değiştirin.”
Validation backend enforcement; mesaj ise kullanıcı deneyimidir. İkisi ayrı optimize edilmelidir.
Sonuç
Shopify checkout'ta kritik iş kurallarını yalnız JavaScript veya UI extension ile enforce etmek doğru bir architecture değildir. Kullanıcı arayüzü feedback verir; gerçek commerce validation commerce katmanında çalışmalıdır.
Reliefers olarak özel Shopify projelerinde checkout customization'ı yalnız tasarım veya component geliştirme olarak değil; business rule, enforcement, UX ve analytics problemi olarak ele alıyoruz.
