Deutschland und Europa - Konzept Demokratie, Einwanderung und Wirtschaft

Wenn Sie wie wir Produkte oder Leistungen anbieten, die für Unternehmen aus der EU umsatzsteuerfrei geliefert werden können, dann nutzen Sie vermutlich wohl oder übel die USt-ID Prüfung von OXID im Bestellvorgang.

Diese Prüfung ist leider nicht so zuverlässig wie sie sein sollte, weil der dahinter liegende Online-Validierungsservice immer wieder nicht erreichbar oder fehlerhaft ist. Das führt dann schnell mal zu Bestellabbrüchen, weil OXID solche Fehler unzureichend behandelt.

Der Kunde erhält nämlich einfach bei allen Fehlern, die OXID nicht kennt, die Meldung – UStID ist fehlerhaft. Und OXID kennt nicht allzu viele Fehler. Wenn der Kunde seine UStID korrekt angegeben hat, und der Fehler eigentlich auf dem nicht erreichbaren (oder fehlerhaften) Dienst basiert, ist die Verwirrung perfekt – und der Kunde bricht entnervt die Bestellung ab.

Wie die UStID Prüfung in OXID funktioniert

Wird im Shop-Backend für ein Land die Umsatzsteuerfreiheit mit USt-ID aktiviert, und der Kunde wählt dieses Land und gibt eine USt-ID ein, dann prüft OXID über einen Online-Dienst, ob die USt-ID valide ist, also nach den entsprechenden Regeln aufgebaut ist.

Diese Prüfung lässt sich nicht deaktivieren.

Die URL zum Dienst dafür ist in OXID voreingestellt und zeigt auf einen Service der Europäischen Kommission. Sie kann aber in den Shopeinstellungen unter dem Punkt „Mehrwertsteuer“  geändert werden.

Bei der Prüfung ist OXID leider davon abhängig, dass der Service erreichbar ist und auch fehlerfrei validiert. Leider ist das offenbar hier in Deutschland häufiger nicht der Fall. Und dann geht das Chaos los, denn OXID kann mit den Meldungen, die ungeplant vom Service zurückkommen, nichts anfangen – und fängt auch die Nichterreichbarkeit des Services nicht sauber ab.

Folge: Bestellabbruch

OXID kennt nur drei Ergebnisse für die Validierung:

  1. im besten Fall ist alles ok, der Service ist erreichbar und gibt auch ein „alles in Ordnung“ zurück,
  2. der Unternehmensname fehlt,
  3. die USt-ID ist falsch.

Im Hintergrund kennt OXID durchaus noch mehr Probleme – der Server ist „busy“, also beschäftigt, oder nicht erreichbar oder der Service ist gerade nicht verfügbar. Aber all diese Fehler werden nicht so verarbeitet, dass sie an den Kunden weitergereicht werden. Stattdessen wird dem Kunden in all diesen Fällen „USt-ID falsch“ als Meldung angezeigt. Für den Kunden, der die richtige Nummer wieder und wieder abtippt, ist das eine ziemlich frustrierende Erfahrung, denke ich.

Vermutlich steckt dahinter die Überlegung, dass der Kunde mit Meldungen wie „Service unreachable“ und „Server busy“ ohnehin nichts anfangen kann. Aber eine falsche Meldung, die den Kunden verwirrt und verunsichert – und schließlich an der Funktionsfähigkeit und Glaubwürdigkeit des Shops zweifeln lässt, halte ich für den falschen Weg.

Behebung in 3 Schritten

Wir haben das in unserem Shop mit einigen Handgriffen behoben. Diese Handgriffe erheben keinen Anspruch auf Vollständigkeit, besser geht immer, aber am Ende kam es uns darauf an, mit möglichst geringem Aufwand eine ordentliche Lösung zu schaffen, die uns und unseren Kunden nützt.

Schritt 1 – Validator erweitern

Zunächst haben wir die Klasse oxOnlineVatIdCheck erweitert, genauer die Funktion validate(), die die Validierung anstößt und die zurückgegebenen Informationen verarbeitet. Dort findet sich nämlich nach der Validierung der folgende Code-Schnippsel:

if (!$blResult) {
    $this->setError('ID_NOT_VALID');
}

Sobald es kein Result gibt, wird der Fehler „ID_NOT_VALID“ gesetzt. Da kein Result heißt, es ist ein Problem oder Fehler (jeglicher Art, auch Nichterreichbarkeit des Validierungsdienstes) aufgetreten, wird diese Meldung also immer dann generiert, wenn OXID nicht weiter weiß.

Wir haben das in unserer Erweiterung wie folgt geändert:

if (!$blResult) {
    if (!$this->getError()) {
        $this->setError('ID_NOT_VALID');
    }
    @mail('info@web-grips.de', 'Fehler bei VAT Validierung im Shop', 'Es ist folgender Fehler aufgetreten: ' . $this->getError() . ', UStId: ' . $oVatIn->getNumbers() . ', Land: ' . $oVatIn->getCountryCode());
}

Wir setzen also den Fehler „ID_NOT_VALID“ nur, wenn tatsächlich kein Fehler ermittelbar ist. Denn das Witzige ist, dass OXID es sehr wohl bemerkt, wenn der Service nicht erreichbar ist, und sogar den Fehler SERVICE_UNREACHABLE setzt. Dieser wird dann nur nicht weiter verarbeitet bzw. bis zum Frontend, also zum Kunden, durchgereicht.

Zusätzlich senden wir zu Informationszwecken eine Mail an uns selbst, in der wir den Fehler sowie die eingegebene UStID mitsenden. Damit können wir den Fehler nachverfolgen und ggf. an seiner Wurzel beheben, und wir sehen auch gleichzeitig, ob der Fehler zu einem Bestellabbruch führte (wenn der Fehler, aber nicht die zugehörige Bestellung ankommt).

Die gesamte (überschriebene) validate() Funktion sieht dann also wie folgt aus:

    public function validate(oxCompanyVatIn $oVatIn)
    {
        $oCheckVat = new stdClass();
        $oCheckVat->countryCode = $oVatIn->getCountryCode();
        $oCheckVat->vatNumber = $oVatIn->getNumbers();

        $blResult = $this->_checkOnline($oCheckVat);
        if (!$blResult) {
            if (!$this->getError()) {
                $this->setError('ID_NOT_VALID');
            }
            @mail('info@web-grips.de', 'Fehler bei VAT Validierung im Shop', 'Es ist folgender Fehler aufgetreten: ' . $this->getError() . ', UStId: ' . $oVatIn->getNumbers() . ', Land: ' . $oVatIn->getCountryCode());
        }

        return $blResult;      
    }

Man kann hier sogar noch einen Schritt weiter gehen und festlegen, dass bei bestimmten Meldungen, z. B. wenn der Server nicht erreichbar ist, einfach ein true zurückzugeben, um den normalen Bestellablauf nicht zu stören. Ob und wie weit Sie dieses Risiko eingehen wollen, müssen Sie selbst abwägen.

Schritt 2 – Übersetzungen ergänzen

Nun gibt es leider ein weiteres Problem. OXID setzt aus der Fehlermeldung und einem festen String einen Übersetzungstext zusammen, der immer dann zu einer völlig kryptischen Meldung führt, wenn OXID die Fehler nicht kennt – es also keine entsprechende Übersetzung gibt. Und wie gesagt, OXID kennt hier nicht allzu viele Fehler, genau genommen sogar nur zwei: ID fehlerhaft und Unternehmensname fehlt.

SERVICE_UNREACHABLE ist OXID zwar als Fehler bekannt, da dieser Fehler aber nicht ans Frontend durchgereicht wird, gibt es dafür logischerweise auch keine Übersetzung.

Ergänzen Sie daher in der cust_lang.php Ihres Themes folgende Zeile (achten Sie darauf, dass die vorherige Zeile auf ein Komma endet):

'VAT_MESSAGE_SERVICE_UNREACHABLE'  => 'Ihre USt-ID kann derzeit nicht geprüft werden. Bitte probieren Sie es in einigen Minuten noch einmal. ',

Leider löst das unser Problem nur teilweise, denn der Dienst ist nicht nur zeitweise eben gar nicht erreichbar, sondern liefert manchmal auch kompletten Müll als Antwort. Und mit diesem Müll kann OXID ebenfalls nicht umgehen.

So hatten wir heute, da ich diesen Artikel schreibe, folgende Meldung: Error Fetching http headers.

Diese Meldung war kein OXID Fehler, und auch kein Datenfehler, sondern kam als Antwort vom Validierungsdienst auf eine völlig korrekte USt-ID für Frankreich.

Der Fehler kam nur kurzzeitig, vielleicht 5 Minuten, aber diese 5 Minuten reichen eben auch aus, um einen Kunden, der bestellen möchte, entnervt aufgeben zu lassen (wir erinnern uns – der Kunde erhält die Meldung „USt-ID falsch“).

OXID macht daraus (nach unserer Änderung) VAT_MESSAGE_Error Fetching http headers – und versucht das dann zu übersetzen – nicht schwer zu raten: geht natürlich nicht. Resultat: Eine völlig kryptische Fehlermeldung für den Kunden.

Also brauchen wir nun noch eine Logik, die genau das abfängt.

Wir haben zunächst, damit es nicht so kryptisch für den Kunden ist, folgende Übersetzung in der cust_lang.php unseres Themes ergänzt:

'VAT_MESSAGE_Error'  => 'Fehler bei der USt-ID Prüfstelle: ',

Der Kunde erhält nun folgende Meldung: Fehler bei der USt-ID Prüfstelle: Fetching http headers – das ist doch schon besser als gar nichts, und vor allem besser als die Meldung USt-ID falsch.

Schritt 3 – erklärende Infos für unsere Kunden

Doch wir gehen noch einen Schritt weiter und erstellen eine Info für Kunden, dass Sie im Fehlerfall einfach 5 Minuten warten und es dann nochmal probieren sollen. Hier kann man auch ergänzen, dass z. B. bei fortwährenden Problemen telefonischer Kontakt aufgenommen werden soll, dass der Warenkorb gespeichert wurde und der Kunde es am nächsten Tag nochmal versuchen soll etc. Je nachdem, welchen Service Sie bieten und welches der beste Weg für Ihren Kunden ist.

Am besten erstellen Sie sich für diesen Zweck ein kleines CMS-Snippet, denn so lässt sich der Inhalt komfortabler anpassen und ergänzen als in der cust_lang.php. Sie gehen dazu auf Kundeninformationen CMS, legen ein neues Snippet an, vergeben eine eindeutige ID, z. B. unsere_vat_meldung und geben dann auf der rechten Seite Ihren Text ein, z. B.

Bei der Prüfung Ihrer USt-ID ist ein Fehler aufgetreten. Falls Sie sicher sind, dass Sie die USt-ID und Ihr Land korrekt angegeben haben, ist vermutlich der Prüfdienst aktuell nicht erreichbar. Bitte versuchen Sie es in wenigen Minuten noch einmal.

Bei anhaltenden Problemen erreichen Sie uns telefonisch unter 1234567, bitte rufen Sie uns an. Ihr Warenkorb wurde bereits für Sie gespeichert, so dass Sie gern auch morgen Ihre Bestellung fortführen können.

Vergessen Sie nicht, das Snippet ggf. in allen weiteren Sprachen Ihres Shops anzupassen.

Snippet aktivieren, fertig.

Wir werden diese Meldung nun im entsprechenden Template einbinden, und zwar so, dass es immer angezeigt wird, wenn ein Problem mit der USt-ID auftritt.

Öffnen Sie die Datei tpl/form/user_checkout_change.tpl in Ihrem Theme und ergänzen Sie dort unter der Zeile [{block name=“user_checkout_change“}] folgenden Code:

[{if $aErrors.oxuser__oxustid && (isset( $invadr.oxuser__oxustid) || $oxcmp_user->oxuser__oxustid->value)}]
    [{ oxcontent ident="unsere_vat_meldung" }]
[{/if}]

Setzen Sie bei ident ein, was Sie oben für das CMS-Snippet vergeben haben. Nun erscheint die Info immer dann, wenn ein Fehler mit der USt-ID auftritt, der Kunde jedoch eine USt-ID angegeben hat (also die USt-ID nicht fehlt).

Ich habe ein PDF-Dokument mit den aktuellen Vorschriften zum Aufbau einer korrekten USt-ID in meinen Unterlagen gefunden. Leider weiß ich nicht mehr, wo ich es heruntergeladen habe … und es geht aus der Datei kein Autor hervor, daher – wer hier Urheberrechte anmelden möchte, bitte kurze Info an mich, ich ergänze das dann bzw. setze den Link gern auf das Originaldokument.

kostenloses eBook SEO für OXID eShop

10 SEO Tipps für Ihren OXID eShop - kostenlos

Laden Sie sich Ihr kostenloses eBook herunter und optimieren Sie Ihren Shop ganz einfach selbst.

 

Thema: Pimp your Shop | Stichworte: , , , , ,