Ödeme sayfası, mağazanızın para kazandığı tek yerdir ve hata en çok orada can sıkar: müşteri "Siparişi onayla" düğmesine basar, "oturumunuzun süresi doldu" mesajı alır, sepeti boşalır. Ya da ödeme alınmadığı hâlde stok düşer, sipariş "Ödeme bekleniyor" durumunda kalır. Bu sorunların büyük kısmının birkaç ortak nedeni vardır: önbellek, çerezler, HTTPS ayarları, ödeme sağlayıcısının geri bildirimi ve eklenti çakışmaları.
Bu rehberde önce teşhis araçlarını açacağız, ardından en sık görülen hataları belirti, neden ve çözüm sırasıyla ele alacağız. Hata mesajlarını WooCommerce'in kaynak kodundaki İngilizce asıllarıyla veriyoruz; Türkçe sitede bunların çevirisi görünür.
Önce teşhis: kayıtları açın

WooCommerce kayıtları (Logs)
WooCommerce > Status > Logs ekranı mağazadaki olayların kayıtlarını tutar. WooCommerce belgelerine göre ölümcül hatalar fatal-errors adıyla otomatik kaydedilir; ödeme altyapılarının kayıtları ise ilgili ödeme eklentisinin ayarlarından ayrıca açılmalıdır. Kayıt açıldıktan sonra yalnızca yeni işlemler yazılır, bu yüzden sorunu görmek için bir test siparişi vermeniz gerekebilir. Ödeme başlatıldığını gösteren ama tamamlandığını göstermeyen bir kayıt, sürecin yarıda kesildiğini gösterir.
Sipariş notları
Sipariş düzenleme ekranındaki Order notes paneli ödeme sonuçlarını, durum değişikliklerini ve webhook geri bildirimlerini sistem notu olarak gösterir. WooCommerce'in sipariş sorun giderme belgesine göre ödeme denemesine dair hiç not olmaması da bir ipucudur: ödeme altyapısı WooCommerce ile iletişim kuramamış veya süreç tamamlanmadan kesilmiş olabilir.
WordPress hata kaydı
Sorun bir PHP hatasından kaynaklanıyorsa WordPress'in hata kaydını geçici olarak açın. WordPress belgelerindeki şu ayarlar hataları ziyaretçiye göstermeden wp-content/debug.log dosyasına yazar:
// wp-config.php, "That's all, stop editing!" satırından önce
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );WooCommerce > Status altındaki sistem durumu raporu da PHP sürümü, bellek sınırı, etkin eklentiler ve şablon geçersiz kılmaları (template overrides) gibi bilgileri tek sayfada verir; destek isterken bu raporu paylaşmak işinizi hızlandırır.
Hata 1: "Sorry, your session has expired"
WooCommerce'in ödeme işleme kodu (WC_Checkout::process_checkout), sipariş gönderildiğinde formdaki güvenlik anahtarını (nonce) doğrular. Kaynak koda göre doğrulama başarısız olursa iki şey olabilir:
| Durum | Gösterilen mesaj | Anlamı |
|---|---|---|
| Nonce geçersiz ve sepet boş | "Sorry, your session has expired. Return to shop" | Müşterinin oturumu (ve sepeti) kaybolmuş |
| Nonce geçersiz ama sepet dolu | "We were unable to process your order, please try again." | Form eski bir anahtarla gönderilmiş; WooCommerce tutarları yeniletir |
Yani bu mesajın arkasında çoğunlukla müşterinin oturum çerezinin (wp_woocommerce_session_) okunamaması veya ödeme sayfasının eski bir kopyasının sunulması vardır. En sık nedenler:
- Ödeme veya sepet sayfası önbelleğe alınmış. WooCommerce geliştirici belgeleri Cart, Checkout ve My Account sayfalarının her önbellek sisteminde hariç tutulmasını ister; bu sayfalar müşteriye özeldir.
- Çerezler önbelleği atlatmıyor. Aynı belge
woocommerce_cart_hash,woocommerce_items_in_cartvewp_woocommerce_session_çerezlerinin önbellek dışında tutulmasını önerir. Sunucu önbelleğinin yanında bir CDN veya proxy kullanıyorsanız kuralı orada da tanımlayın. - Adres tutarsızlığı. Çerezler alan adına bağlıdır. Site bazı sayfalarda
www'lu, bazılarındawww'suz ya da bazı sayfalardahttpile açılıyorsa oturum çerezi kaybolabilir.Settings > Generalaltındaki WordPress Address ve Site Address değerlerinin aynı vehttps://ile başladığından emin olun. - Veritabanı önbelleği oturumu saklıyor. Belgeye göre önbellek sisteminiz veritabanı önbelleği sunuyorsa
_wc_session_kayıtlarını hariç tutmak faydalı olabilir.
LiteSpeed Cache kullanıyorsanız eklenti bu üç sayfayı varsayılan olarak önbellek dışında tutar; ancak LiteSpeed belgeleri WooCommerce sayfa eşleştirmeleri yanlışsa sayfaların yanlış sınıflandırılabileceğini belirtir. WooCommerce > Settings > Advanced altında Cart, Checkout ve My account sayfalarının doğru seçildiğini kontrol edin. Ayrıntılar için WooCommerce hızlandırma rehberi.
Hata 2: Blok ödeme sayfasında nonce hataları
Blok tabanlı sepet ve ödeme sayfaları WooCommerce Store API ile çalışır. Store API belgesine göre /cart uç noktalarına yapılan POST istekleri ve tüm /checkout istekleri Nonce adlı bir istek başlığı ister; geçerli bir anahtar gönderilmezse API hata döndürür. Her başarılı istekten sonra yeni bir anahtar gönderilir ve tarayıcı bunu saklayıp bir sonraki istekte kullanır. Sayfanın eski bir kopyası önbellekten gelirse veya bir güvenlik eklentisi/proxy bu başlığı engellerse sepet güncellenmez, sipariş verilemez.
Hata 3: Ödeme alınmadı ama stok düştü, sipariş "Pending payment"ta kaldı

Önce durumların ne anlama geldiğini netleştirelim. WooCommerce belgelerine göre:
| Durum | Anlamı | Stok |
|---|---|---|
| Draft | Blok ödeme sayfasında, sipariş gönderilmeden önceki geçici kayıt | Stok tutma ayarı uygulanır |
| Pending payment | Sipariş alındı, ödeme henüz onaylanmadı | Stok tutma ayarı uygulanır |
| On hold | Ödeme onayı bekleniyor (ör. havale/EFT) | Stok düşmüştür |
| Processing | Ödeme alındı, gönderim bekleniyor | Stok düşmüştür |
| Failed | Ödeme başarısız veya reddedildi | Daha önce düşmüşse iade edilir |
| Cancelled | Sipariş iptal edildi | Stok yönetimi açıksa iade edilir |
Stok, ödeme beklenirken Hold stock (minutes) ayarıyla tutulur: WooCommerce > Settings > Products > Inventory. Belgeye göre süre dolduğunda ödeme bekleyen sipariş iptal edilir ve stok serbest kalır; bu yalnızca "Pending payment" siparişler için geçerlidir, "On hold" için değil. Alan boş bırakılırsa özellik kapanır. WooCommerce'in sorun giderme belgesi 60 dakikayı önerir.
WooCommerce kaynak koduna göre bu iptal işlemi zamanlanmış bir görevle (Action Scheduler veya WP-Cron) çalışır ve yalnızca stok yönetimi açıkken ve süre girilmişken zamanlanır. Bu yüzden "stok geri gelmiyor" şikâyetinde şunlara bakın:
- Stok yönetimi hem genel ayarda (Enable stock management) hem de üründe (Track stock quantity for this product) açık mı?
- Hold stock alanında bir süre var mı?
WooCommerce > Status > Scheduled Actionsekranındawoocommerce_cancel_unpaid_ordersgörevi gecikmiş (past-due) görünüyor mu? Görünüyorsa WP-Cron tetiklenmiyordur.DISABLE_WP_CRONeklenip gerçek bir cron görevi kurulmamış olabilir; çözümü hızlandırma rehberinin Action Scheduler bölümünde.
Ödeme yapıldığı hâlde sipariş Pending payment'ta kalıyorsa
Çoğu ödeme altyapısı ödeme alınınca siparişi otomatik olarak Processing'e taşır. Bu olmuyorsa genellikle ödeme sağlayıcısının mağazanıza gönderdiği geri bildirim (callback, bildirim URL'si, webhook) ulaşmıyordur. Kontrol listesi:
- Sipariş notlarında ödeme sağlayıcısından gelen bir kayıt var mı?
- Ödeme eklentisinin kaydını açıp test siparişi verin; kayıtta başlatma var ama sonuç yoksa geri bildirim gelmiyordur.
- Ödeme sağlayıcısının panelinde bildirim adresi doğru mu ve
https://ile mi başlıyor? - Bakım modu, şifre koruması, güvenlik eklentisi veya ülke engeli geri bildirim isteğini engelliyor mu?
iyzico ve PayTR'de hangi anahtarların ve bildirim adresinin nereye girileceği iyzico ve PayTR ödeme eklentisi kurulumu yazısında adım adım anlatılıyor; iyzico'nun genel entegrasyon mantığı için iyzico ödeme entegrasyonu rehberine bakın.
Hata 4: Karma içerik (mixed content) uyarısı
SSL kurulu olduğu hâlde ödeme sayfasında kilit simgesi kırık görünüyorsa sayfa bazı görsel, betik veya stil dosyalarını http:// ile yüklüyordur. WooCommerce'in SSL belgesi, tarayıcının geliştirici araçlarındaki konsolun bu güvensiz kaynakları listelediğini ve çoğu durumda bağlantıları https:// ile değiştirmenin yettiğini söyler. Yeni SSL kurduysanız Settings > General altındaki iki adresi https:// ile güncelleyin. Veritabanındaki eski bağlantıları toplu değiştirme ve adım adım çözüm için mixed content hatası çözümü, SSL kurulumu için Let's Encrypt SSL kurulumu yazılarına bakın.
Hata 5: Yönlendirme döngüsü (ERR_TOO_MANY_REDIRECTS)
WooCommerce'in Force SSL ayarı (WooCommerce > Settings > Advanced) Checkout, My account ve Pay (ödeme sayfasının bir uç noktası) sayfalarının yalnızca HTTPS ile açılmasını sağlar. Belgeye göre site adresi zaten https:// ile başlıyorsa bu ayar görünmez; WooCommerce tüm sitenin HTTPS ile çalışmasını önerir. Aynı belge iki döngü nedenini sayar:
- Güvenli adresi zorlamayı geri almaya çalışan başka bir SSL eklentisi kurulu. Eklentiyi kaldırın veya Force SSL'i kapatın.
- SSL bir vekil sunucu (proxy) üzerinden sağlanıyor ve WordPress isteğin HTTPS olduğunu algılayamıyor. Bu durumda
is_ssl()yanlış sonuç verir ve site sürekli HTTPS'e yönlendirir.
Bir başka döngü türü "şifre sıfırlama sonsuz döngüsü"dür: WooCommerce belgelerine göre bunun nedeni My Account sayfasının önbelleğe alınmasıdır. Genel yönlendirme döngüsü teşhisi için ERR_TOO_MANY_REDIRECTS çözümü yazısına bakın.
Hata 6: Eklenti veya tema çakışması

Yukarıdaki nedenlerin hiçbiri tutmuyorsa sorun büyük olasılıkla bir eklenti veya temadan kaynaklanıyordur. WooCommerce'in çakışma testi belgesi şu sırayı önerir:
- 1. Yedek alın; mümkünse testi canlı site yerine bir hazırlık (staging) kopyasında yapın.
- 2. Tüm eklentileri ve temayı güncelleyin.
- 3. Twenty Twenty-Five gibi varsayılan bir WordPress temasına veya Storefront'a geçip sorunu yeniden deneyin. Sorun kaybolursa neden temadır.
- 4. WooCommerce ve sorunla ilgili WooCommerce eklentileri (ör. ödeme eklentiniz) dışındaki tüm eklentileri geçici olarak devre dışı bırakın ve aynı adımları tekrarlayın.
- 5. Sorun kaybolduysa eklentileri tek tek açıp her seferinde test edin; sorunu geri getiren eklenti suçludur.
Belge, eklenti listesindeki Must-Use ve Drop-ins bölümlerine de dikkat çeker: bunları doğrudan kapatamazsınız ve bazı hosting firmaları önbellek amaçlı drop-in eklentiler kurar. Sorun bunlardan kaynaklanıyorsa hosting desteğinden yardım isteyin. Belgede adı geçen WP Rollback (eski sürüme dönmek) ve Query Monitor (PHP hataları ve sorgular) eklentileri teşhiste işinizi kolaylaştırır.
Hata 7: Ödeme sırasında kritik hata veya beyaz ekran
"Bu sitede kritik bir hata oluştu" mesajı veya boş bir sayfa görüyorsanız WooCommerce > Status > Logs içindeki fatal-errors kaydına ve debug.log dosyasına bakın. En sık nedenler bellek sınırının aşılması ve güncel PHP ile uyumsuz bir eklentidir. Adım adım çözüm için WordPress kritik hata çözümü ve PHP memory limit hatası yazılarına bakın.
Belirtiye göre ilk bakılacak yer
| Belirti | İlk kontrol |
|---|---|
| "Session has expired" ve boş sepet | Sepet/ödeme sayfası önbelleği, çerez kuralları, www/https tutarlılığı |
| "Unable to process your order" | Ödeme sayfasının eski kopyası sunuluyor mu? |
| Blok ödeme sayfasında sipariş verilemiyor | Store API isteklerinde Nonce başlığı, önbellek, güvenlik eklentisi |
| Ödeme alındı, sipariş Pending payment | Sipariş notları, ödeme eklentisi kaydı, bildirim URL'si |
| Stok iade edilmiyor | Hold stock süresi, stok yönetimi, Scheduled Actions |
| Kırık kilit simgesi | Tarayıcı konsolu, http:// kaynaklar |
| Sonsuz yönlendirme | Force SSL ile başka SSL eklentisi, proxy arkasında SSL |
| Sadece bazı müşterilerde sorun | Eklenti/tema çakışma testi |
Sık Sorulan Sorular
Önbelleği tamamen kapatırsam sorunlar biter mi?
Önbelleğe bağlı sorunlar biter ama mağaza yavaşlar. Doğru çözüm, önbelleği açık tutup sepet, ödeme ve hesap sayfalarını ve WooCommerce çerezlerini hariç tutmaktır. Ayarlar için WooCommerce hızlandırma rehberine bakın.
Test siparişini canlı sitede nasıl veririm?
Ödeme eklentinizin test (sandbox) modunu kullanın veya düşük tutarlı bir ürünle gerçek bir sipariş verip iade edin. Ödeme kayıtlarını test öncesinde açın; kayıt yalnızca açıldıktan sonraki işlemleri yazar.
Hata sadece bazı il ve ilçelerde çıkıyor, neden?
Adres alanlarına bağlı hatalar genellikle kargo bölgesi eşleşmesinden ("gönderim seçeneği yok") veya özelleştirilmiş adres alanlarından kaynaklanır. Bölge ayarları için WooCommerce kargo ayarları, il/ilçe ve fatura alanları için WooCommerce Türkiye ayarları yazılarına bakın.
Ödeme sayfasında hangi yasal metinler bulunmalı?
Bu yazı teknik hatalarla ilgilidir. Ödeme öncesinde gösterilmesi gereken metinler için ön bilgilendirme formu ve mesafeli satış sözleşmesi yazılarına bakın.
Yazılım, eklenti ve hizmet adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen şirketlerle bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: iyzico ve PayTR eklentileri · WooCommerce hızlandırma · WooCommerce kurulumu · WooCommerce kargo ayarları · Mixed content çözümü · ERR_TOO_MANY_REDIRECTS çözümü · WordPress kritik hata çözümü