Το one page checkout του Magento κολλάει στο billing ή στην πληρωμή: πώς βρίσκετε την αιτία
Στο προεπιλεγμένο checkout του Magento 2 το βήμα αποστολής μπορεί να δουλεύει τέλεια ενώ το βήμα πληρωμής όχι: η διεύθυνση χρέωσης δεν αποθηκεύεται, το Place Order δεν κάνει τίποτα, ή ένα spinner δεν σταματά. Η αιτία είναι σχεδόν πάντα ένα αίτημα που αποτυγχάνει ή ένα σφάλμα JavaScript, και ο browser δείχνει ποιο.

Τι γίνεται στο βήμα πληρωμής
Φεύγοντας από το βήμα αποστολής στέλνεται το `shipping-information` στο REST API, που αποθηκεύει διεύθυνση και τρόπο αποστολής και επιστρέφει σύνολα και διαθέσιμους τρόπους πληρωμής. Στο βήμα πληρωμής η διεύθυνση χρέωσης είτε αντιγράφεται από την αποστολή («My billing and shipping address are the same») είτε αποθηκεύεται από τη δική της φόρμα. Το Place Order στέλνει το `payment-information`, που αποθηκεύει διεύθυνση χρέωσης και πληρωμή και δημιουργεί την παραγγελία.
Για επισκέπτη οι κλήσεις πάνε στο `/rest/<store>/V1/guest-carts/<id>/…`, για συνδεδεμένο πελάτη στο `/rest/<store>/V1/carts/mine/…`.
Βρείτε το αίτημα που αποτυγχάνει
Ανοίξτε τα εργαλεία προγραμματιστή, καρτέλα Network, φίλτρο `payment-information`, και πατήστε Place Order. Απάντηση 400 έχει μήνυμα σε JSON, συχνά για υποχρεωτικό πεδίο που λείπει. Ένα 401 ή 403 δείχνει χαμένη συνεδρία ή κανόνα firewall στο REST API. Ένα 500 δείχνει exception, γραμμένο στο `var/log/exception.log` και `var/log/system.log`. Αν δεν υπάρχει καθόλου αίτημα, η JavaScript σταμάτησε νωρίτερα: δείτε την Console.
Οι συνήθεις αιτίες
Επικύρωση διεύθυνσης: πεδίο που έγινε υποχρεωτικό στις ρυθμίσεις (τηλέφωνο, νομός, εταιρεία, ΑΦΜ) αλλά δεν εμφανίζεται στη φόρμα χρέωσης, ή λίστα νομών που δεν ταιριάζει με τη χώρα, οπότε η επικύρωση αποτυγχάνει χωρίς ορατό μήνυμα. Custom πεδία διεύθυνσης από extension που δεν στέλνονται με τη διεύθυνση χρέωσης.
JavaScript: χαλασμένη εξάρτηση RequireJS ή mixin από extension, συχνά μετά την ενεργοποίηση JS bundling ή minification, ή μετά από αναβάθμιση θέματος ή extension χωρίς static content deploy. Πληρωμή: τρόπος που εμφανίζεται αλλά δεν αρχικοποιεί το δικό του script, όπως iframe φόρμας κάρτας που μπλοκάρεται από κανόνα Content Security Policy.
Server: observer στην ολοκλήρωση παραγγελίας που πετά exception, πρόβλημα κράτησης αποθέματος ή salable quantity, ή κλήση τρίτου για φόρους, απάτη ή έλεγχο διεύθυνσης που λήγει. Δείτε και salable quantity στο Magento και extensions one step checkout.
Δοκιμάστε και τις δύο διαδρομές
Ελέγξτε με το κουτάκι «ίδια διεύθυνση χρέωσης και αποστολής» τσεκαρισμένο και ξετσεκαρισμένο, ως επισκέπτης και ως συνδεδεμένος πελάτης με αποθηκευμένη διεύθυνση. Είναι διαφορετικές διαδρομές κώδικα και η μία μπορεί να χαλάσει μόνη της. Το δωρεάν τεστ checkout Magento περνά το checkout σε πραγματικό browser, Luma ή Hyvä, και δείχνει το βήμα όπου σταματά.
Συχνές ερωτήσεις
Γιατί το κουμπί Place Order του Magento δεν κάνει τίποτα;
Συνήθως ένα σφάλμα JavaScript σταματά τον handler του κλικ, ή το αίτημα payment-information αποτυγχάνει στην επικύρωση. Η Console και η καρτέλα Network του browser δείχνουν ποιο.
Γιατί δεν αποθηκεύεται η διεύθυνση χρέωσης στο Magento;
Υποχρεωτικό πεδίο που δεν εμφανίζεται στη φόρμα, νομός που δεν ταιριάζει με τη χώρα, ή custom πεδίο διεύθυνσης που δεν στέλνεται. Η απάντηση 400 του payment-information ονομάζει το πεδίο.
Ισχύει αυτό και για το Hyvä Checkout;
Το Hyvä Checkout έχει δικά του components και αιτήματα αντί για τα Knockout scripts του Luma, αλλά οι αιτίες στον server (επικύρωση, observers, απόθεμα, modules πληρωμής) είναι ίδιες.