Σελίδα 1 από 1

[Λύθηκε] Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 23 Αύγ 2018, 16:59
από agathon
Καλησπέρα στην Ομάδα του Opencart Hellas

Δουλεύουμε σε ένα project με Opencart version 2.1.0.2 κ Journal Theme. Έχουμε ρυθμίσει στα settings το email να δουλεύει με Mail Protocol SMPT και τα υπόλοιπα στοιχεία σύμφωνα και με το GSuite gmail account μας.(Δείτε επισυναπτόμενη εικόνα)

Ενώ δουλεύουν όλα άψογα παρατηρήθηκε το γεγονός ότι κάποια email δεν πήγαιναν στον πελάτη και στο κατάστημα μας όσο αναφορά τα confirmation order email.
Παρατηρήσαμε ότι τα συγκεκριμένα email είχαν ένα κενό ενώ είχε ολοκληρωθεί η παραγγελία πχ. name@hotmail. com ή ήταν της μορφής [email protected].
Σε αυτήν την περίπτωση παίρνουμε και το συγκεκριμένο error.
Κώδικας: Επιλογή όλων
2018-08-******* - PHP Notice:  Error: RCPT TO not accepted from server! in /home/********/public_html/************/opencart/system/library/mail.php on line 346
To τεστάραμε και σε fresh installation από το Opencart 2.1.0.2 για να αποκλείσουμε το γεγονός ότι ευθύνεται το Journal Theme και όντως εμφανίζει το ίδιο error και σε fresh installation.

Θα θέλαμε να ρωτήσουμε αν έχει παρατηρήσει κάποιος η είχε παρόμοιο σφάλμα σύμφωνα και με τα όσα αναφέρουμε πιο πάνω ή είναι κάποιο Bug του Opencart.
Ευχαριστούμε εκ των προτέρων.

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 26 Αύγ 2018, 8:02
από Alexandra
Καλημέρα,

Πρόκειται για bug, που επιτρέπει κενά στο πεδίο του email του checkout -ενώ κατά την εγγραφή υπάρχει ένα στοιχειώδες validation. Τα σφάλματα που λάβατε πιθανότατα προέκυψαν επειδή κάποιος πελάτης εισήγαγε κατά λάθος κενό στο mail του.

Επίσης μόλις είδα ότι δεν υπάρχει validation για κενά στα email ούτε στο journal που εφαρμόζει δικό του validation κατά το checkout.

Για το Journal quick checkout άνοιξε το αρχείο catalog/controller/journal2/checkout.php και τη γραμμή:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email'])) {
Κάνε τη:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email']) || preg_match('/\s/', $data['email'])) {

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 27 Αύγ 2018, 12:32
από agathon
Καλημέρα,
Ευχαριστώ πολύ για την απάντηση.

Πέρασα το fix
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email']) || preg_match('/\s/', $data['email'])) {
Στο Path από το quick checkout του Journal catalog/controller/journal2/checkout.php αλλά συνεχίζει να μου δίνει το ίδιο error.

Προσπάθησα να περάσω το email με ένα κενό πριν το TLD του email και μου περνάει την παραγγελία κανονικά, χωρίς να με κόβει με μήνυμα προειδοποίησης λάθος σύνταξης του email.
Σε διάφορα test για να δω πότε μου εμφανίζει το error.
1) κενο[email protected]
2) name@domainκενο.gr
3) [email protected]
4) name@domain,gr (με κόμμα αντί για τελεία)

Ήθελα να ρωτήσω μήπως το fix πρέπει να το περάσω στο
path /catalog/controller/checkout/guest.php

και πως μπορώ να βελτιώσω το validation και για τις παραπάνω συνθήκες λάθος σύνταξης του email.

Ευχαριστώ εκ των προτέρων.


**(Edited)** Σε fresh installation από Opencart 2.1.0.2 το fix φαίνεται να δουλεύει όταν βάζω κενό στο email
πειράζοντας το αρχείο /catalog/controller/checkout/guest.php
Αλλά με Journal
είτε στο catalog/controller/journal2/checkout.php
είτε στο /catalog/controller/checkout/guest.php
περνώντας το validation για το κενό φαίνεται πώς δεν λειτουργεί.

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 27 Αύγ 2018, 15:08
από Alexandra
Καλησπέρα,

Έχεις ενεργοποιημένο το quick checkout;
Το fix είναι για αγορά ως guest ή αγορά με εγγραφή στο quick checkout του journal και εντοπίζει κενά όπως
myemail@gmail .com

Τα αρχεία /catalog/controller/checkout/guest.php και /catalog/controller/checkout/register.php
είναι για το κανονικό checkout του OpenCart.
Αν χρησιμοποιείς το κανονικό τότε στα guest.php και register.php το κάνεις από:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $this->request->post['email'])) {
στο ακόλουθο:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $this->request->post['email']) || preg_match('/\s/', $this->request->post['email'])) {
Επίσης ανεξαρτήτως αν έχεις journal ή όχι, για να προσθέσεις validation και στην επεξεργασία στοιχείων στον λογαριασμό εγγεγραμμένων πελατών το παραπάνω το περνάς και στο catalog/controller/account/edit.php

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 27 Αύγ 2018, 16:20
από agathon
Καλησπέρα,
Μπορώ να επιβεβαιώσω ότι για το κανονικό checkout του OpenCart δουλεύει.

Στην Σελίδα μας είναι ενεργοποιημένο το Quick Checkout του Journal από το αντίστοιχο control panel του Journal Theme. Εκεί παρόλο που πέρασα το fix από το πρώτο Post
Κώδικας: Επιλογή όλων
 if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email']) || preg_match('/\s/', $data['email'])) { 
στο path catalog/controller/journal2/checkout.php δεν κάνει τον έλεγχο και μπορώ να ολοκληρώσω την παραγγελία κανονικά.

Έκανα clear cache από το Control Panel του Journal αλλά πάλι δεν κάνει τον έλεγχο για το space στο email.

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 28 Αύγ 2018, 0:45
από Alexandra
Το validation στο journal quick checkout είναι για επισκέπτες ή νέες εγγραφές. Δεν είναι για εγγεγραμμένους που το validation τους πρέπει να γίνεται από τα controller/account/register.php και controller/account/edit.php

Αν τα έκανες όλα όπως ανέφερα, και πάλι έχεις πρόβλημα δοκίμασε να διαγράψεις και να ανανεώσεις το cache των τροποποιήσεων OCMOD και να διαγράψεις το περιεχόμενο του vqmod/vqcache, τα vqmod/checked.cache και vqmod/mods.cache.


Αν όλα πάνε καλά με το checkout και είσαι τελειομανής, μπορείς να βελτιώσεις όλα τα email validation του opencart στις ακόλουθες σελίδες:

Opencart Native Αρχεία
controller/api/voucher.php
controller/account/register.php
controller/checkout/guest.php
controller/checkout/register.php
controller/affiliate/edit.php
controller/affiliate/register.php
controller/information/contact.php
controller/account/voucher.php
controller/account/return.php
controller/account/edit.php
controller/account/register.php

Journal
controller/journal2/checkout.php
controller/module/journal2_popup.php

Τέλος αντί της μεθόδου validation που έχει το opencart, μπορείς να χρησιμοποιήσεις και την ακόλουθη που χρησιμοποιεί το validation της PHP όπου αντικαθιστάς το "η-μεταβλητή-του-email" με την εκάστοτε μεταβλητή που χρησιμοποιείται για το email στην κάθε σελίδα:
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !filter_var(η-μεταβλητή-του-email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE)) {
* Υπόψη, Όλες οι μέθοδοι validation που συζητήσαμε δεν υποστηρίζουν domains με Ελληνικούς χαρακτήρες.

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 28 Αύγ 2018, 9:44
από agathon
Καλημέρα,
Ευχαριστώ πολύ για τον Χρόνο σου και τις απαντήσεις.
Αν τα έκανες όλα όπως ανέφερα, και πάλι έχεις πρόβλημα δοκίμασε να διαγράψεις και να ανανεώσεις το cache των τροποποιήσεων OCMOD και να διαγράψεις το περιεχόμενο του vqmod/vqcache, τα vqmod/checked.cache και vqmod/mods.cache.
Κάνοντας διαγραφή της cache όπως μου ανέφερες δουλεύει σωστά ο έλεγχος όταν έχει κενό το email.

Τέλος το συγκεκριμένο κομμάτι κώδικα
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !filter_var(η-μεταβλητή-του-email, FILTER_VALIDATE_EMAIL, FILTER_FLAG_EMAIL_UNICODE)) {
Προσαρμόζοντας το στο controller/journal2/checkout.php
και αλλάζοντας το
Κώδικας: Επιλογή όλων
if ((utf8_strlen($data['email']) > 96) || !preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $data['email'])) {
με
Κώδικας: Επιλογή όλων
if (!filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
αυτό φαίνεται ότι διορθώνει το πρόβλημα.

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 28 Αύγ 2018, 9:56
από Alexandra
Δεν πρέπει να παραλείπεις και τον έλεγχο (utf8_strlen($data['email']) > 96) γιατί ελέγχει ότι το email δεν ξεπερνά τους 96 χαρακτήρες που αν κάποιος για κάποιο τρελό δικό του λόγο θέλει να έχει μεγαλύτερο email από 96 χαρακτήρες αυτό θα περάσει στη βάση κροπαρισμένο και δεν θα υπάρχει πουθενά προειδοποίηση ότι συνέβη. Υπόψη ότι το πρωτόκολλο του mail υποστηρίζει emails έως 256 χαρακτήρες αλλά η βάση του OpenCart υποστηρίζει 96.

Re: Opencart - Journal Theme checkout email validation

Δημοσιεύτηκε: 28 Αύγ 2018, 10:12
από agathon
Όντως ναι , το τροποποίησα οπότε η τελική λύση είναι

στο path controller/journal2/checkout.php
Κώδικας: Επιλογή όλων
 if ((utf8_strlen($data['email']) > 96) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {