WP-Rocket — uyumluluk notları
> Son güncelleme: 2026-05-06 (Hafta 17) > Durum: Sadece konfigürasyon — kod değişikliği gerekmez. WP-Rocket varsayılan ayarlarla 3DS callback ve REST endpoint'lerini cache'lemeye çalıştığında ödeme akışı kırılabilir; aşağıdaki üç ayar bu sorunu önler.
WP-Rocket, premium WordPress cache eklentisi (~1M+ aktif kullanıcı). Türkiye'deki çoğu yüksek-trafikli WC mağazası kullanıyor. POS Entegratör'ün üç tür endpoint'i WP-Rocket'ın varsayılan cache mantığıyla çakışabilir:
- PSP/banka callback REST endpoint'leri — POST request, dinamik cevap; cache'lenirse callback aynı response'u döndürür ve sipariş statüsü güncellenmez.
- 3DS köprü sayfası — query-string driven HTML, geçici token ile; cache her token'a göre ayrı sayfa üretmemeli.
- Blocks Checkout JS —
assets/js/blocks/invum-payment-method.jsminify edildiğindewp.element.useStatehooks bozulabilir.
1. URL'leri cache'den hariç tut
WP-Rocket Ayarları → Cache → Hiçbir Zaman Cache'leme (URLs) ekranına aşağıdaki path'leri ekle:
/wp-json/invum-pos/v1/(.*)
/(.*)?(.*)invum_pos_3ds=(.*)
/wp-admin/admin-post.php?action=invum_pos_(.*)
Açıklamalar:
| Path | Neden | |——|——-| | /wp-json/invum-pos/v1/ | iyzico/PayTR/Param/NestPay callback REST endpoint'leri. Hepsi POST, cache'lenmemeli. | | ?invum_pos_3ds=<token> | Pos3DSBridge::issue() ile üretilen 3DS challenge sayfası. Token tek kullanımlık + transient bağımlı; cache her token'da yeni response üretmeli. | | /wp-admin/admin-post.php?action=invum_pos_ | License activate/deactivate, vault add/delete, smart-rule form submit, POS hesabı kaydet/sil — hepsi admin-post.php üzerinden. |
WP-Rocket'in regex desteği için path'leri Hiçbir Zaman Cache'leme (URLs) alanında regex modunda girdiğinden emin ol (alanın yanında Regex'i etkinleştir toggle'ı vardır).
2. Cookie'leri cache'den hariç tut (opsiyonel)
WC oturum cookie'si (wp_woocommerce_session_*) zaten WP-Rocket'ın varsayılan exclude listesinde. Ek bir şey gerekmez — ama özel bir tema/eklenti invum_pos_3ds_session gibi cookie ekliyorsa onu da exclude et.
3. JS/CSS minify ve birleştirme istisnaları
WP-Rocket Ayarları → Dosya Optimizasyonu → JavaScript sekmesinde:
"JavaScript dosyalarını birleştir" (Combine JS) açıksa:
Hariç tutulan JS dosyaları alanına ekle:
/wp-includes/js/dist/element.min.js
/wp-content/plugins/invum-pos-core/assets/js/blocks/invum-payment-method.js
Sebep: wp.element (wp-element script handle) WC Blocks'un saved-card React subcomponent'i için olmazsa olmaz. Combine JS, wp-element dependency chain'ini bozarsa wp.element.useState is not a function hatası alınır.
"JavaScript ertelemesi" (Defer JS) açıksa:
Hariç tutulan JS dosyaları alanına ekle:
/wp-content/plugins/invum-pos-core/assets/js/blocks/invum-payment-method.js
Defer modunda script'imiz wc-blocks-registry global'i hazır olmadan çalışmaya başlayabilir.
4. Database optimization riski
WP-Rocket'ın Veritabanı → Geçici Veri (Transients) Temizle seçeneği aktif ise, 3DS bridge transient'larını da silebilir — kullanıcı 3DS challenge'ında "expired" hatası görür.
Çözümler:
- Bu seçeneği kapat. (En güvenli — transient cleanup görece az değer üretir.)
- Veya
wp_optionstablosunda_transient_timeout_invum_pos_3ds_%ile başlayan satırları manuel exclude için bir hook yazılabilir (advanced — ileri seviye yapılandırma).
5. Doğrulama smoke testi
Yapılandırma sonrası:
- Cache temizle → WP-Rocket toolbar → "Tüm cache'i temizle".
- Test sandbox checkout — bir test siparişle iyzico/PayTR/Param/NestPay'i denemek için. Çalıştığını gör.
- Browser DevTools → Network sekmesi ile callback POST request'inin HTTP 200 + dinamik cevap döndüğünü doğrula. Response header'da
X-Powered-ByveyaCache-Controlno-cacheolmalı. - Saved-card radio picker Blocks Checkout'ta render olmalı; console'da
wp.elementhatası olmamalı.
6. Bilinen sorunlar
| Sorun | Çözüm | |——-|——-| | Callback'ten "Order not found" hatası geliyor | Callback URL cache'lenmiş. Adım 1'i kontrol et. | | 3DS sayfası boş geliyor ya da "Bridge expired" | Adım 1 (3DS query exclude) yapılmamış veya transient temizlik aktif (Adım 4). | | Blocks checkout'ta wp.element undefined console hatası | Adım 3 (Combine JS exclude) yapılmamış. | | Saved-card seçimi "Place Order" sırasında 0 gönderiyor | Defer JS exclude eksik (Adım 3). |
Not: WP-Rocket-yerine başka bir cache eklentisi (W3 Total Cache, LiteSpeed Cache, WP Super Cache vb.) kullanıyorsan aynı endpoint pattern'lerini onun cache exclude bölümüne ekle. Path'ler aynı:
/wp-json/invum-pos/v1/*?invum_pos_3ds=/wp-admin/admin-post.php?action=invum_pos_*