No nie powiem. Instalacja tej funkcjonalności na tej wersji nastręczyła nam problemów… W każdym razie działa i chętnie się z Tobą podzielimy naszymi wskazówkami 🙂

Domyślnie SSL działa w PrestaShop w momencie logowania klienta, logowania administratora i w koszyku (na piątym kroku zakupu). Zatem się nie obawiaj, że Twój sklep nie będzie miał na stronie startowej – https://  chociaż tak też powinien on działać.

Oczywiście poniższego wpisu na naszym blogu nie można tego traktować jak tutoriala że na bank zadziała – ale może Tobie podsunąć rozwiązanie problemu z Twoją PrestąShop:)

Z informacji znalezionych w Internecie wynika że duże znaczenie ma także specyfika serwera oferowana przez Twojego providera. Więc życzymy powodzenia.

Zatem po kolei.

KWESTIA 1:  Zakup certyfikatu.

My skorzystaliśmy z RapidSSL. Sam certyfikat nam nie wystarczył. Z racji, że serwer to wirtualka – trzeba było jeszcze przydzielić unikalny adres IP.

KWESTIA 2:  Zmiany w kodzie PHP

Niestety ta wersja PrestaShop jest obarczona drobnym błędem. Przynajmniej jeśli chodzi o naszego providera serwerowego. Otóż musimy zmienić wszystkie wystąpienia:

$_SERVER['HTTPS']

na:

$_SERVER['SSL']

Przede wszystkim chodzi o pliki:

classes/Tools.php
NAZWA_TWOJEGO_FOLDERU_ADMIN/login.php

W katalogu /modules także znajduje się parę tych wystąpień (w kontorlerach modułów) – my dla asekuracji je zmieniliśmy. Nie wiem czy ma to wpływ na dzialanie SSL na globalnym sklepie.

KWESTIA 3:  Włączenie SSL w panelu PrestaShop

PrestaShop Kraków
Zmianę tę poprzedzamy przyciskiem ZAPISZ na dole strony. W niektórych wersjach PrestaShop może być tam link zamiast radio-butonów. Należy go klinąć i poprzedzić to wspomnianym ZAPISZ.

KWESTIA 4:  Przebudowa .htaccess

Wchodzimy na stronę w panelu PrestaShop: Ustawienia -> SEO i w dolnej części wykonujemy czynności pokazane na obrazku:

PrestaShop Kraków

Na nastepnej stronie dobrze abyśmy zaznaczyli tę opcję:  Wyłącz apache MultiViews

PrestaShop KrakówMoże ona powodować pojawienie się w Przeglądarce Google Chrome przyjemnego komunikatu: „Ta strona internetowa zawiera pętlę przekierowań”. Najlepiej się upewnić że to zostało zrobione tj usunięte. Radzimy otworzyć ręcznie plik .htaccess na serwerze (zdajdujący się w katalogu główym) i sprawdzić czy jest ten wpis:

# Disable Multiviews
Options -Multiviews

Jak jest – usuń go.

KWESTIA 5:  Upewnij się że usługa SSL jest włączona przez sklep

Najlepiej iść do źrodła;) Zatem zaloguj się do phpMyAdmina i sprawdź czy w tabeli:

ps_configuration

Opcja konfiguracyjna o nazwie:

PS_SSL_ENABLED

ma wartość: 1

KWESTIA 6:  Możesz mieć problem z logowaniem się do sklepu…

prawdopodobnie zobaczysz miły komunikat:

PrestaShop KrakówI sytuacja jest dosyć kuriozalna bo mimo ze masz komunikat o potrzebie wejscia po https to jak to robisz – widzisz dalej to przekierowanie..

Najlepiej zakomentować lub usunąć odpowiednie partie kodu – aby nie „zjadać własnego ogona”.

Edytujemy wspomniany wyżej plik:

NAZWA_TWOJEGO_FOLDERU_ADMIN/login.php

i na około linii 39 mamy instrukcję warunkową. Uwuwamy ją, bądź całą komentujemy:

if ((empty($_SERVER['SSL']) OR strtolower($_SERVER['SSL']) == 'off')
AND _PS_SSL_ENABLED_) {

(...)

}

Następnie w okolicach linii 159 mamy kolejną instrukcję warunkową:

if ((empty($_SERVER['SSL']) || strtolower($_SERVER['SSL']) == 'off') && (_PS_SSL_ENABLED_ && !$clientIsMaintenanceOrLocal))
echo '<div class="error">'.$warningSslMessage.'</div>';
else
echo '<label for="email">'.translate('E-mail address:').'</label><br />  ......

komentujemy ją na postać:


/*
if ((empty($_SERVER['SSL']) || strtolower($_SERVER['SSL']) == 'off') && (_PS_SSL_ENABLED_ && !$clientIsMaintenanceOrLocal))
echo '<div class="error">'.$warningSslMessage.'</div>';
else

*/
echo '<label for="email">'.translate('E-mail address:').'</label><br />  ......

KWESTIA 7: Rozbudowanie metody usingSecureMode(). To rozwiązanie pochodzi stąd.

Nie wiem czy jest to warunek konieczny ale znaleźliśmy to w Sieci i możesz dodać asekuracyjnie:)

W pliku:

classes/Tools.php

Znajdz statyczną metodę:

public static function usingSecureMode()

I na jej początku dodaj:

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) {
$_SERVER['SSL']='on';
} else {
$_SERVER['SSL']='off';
}

Chyba to wszystko:) Udało się nam to zrobić tymi sposobami. Zatem.. powodzenia.

Demo jest zaprezentowane na sklepie wykonanym przez firmę SmartProjects.pl – NamiotyMagazynowe:

DEMO

Share This:

Zostaw komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *