Hemen Başla
Blog 08/06/2021

Opencart Ödeme Sonrası Boş Sepet, Eksik Sipariş (SameSite) Hatası

Google Chrome tarayıcılarında 17 Şubat 2020 tarihinde ilk adımı belirli kullanıcılar için atılan sameSite=None ve secure güncellemesi 9 Mart 2020 tarihinde neredeyse tüm kullanıcılar için geçerli oldu. Bu güncelleme ile tanımlanan cookieler varsayılan olarak sameSite=Lax(first-party cookie) kabul edilmeye başlandı. Yapılan bu güncelleme ile oluşturulan cookieler sadece cookie için tanımlanan alan adı üzerinden erişilebilecek hale geldi ve böylece farklı bir alan adı ile bu cookielere erişim kısıtlanmış oldu.

Bu güncellemenin bize etkisi nedir?

Mevcut modüllerimizde geri dönüş sayfasındaki işlemler cookie erişimi ile kontrol edilmekte ve tamamlanmaktadır. Eğer işleme ait cookie sameSite = None ve secure olarak tanımlanmamış ise Google Chrome geri dönüş sırasında cookie erişimine izin vermemektedir. Bu sebepten dolayı ödemesi yapılan işleme güncelleme yapılması için erişim sağlanamamaktadır.

Çözümü nedir?

Opencart 2.3 sürümlerinde yapmanız gereken;

Buraya tıklayarak indirdiğiniz dosyayı ana dizine çıkarın

veya

catalog/controller/startup/startup.php dosyasını düzenleyerek,

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

kodunu

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

ile değiştirin.

Aynı dosya içerisindeki,

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

kodunu

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

ile değiştirin.

Ana dizine tekrar gelerek system/library/session.php dosyasını açın,

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'));

kodunu

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')]);

ile değiştirin.

Aynı dosya içerisindeki,

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

kodunu

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

ile değiştirin.

Aynı dosya içerisindeki,

ini_set('session.use_cookies', 'On');

kodunun alt kısmına

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

kodunu ekleyin.

Sorununuz Opencart 2.3 sürümleri için bu güncelleme ile düzelmiş olacaktır. Eğer sorununuz halen devam ediyorsa Yönetim Paneli > Bize Ulaşın bölümünden Shopinext Teknik Birimine bilgi verebilirsiniz, arkadaşlarımız sizin için güncellemeyi sağlayacaktır.


Opencart 3.0 sürümlerinde yapmanız gereken;

Buraya tıklayarak indirdiğiniz dosyayı ana dizine çıkarın

veya

catalog/controller/startup/session.php dosyasını düzenleyerek,

setcookie($this->config->get('session_name'), $this->session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));

kodunu

setcookie($this->config->get('session_name'), $this->session->getId(), ['expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true]);

ile değiştirin.

Ana dizine tekrar gelerek system/framework.php dosyasını açın,

setcookie($config->get('session_name'), $session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));

kodunu

setcookie($config->get('session_name'), $session->getId(), ['expires' => ini_get('session.cookie_lifetime'), 'path' => ini_get('session.cookie_path'), 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true]);

ile değiştirin.

Sorununuz Opencart 3.0 sürümleri için bu güncelleme ile düzelmiş olacaktır. Eğer sorununuz halen devam ediyorsa Yönetim Paneli > Bize Ulaşın bölümünden Shopinext Teknik Birimine bilgi verebilirsiniz, arkadaşlarımız sizin için güncellemeyi sağlayacaktır.