OpenCart-Hellas 

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

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

Είχαμε ένα περίεργο περιστατικό στην σελίδα μας (opencart 3.0.3.2) το οποίο δυστυχώς δεν έχω καταφέρει να αναπαράγω και το παραθέτω εδώ μήπως έχει κανείς καμιά ιδέα.

1. Εγγεγραμμένος πελάτης κάνει στις 2/12 παραγγελία η οποία παίρνει ως order_id = 52865.
2. Η παραγγελία κάνει τον κύκλο της και ολοκληρώνεται 2-3 ημέρες μετά αφού αποσταλούν τα προϊόντα
3. Ο ίδιος πελάτης στις 14/12 κάνει άλλη παραγγελία (άλλα προϊόντα, άλλο ποσό) αλλά μυστηριωδώς αυτή "κάθεται" πάνω στο ίδιο order_id 52865 αντί να πάρει καινούριο.

Έτσι έχουμε τα παρακάτω συμπτώματα:
- Στον πίνακα order στο order_id 52865 υπάρχει μια μεικτή κατάσταση πχ έχει κρατήσει τον παλιό τρόπο πληρωμής αλλά έχει επιλογή τιμολογίου αντί απόδειξης που είχε η πρώτη παραγγελία (extension People's code). Επιπλέον έχει ενημερωθεί το συνολικό ποσό με το ποσό της 2ης παραγγελίας και το date_added είναι 14/12 πλέον
- Στον πίνακα order_product στο order_id 52865 έχει μόνο τα προϊόντα της 2ης παραγγελίας
- Ομοίως και στο order_total τα σύνολα της πρώτης παραγγελίας έχουν αντικατασταθεί από αυτά της 2ης
- Στον order_history στο order_id 52865 έχει παραμείνει η ιστορικότητα της 1ης παραγγελίας με τελευταία εγγραφή στις 4/12 με κανένα ίχνος αναφοράς σε μεταγενέστερη ενέργεια.
- Ο πελάτης δεν έλαβε ενημέρωση για την 2η παραγγελία οπότε όλος ο παραπάνω χαμός διαπιστώθηκε μετά από τηλέφωνο...

Υπάρχει το πρώτο mail που είχε σταλεί στον πελάτη στις 2/12 με τα αρχικά στοιχεία της παραγγελίας 52865 οπότε δεν είναι θέμα κακής συνεννόησης.

Δεν μπορώ να καταλάβω πως μπορεί να έχει συμβεί... Δεν είχαμε στο παρελθόν κανένα παρόμοιο περιστατικό...

Any Ideas??? :? :? :?

Γιώργος
#6925
Καλησπέρα

Μπορώ σίγουρα να σου πω ότι δεν έχει σχέση η επέκταση απόδειξης τιμολογίου με αυτό που περιγράφεις γιατί δεν κρατάει δεδομένα της παραγγελίας (πχ προϊόντα κλπ) πέρα από τις επιλογές πεδίων απόδειξης τιμολογίου.

- Ο πελάτης ήταν εγγεγραμμένος ή επισκέπτης;
- Η παραγγελία έγινε από κινητό;
- Τι μέθοδος πληρωμής χρησιμοποιήθηκε;
- Υπάρχει σύνδεση με ERP;
- Υπάρχει κάποιο custom εργαλείο επεξεργασίας παραγγελιών στη διαχείρηση;
- Έχεις κάνει τροποποιήσεις στο Session cookie;
#6926
Καλησπέρα Αλεξάνδρα & Καλή Χρονιά,

- Ο Πελάτης είναι εγγεγραμμένος

- Δεν γνωρίζω αν η παραγγελία έγινε από κινητό

- Η 1η παραγγελία έγινε με Paypal Standard & η 2η με αντικαταβολή όπως μας ενημέρωσε. Στον πίνακα order έμεινε το paypal standrard ως μέθοδος

- Υπάρχει σύνδεση με το Entersoft και εκεί απευθύνθηκα πρώτα αλλά μετά από διερεύνηση δεν βρέθηκε κώδικας που να ενημερώνει τους πίνακες παραγγελιών. Μόνο τους διαβάζει...

- Custom εργαλείο επεξεργασίας έχουμε ένα extension (πάνω από 1 χρόνο) το οποίο ουσιαστικά χρησιμοποιείται για πιο γρήγορο editing μιας παραγγελίας. Πρακτικά μια πιο εξελιγμένη One-page μορφή της αντίστοιχης λειτουργίας του opencart. Αυτό σε οποιαδήποτε αλλαγή αφήνει ίχνος στον order_history αλλά σε αυτή την περίπτωση δεν ενημερώθηκε καθόλου ο πίνακας. Επιπλέον έχουμε 1-2 cron jobs που μπορεί να αλλάξουν το status μιας παραγγελίας υπο συνθήκες (πχ να ακυρώσουν παραγγελίες με Τρ. Κατάθεση που δεν έχουν προχωρήσει για καιρό) αλλά και αυτά πάντα αφήνουν ίχνος στον order_history

- Δεν ξέρω τι σημαίνει αυτό... :D Πάντως έχω παρατηρήσει ότι ο πίνακας session γεμίζει συνεχώς χωρίς να σβήνει τα παλιά sessions οπότε META το συμβάν έβαλα ένα cron job που να σβήνει από τον πίνακα session τα records που έχουν expire μικρότερο της προηγούμενης ημερολογιακής.

αυτά... :D

Πάει πουθενά ο νους σου;;;
#6928
Καλησπέρα,

- Ανέφερες ότι ο πελάτης δεν έλαβε email για την δεύτερη παραγγελία, εσείς λάβατε email;
- Ο πελάτης έφτασε στην success page για την δεύτερη παραγγελία χωρίς κάποιο error;
- Έχετε κάποιο analytics στην success;
#6936
Καλησπέρα,

- Ο πελάτης είπε ότι δεν έλαβε mail και αυτό επιβεβαιώνετε από τα logs. Επίσης δεν βρήκα κάτι στα logs για email προς τα εμάς και μου το επιβεβαίωσαν και από το κατάστημα ότι δεν είδαν κάτι....

- Δυστυχώς δεν μπόρεσα να μάθω περισσότερα από αυτούς που μίλησαν με τον πελάτη

- Δεν βρήκα την εν λόγω παραγγελία στο διαχειριστικό του skroutz analytics. Στο google analytics με τον τρόπο που το έχει σετάρει το κατάστημα δεν μπορώ να βρω στοιχεία :(

Καταλαβαίνω ότι δεν έχουμε πολλά στοιχεία για διερεύνηση (άλλωστε το πήραν χαμπάρι κατόπιν τηλεφωνήματος από τον πελάτη τουλάχιστον 10 μέρες μετά).

Στα θετικά, προσπαθώντας να βρω κάποιο άλλο τέτοιο case στην βάση εστιάζοντας σε orders με order.date_added > max(order_hostory.date_added ΔΕΝ βρήκα άλλη περίπτωση. Έχω βάλει κι ένα cron job ώστε αν παρουσιαστεί τέτοια να το μάθω άμεσα.
#6938
Καλησπέρα,

Από τις περιγραφές που μου έδωσες πιθανολογώ ότι συνέβησαν διάφορα προβλήματα συνδυαστικά.

Εικασία 1. Αν δεν έχετε εφαρμόσει το SameSite none policy στο cookie και ο πελάτης χρησιμοποίησε στην πρώτη αγορά Chrome ή κινητό με browser που εφαρμόζει ίδια πολιτική με Chrome για το cookie, τότε και στην πρώτη αγορά μάλλον δεν έφτασε ο πελάτης στην success γιατί χάθηκε το session cookie (διάβασε σχετικά με το πρόβλημα με τον Chrome και το session cookie) αλλά του ήρθε το email από την προσθήκη ιστορικού κατά το redirection πίσω στο eshop από το Paypal. Σε αυτήν την πιθανότητα το session παρέμεινε στη βάση με το order_id της παραγγελίας. Αν ο πελάτης δεν έκλεισε το browser στο κινητό το session παρέμεινε εκεί.

Εικασία 2. Στην 3.0.x υπάρχει bug με το garbage collection και δεν λειτουργεί καθόλου η διαγραφή των παλαιών sessions από τη βάση.

Εικασία 3. Αν ο πελάτης αγόρασε με κινητό και δεν έκλεισε τον browser και σε μεταγενέστερο χρόνο έκανε άλλη μία αγορά από κινητό με το ίδιο session αφού στο κινητό παρέμεινε ανοικτός ο browser έκανε νέα παραγγελία και έκατσε πάνω στην παλιά.

Τώρα σχετικά με τη διαγραφή των sessions μπορείς αν θες να το κάνεις και αυτόματα χωρίς cron αν κάνεις τα ακόλουθα για να ενεργοποιηθεί το garbage collection (θα προσθέσω την διαδικασία και στην κατηγορία Bugs):

Στο system/library/session.php
κάτω από το:
Κώδικας: Επιλογή όλων
register_shutdown_function(array($this, 'close'));
προσθέτεις:
Κώδικας: Επιλογή όλων
register_shutdown_function(array($this, 'gc'));
Πριν το κλείσιμο της class (το τελευταίο }) προσθέτεις:
Κώδικας: Επιλογή όλων
	
public function gc() {
  $this->adaptor->gc();
}
Στο system/library/session/db.php
το:
Κώδικας: Επιλογή όλων
	public function gc($expire) {
		$this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE expire < " . ((int)time() + $expire));
		
		return true;
	}
το κάνεις έτσι (θα τρέχει μόνο κάποιες φορές που προκύπτει βάσει τυχαιότητας ο αριθμός 1 για να μην επιβαρύνεται ο sql server με συνεχή queries σε καταστήματα που έχουν πολλές επισκέψεις):
Κώδικας: Επιλογή όλων
	public function gc() {
		if (round(rand(1, 5)) == 1) {
			$this->db->query("DELETE FROM `" . DB_PREFIX . "session` WHERE `expire` < '" . $this->db->escape(date('Y-m-d H:i:s', time()-$this->expire)) . "'");
		}

		return true;
	}
#6940
Καλησπέρα Αλεξάνδρα,

Σε ευχαριστώ πολύ για τις απαντήσεις σου. Με βοήθησαν πολύ. Θα προσθέσω τον κώδικα για το session και θα το παρακολουθήσω. Ας ελπίσω να ήταν μεμονωμένο περιστατικό. Έχω βάλει 1-2 jobάκια να το παρακολουθώ ώστε να συμβεί κάτι παρόμοιο να το εντοπίσω εγκαίρως και να έχω και παραπάνω στοιχεία για διερεύνηση.

Σε ευχαριστώ και πάλι,
Καλή Συνέχεια
Γιώργος
#6944
Καλησπέρα,

Να 'σαι καλά, χαρά μου να έχω κι εγώ τέτοιες λεπτομερείς αναφορές για να εντοπίζονται τα όποια θέματα και να λύνονται εγκαίρως σε κάθε έκδοση.

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

email μέσω SMTP

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

Καλησπέρα, πως μπορώ να προσθέσω το usergroup στο […]

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