Magento akzeptiert nicht alle Domainnamen beim Check-out

Als Shop Betreiber hat man es nicht leicht. Die Kunden können praktisch zu jedem Zeitpunkt den Einkauf abbrechen und nur in den wenigsten Fällen nehmen sie sich die Zeit einen Fehler oder ein Problem zu melden, damit dieses behoben werden kann. Eine mögliche Ursache für einen Abbruch beim einkaufen, kann ein nicht validierfähiger Domain Name der Mail Adresse sein. Der folgende Artikel beschreibt, wie alle aktuellen Top Level Domains (TLD) in Magento „nachgerüstet“ werden können.

Magento bis einschließlich Version 1.9.x, kann nicht alle neuen Top Level Domains (TLD), die beim Check out als E-Mail Adresse hinterlegt werden, auf Korrektheit hin validieren. Wenn ein Kunde eine Mail Adresse in der Form info@mein.cafe eingibt, erscheint die folgende Fehlermeldung: „„Email“ ist kein gültiger Hostname., ‚mein.cafe‘ scheint ein DNS-Hostname zu sein, aber der TLD-Teil scheint nicht gültig zu sein, ‚mein.cafe‘ scheint ein lokaler Netzwerkname zu sein. Lokale Netzwerknamen sind jedoch nicht erlaubt„. Der Einkauf stoppt hier!

"Email" ist kein gültiger Hostname., 'mein.cafe' scheint ein DNS-Hostname zu sein, aber der TLD-Teil scheint nicht gültig zu sein, 'mein.cafe' scheint ein lokaler Netzwerkname zu sein. Lokale Netzwerknamen sind jedoch nicht erlaubt

Dies liegt daran, dass für die Domain Name Validierung in Magento eine veraltete Bibliothek aus dem Zend Framework verwendet wird, die die neuen Domain Namen nicht beinhaltet. Als Lösung bieten sich zwei Ansätze an:

Lösung I – eigene Top Level Domain Namen manuell nachrüsten

Auf der Webseite  der IANA (Internet Assigned Numbers Authority), die für die Zuordnung von Nummern und Namen im Internet verantwortlich ist, gibt es eine stets aktuelle gepflegte Liste aller TLD. Diese dient als Grundlage für unsere Anpassung. Wem das Anpassen zu viel ist, kann die bereits von mir erstellte TLD Liste verwenden.

  • Die Datei Hostname.php kopieren: /lib/Zend/Validate/Hostname.php nach /app/code/local/Zend/Validate/Hostname.php
    ACHTUNG: Falls der/die Ordner code/local/Zend/Validate/ nicht existiert, so ist er von Hand zu erstellen!
    In der kopierten Datei folgende Änderung/Prüfung vornehmen:
// First check TLD
$matches = array();
if (preg_match('/([^.]{2,10})$/i', end($domainParts), $matches) ||
// First check TLD
$matches = array();
if (preg_match('/([^.]{2,63})$/i', end($domainParts), $matches) ||

Dies erlaubt neue Top Level Domains (TLD) die länger als 10 Zeichen lang sind.

  • Die zuvor erstellt TLD-Liste in das $_validTlds Array einpflegen.
    ACHTUNG: Am Ende des Arrays können sich arabische und japanische Schriftzeichen befinden! Also nur von A bis Z tauschen und diese behalten!

Lösung II – Domain Name Validierung deaktivieren

Wie schon in der ersten Lösung , die Datei /lib/Zend/Validate/Hostname.php nach /app/code/local/Zend/Validate/Hostname.php kopieren und zum editieren öffnen.

Den nachflgende Code Block suchen und die 3 Zeilen im if-Block auskommentieren.

if (!in_array($this->_tld, $this->_validTlds)) {
    // $this->_error(self::UNKNOWN_TLD);
    // $status = false;
    // break;
}

Dies ist keine Lösung die ich präferiere, aber der Vollständigkeit halber, wollte ich sie genannt haben.

Optional – aktuelle TLD-Liste neu erstellen

Die runter geladene TLD Liste kann in wenigen Schritten, mit Hilfe von Notepad++, in das entsprechende Format gebracht werden.

    • Die Datei als .txt Datei abspeichern
    • Die Datei mit Notepad++ öffnen, die erste Zeile die mit einem hash (#) beginnt löschen.
    • Mit ctrl-h den Suchen und Ersetzen Dialog öffnen.
    • Ersetzen am Zeilenanfang
      Um an jedem Zeilenanfang ein Hochkomma einzufügen, die Einstellungen entsprechend der nachfolgenden Grafik vornehmen.
      Suchen und Ersetzen am ZeilenanfangSuchen nach: „^“, sucht am Anfang jeder Zeile.
      Ersetzen durch: hier 8 Leerzeichen und das Hochkomma eingeben.
      Suchmodus: hier muss Reguläre Ausdrücke aktiviert sein.
      Abschließend auf Alle ersetzen klicken.
    • Ersetzen am Zeilenende
      Um an jedem Zeilenende ein Hochkomma und ein Komma einzufügen, die Einstellungen entsprechend der nachfolgenden Grafik vornehmen.
      Suchen und Ersetzen am ZeilenendeSuchen nach: „$“, sucht am Ende jeder Zeile.
      Ersetzen durch: hier Hochkomma und Komma eingeben.
      Suchmodus: hier muss Reguläre Ausdrücke aktiviert sein.
      Abschließend auf Alle ersetzen klicken.

Alle Zeilen sehen nun wie folgt aus:

Alt:

# Version 2018022200, Last Updated Thu Feb 22 07:07:01 2018 UTC
AAA
AARP
ABARTH
ABB
:
ZM
ZONE
ZUERICH
ZW

Neue:

    'AAA',
    'AARP',
    'ABARTH',
    'ABB',
    :
    'ZM',
    'ZONE',
    'ZUERICH',
    'ZW',

Diese präparierte Liste kann nun in die bestehende Datei Hostname.php eingepflegt werden. Wie das geht, steht weiter oben.

Ab sofort können Kunden auch mit noch so fancy Mail-Adressen im Magento Shop einkaufen.

Unbeschwertes Shoppen wünscht,
Chefkoch

Ein Gedanke zu „Magento akzeptiert nicht alle Domainnamen beim Check-out

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*