Ö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

Önce teşhis: kayıtları açın: WooCommerce kayıtları (Logs), Sipariş notları, WordPress hata kaydı

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:

php
// 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:

DurumGösterilen mesajAnlamı
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_cart ve wp_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ında www'suz ya da bazı sayfalarda http ile açılıyorsa oturum çerezi kaybolabilir. Settings > General altındaki WordPress Address ve Site Address değerlerinin aynı ve https:// 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ı

Hata 3: Ödeme alınmadı ama stok düştü, sipariş "Pending payment"ta kaldı: Stok yönetimi hem genel ayarda (Enable stock management) hem de üründe (Track..., Hold stock alanında bir...

Önce durumların ne anlama geldiğini netleştirelim. WooCommerce belgelerine göre:

DurumAnlamıStok
DraftBlok ödeme sayfasında, sipariş gönderilmeden önceki geçici kayıtStok tutma ayarı uygulanır
Pending paymentSipariş 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 bekleniyorStok düşmüştür
FailedÖdeme başarısız veya reddedildiDaha önce düşmüşse iade edilir
CancelledSipariş iptal edildiStok 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 Actions ekranında woocommerce_cancel_unpaid_orders görevi gecikmiş (past-due) görünüyor mu? Görünüyorsa WP-Cron tetiklenmiyordur. DISABLE_WP_CRON eklenip 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ı

Hata 6: Eklenti veya tema çakışması: 1. Yedek alın; mümkünse testi canlı site yerine bir hazırlık (staging)..., 2. Tüm eklentileri ve temayı güncelleyin., 3. Twenty Twenty-Five...

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ş sepetSepet/ö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ş verilemiyorStore API isteklerinde Nonce başlığı, önbellek, güvenlik eklentisi
Ödeme alındı, sipariş Pending paymentSipariş notları, ödeme eklentisi kaydı, bildirim URL'si
Stok iade edilmiyorHold stock süresi, stok yönetimi, Scheduled Actions
Kırık kilit simgesiTarayıcı konsolu, http:// kaynaklar
Sonsuz yönlendirmeForce SSL ile başka SSL eklentisi, proxy arkasında SSL
Sadece bazı müşterilerde sorunEklenti/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ü