X
X

Lütfen Para Birimi Seçiniz

Türk Lirası $ US Dollar Euro
X
X

Lütfen Para Birimi Seçiniz

Türk Lirası $ US Dollar Euro

Opencart SameSite Hatası ve Çözümü (Iyzico Ödeme Sorunu)

AnasayfaYazılarOpencart RehberleriOpencart SameSite Hatası ve Çözümü ...

Google Chrome’un yeni güncellemeleri ile SameSite hatası, Opencart e-ticaret siteleri için büyük bir sorun haline gelmiştir. Özellikle sanal POS entegrasyonları sonrasında ve alışveriş tamamlanırken, banka 3D güvenlik sayfasında oturumunuzu sonlandırmakta ve ödemeniz alınsa bile siparişiniz oluşmamaktadır. Siparişler Opencart yönetim panelinde "Eksik Siparişler" bölümüne düşmektedir.

Bu hata nedeniyle birçok e-ticaret sitesi sahibi ve müşterileri ciddi sorunlar yaşamaktadır. Kullanıcılar ödemenin yapılmadığını sanarak aynı işlemi birkaç kez tekrarlayabilmektedir.

Bu hata özellikle Türkiye’deki sanal POS sağlayıcılarından Iyzico’da sıkça görülmektedir.

Bu yazımızda, Opencart ile sanal POS entegrasyonu sırasında ortaya çıkan SameSite hatasını nasıl çözeceğinizi anlatacağız.


SameSite Hatası Nedir?

SameSite hatası, Google Chrome’un güvenlik politikalarını sıkılaştırması sonucunda ortaya çıkmaktadır. Yeni güncellemelerle birlikte, tarayıcılar belirli çerezleri (cookies) varsayılan olarak engellemekte veya farklı şekilde işlemektedir.

Bu da, sanal POS veya 3D güvenlik sayfasından dönüş yapıldığında oturumun kaybolmasına ve siparişlerin eksik görünmesine sebep olmaktadır.


SameSite Hatasının Çözümü

1. PHP Sürümünüzü Kontrol Edin

Öncelikle PHP sürümünüzün 7.3 ve üzeri olduğundan emin olun.

Eğer eski bir PHP sürümü kullanıyorsanız, sunucunuzda güncelleme yapmanız gerekmektedir. Opencart’ın farklı versiyonları için testler yaptık ve Opencart 2.3 sürümünde hatanın giderildiğini doğruladık.


2. Gerekli Dosya Düzenlemeleri

Aşağıda belirtilen Opencart dosyalarında bazı kodları değiştirerek SameSite hatasını çözebilirsiniz.

1. catalog/controller/startup/startup.php dosyasında değişiklik yapın.

Dosyayı açın ve aşağıdaki kodları bulun:

setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

Bu kodu aşağıdaki şekilde değiştirin:

setcookie('language', $code, [ 'expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => $this->request->server['HTTP_HOST'], 'samesite' => 'None', 'secure' => true ]);

Aynı şekilde, aşağıdaki satırı bulun:

setcookie('currency', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);

Ve şu şekilde değiştirin:

setcookie('currency', $code, [ 'expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => $this->request->server['HTTP_HOST'], 'samesite' => 'None', 'secure' => true ]);

2. system/library/session.php dosyasında değişiklik yapın.

Bu dosyada aşağıdaki satırı bulun:

setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'), ini_get('session.cookie_secure'), ini_get('session.cookie_httponly'));

Ve şu şekilde değiştirin:

setcookie($key, $this->session_id, [ 'expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => ini_get('session.cookie_httponly') ]);

Ayrıca, aşağıdaki satırı bulun:

setcookie($key, '', time() - 42000, ini_get('session.cookie_path'), ini_get('session.cookie_domain'));

Ve şu şekilde değiştirin:

setcookie($key, '', [ 'expires' => time() - 42000, 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true ]);

3. PHP Ayarlarını Güncelleyin

Yukarıdaki değişiklikleri yaptıktan sonra, php.ini dosyanıza aşağıdaki satırları ekleyin:

session.cookie_secure=On session.cookie_samesite="None"

Ayrıca, system/library/session.php dosyanızda aşağıdaki kodları eklediğinizden emin olun:

ini_set('session.cookie_secure', 'On'); ini_set('session.cookie_samesite', 'None'); ini_set('session.cookie_httponly', 'On');

Bu kodlar, tarayıcının güvenli çerez politikasına uygun olarak çerezlerin işlenmesini sağlayacaktır.


4. Test İşlemi Yapın

Gerekli tüm değişiklikleri yaptıktan sonra, Opencart mağazanızda test işlemi gerçekleştirmeniz gerekmektedir.

  1. 1 TL değerinde test ürünü ekleyin.

  2. Sanal POS (Iyzico gibi) ile 3D Secure ödeme yaparak işlemi test edin.

  3. Siparişiniz eksiksiz olarak admin panelinize düşüyorsa, işlemler başarılı bir şekilde tamamlanmıştır.

Eğer hala hata alıyorsanız, tarayıcı önbelleğinizi temizleyin ve tekrar test edin.


Sonuç

Yukarıda anlatılan adımları takip ederek Opencart sanal POS entegrasyonlarındaki SameSite hatasını çözebilirsiniz.

Bu güncellemeler sayesinde:
Ödeme işlemleri tamamlandığında siparişler eksik siparişler bölümüne düşmeyecek
Ödeme sürecinde müşterinin oturumu sonlanmayacak
Müşteriler, ödemeyi gereksiz yere tekrar yapmaya çalışmayacak

Eğer bu adımları takip ederken bir sorunla karşılaşırsanız, yorum kısmında paylaşarak destek alabilirsiniz.


Saygılarımızla,
Tema Web Tasarım & Bilişim Hizmetleri




Top