OpenCart-Hellas 

Η Ελληνική κοινότητα υποστήριξης του Opencart

Θέματα που αφορούν τη γενικότερη λειτουργία του Opencart.
#6753
Γεια σας,

Έχω προσθέσει κώδικα στον controller του Success Page για να τραβάω τα στοιχεία της παραγγελίας και να τα χρησιμοποιώ για να στέλνω δεδομένα σε Google, Skroutz, Facebook κτλ.

Για παραγγελίες με τρόπο πληρωμής αντικαταβολή και τραπεζική κατάθεση, όπου δεν γίνεται redirect, όλα λειτουργούν σωστά χωρίς κανένα πρόβλημα.

Για κάποιο λόγο όμως δεν μπορεί να τραβήξει τα στοιχεία της παραγγελίας όταν γίνεται η μεταφορά πίσω στο site από έναν 3ο πάροχο, όπως το PayPal, κάτι το οποίο πιθανότατα να σχετίζεται με τα cookies και το Session. Επίσης σε συνδεδεμένους χρήστες γίνεται log out και τα προϊόντα παραμένουν στο καλάθι όταν συνδεθεί και πάλι στο site, αλλά η παραγγελία καταχωρείται κανονικά.

Να επισημάνω πως αυτό συμβαίνει μόνο σε Google Chrome.

Η έκδοση του Opencart είναι 2.1.0.2

Ξέρει κάποιος πως μπορώ να το διορθώσω;

Ευχαριστώ πολύ
#6767
Καλημέρα,

Το πρόβλημα οφείλεται στις νέες προδιαγραφές που εφαρμόζονται στους browsers. Σε mozilla δίνει warning και σε Crome μπλοκάρονται. Για περισσότερα διάβασε εδώ.

Δοκίμασε τα ακόλουθα:

Στο index.php το:
Κώδικας: Επιλογή όλων
setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $request->server['HTTP_HOST']);
κάνε το:
Κώδικας: Επιλογή όλων
// START Session FIX
setcookie('language', $code, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));
// END Session FIX

Στο system/library/currency.php το:
Κώδικας: Επιλογή όλων
setcookie('currency', $currency, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);
κάνε το:
Κώδικας: Επιλογή όλων
// START Session FIX
setcookie('currency', $currency, array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));
// END Session FIX
Στο system/library/session.php κάτω από το:
Κώδικας: Επιλογή όλων
ini_set('session.cookie_httponly', 'On');
πρόσθεσε:
Κώδικας: Επιλογή όλων
// START Session FIX
ini_set('session.cookie_secure', true);
ini_set('session.cookie_samesite', 'None');
// END Session FIX
Μετά τις αλλαγές κάνε ανανέωση το cache των τροποποίησεων. Τα παραπάνω function formats υποστηρίζονται από PHP >= 7.3.x
#6855
Όχι, μόλις βρω χρόνο, θα φτιάξω ocmod για όλες τις εκδόσεις 2.x και 3.x και θα τις ανεβάσω στο marketplace
#6920
Καλησπέρα, καλή χρονιά,

Δεν μπορείς να το γυρίσεις σε 7.3;
#6921
Δεν θα ήθελα να μπλέξω με κάτι τέτοιο και να δημιουργήσω περαιτέρω προβλήματα στην εγκατάσταση μου. Αν δεν υπάρχει κάποια έτοιμη λύση, γνωρίζετε τα βήματα που πρέπει να ακολουθήσω για να το φτιάξω;
#6922
Καλησπέρα,

Στις περισσότερες περιπτώσεις αλλαγής PHP από 7.0.x ή 7.1.x σε 7.3.x δεν παρουσιάζονται σοβαρά θέματα. Συνήθως διορθώνω κάποια continue/break σφάλματα σε loops και επίσης χρειάζεται να γίνει αλλαγή από mcrypt σε openssl συνάρτηση στο encryption.php library σε εκδόσεις μικρότερες από 3.x.

Ο λόγος που χρειάζεται η PHP 7.3 είναι γιατί η συνάρτηση setcookie ( string $name , string $value = "" , array $options = [] ) που μπορεί να λάβει τη μεταβλητή 'samesite' => 'None' μέσα σε array, είναι διαθέσιμη από PHP7.3 και άνω. Γι' αυτόν τον λόγο εγώ χρησιμοποιώ αυτήν την μέθοδο και παράλληλα εκσυγχρονίζω τα παλιά eshops από πρακτικές κώδικα που δεν είναι συμβατές με τις νέες εκδόσεις PHP.

Κάποιοι προτείνουν το ακόλουθο φορμά που δεν χρησιμοποιεί array και περνά την παράμετρο SameSite με concatenation στο path. Υποτίθεται ότι είναι συμβατό με παλιές εκδόσεις PHP, ωστόσο σε δοκιμές που έκανα δεν λειτούργησε και το cookie παρέμενε όπως πριν.
Κώδικας: Επιλογή όλων
setcookie($key, $this->session_id, ini_get('session.cookie_lifetime'), ini_get('session.cookie_path').'; SameSite=None', ini_get('session.cookie_domain'), true, ini_get('session.cookie_httponly'));

Εναλλακτικά μπορεί να περάσεις και στο header το SameSite=None αλλά πάλι πρέπει να βρεθεί τρόπος να περάσει και στις παραμέτρους του session cookie στον browser που θέλει λίγο ψάξιμο. Γι' αυτόν τον λόγο χρησιμοποιώ την μέθοδο που ανέφερα αρχικά.
#7047
Καλημέρα,

σε έκδοση opencart 3 με php 7.3 έκανα τις αλλαγές που γράφουν εδώ:
https://forum.opencart.com/viewtopic.ph ... 33#p797082

Με paypal περνάνε οι παραγγελίες στο skroutz αλλά με κάρτα όχι.
Υπάρχει περίπτωση να φταίει οτι το payment extension της κάρτας δεν οδηγεί στην κλασσική σελίδα thank you του opencart άλλά σε κάποια δική του;

Πολύ καλά κάνεις και το λες, εννοείτε ότι χρειάζετ[…]

email μέσω SMTP

Καλημέρα, Το έχω δοκιμάσει και με ssl:////mail.m[…]

Πριν ζητήσετε βοήθεια στο φόρουμ, παρακαλούμε ελέγξτε αν υπάρχει έτοιμη λύση στο OpenCart Extension Marketplace!