UstID Abprüfung im Backend

Die UstID - Abprüfung im Frontend arbeitet wirklich prima! Nun haben wir das Problem, wenn wir einen Kunden im Backend anlegen (z.B. bei ner telefonischen Bestellung), dass dort die UstID nicht geprüft wird, bzw. wenn wir die Kundendaten ändern, keine erneute Prüfung ausgeführt wird. Dies wäre jedoch sehr wichtig! Kann man die Abprüfung vom Frontend auch im Backend aktivieren bzw. integrieren? Und zum 2. wäre es super, wenn man in dem Modul noch einstellen könnte, das man die amtliche Bestätigungsmitteilung haben möchte, denn die muss ja schliesslich haben, sonst zahlt man nach ner Tiefenprüfung sämtliche Steuern aus eigener Tasche nach :wink: Die RPC - Schnittstelle vom Bundeszentralamt bietet das ja im letzten Parameter. Vielleicht hab ich auch nur ein Häkchen übersehen?

Ich habe nun das 2. Problem selbst gelöst. Also wir wollen, dass wenn ein Kunde eine gültige UstID eingibt, nach der positiven Abprüfung, automatisch die amtliche Bestätigung angefordert wird. Falls zwar die Abprüfung positiv ist, aber die Anforderung fehlschlägt, soll der Shopbetreiber per Mail darüber informiert werden, sodass er die Anforderung manuell nachholen kann. Da ich mir vorstellen kann, das es vielleicht den einen oder anderen auch interessiert, werde ich hier meine Lösung mal präsentieren. Es muss auf jeden Fall die erweiterte Überprüfung aktiviert sein. Die Funktion zur Abprüfung der UstID befindet sich in der Klasse sAdmin und heisst sValidateVat(). Am besten nutzt man hier die Erweiterbarkeit bzw. die Vererbung. Also, falls noch nicht vorhanden, eine Datei myAdmin.php mit folgendem Inhalt anlegen: [code]<?php include ("$path/sAdmin.php");

class myAdmin extends sAdmin
{

}
?>[/code] Diese Datei kommt dann wenn sie fertig ist in das Verzeichnis engine/core/class/inherit Jetzt benötigen wir die oben erwähnte Funktion sValidateVat() aus der Datei sAdmin.php und kopieren diese in die Klasse myAdmin. Jetzt nehmen müssen wir daran ein paar Veränderungen vornehmen: $data = array( 'UstId\_1' =\> $this-\>sSYSTEM-\>sCONFIG['sVATCHECKADVANCEDNUMBER'], 'UstId\_2' =\> $vat[1].$vat[2], 'Firmenname' =\> '', 'Ort' =\> '', 'PLZ' =\> '', 'Strasse' =\> '', // 'Druck' =\> empty($this-\>sSYSTEM-\>sCONFIG['sVATCHECKCONFIRMATION']) ? 'nein' : 'ja' 'Druck' =\> 'nein' ); - damit wird der Parameter Druck fest auf nein gesetzt, damit nicht bei jeder Abprüfung (auch negativer) eine Bestätigung angefordert wird. ein paar Zeilen weiter unten fügen wir einen Funktionsaufruf ein: ... if(!empty($response)&&preg\_match\_all($reg,$response,$matches)) { $response = array\_combine($matches[1],$matches[2]); //////////////////////////////////////////////////// // wenn response ok, dann nochmal mit Bestätigung if($response['ErrorCode'] == 200) $this-\>RequestVatConfirmation($data, $context); $messages = $this-\>sCheckVatResponse($response); } elseif... nun wird, wenn die Abprüfung positiv war, die Funktion RequestVatConfirmation aufgerufen, die wir uns wie folgt zurechtbasteln (muss auch in die Klasse myAdmin!): public function RequestVatConfirmation($data, $context) { $data['Druck'] = 'ja'; $request = 'http://evatr.bff-online.de/evatrRPC?'; $request .= http\_build\_query($data,'','&'); $response = @file\_get\_contents($request, false, $context); $reg = '#<param>\s\*<value><array><data>\s*<value><string>([^</string></value>\s*<value><string>([^</string></value>\s*</data></array></value>\s\*#msi'; if(!empty($response)&&preg\_match\_all($reg,$response,$matches)) { $response = array\_combine($matches[1],$matches[2]); //////////////////////////////////////////////////// // wenn response ok, dann alles ok if($response['ErrorCode'] == 200) return; } /////////////////////////////////////////////////////////////////////////////////// // wenn hierbei ein Fehler aufgetreten ist, soll der Shopbetreiber informiert werden $mail = $this-\>sSYSTEM-\>sMailer; $mail-\>ClearAddresses(); $mail-\>AddAddress("XXX@YOUR-SHOP.TLD", ""); $mail-\>IsHTML(0); $mail-\>Body = $this-\>sSYSTEM-\>sCONFIG['sTemplates']['RequestVatConfirmationFailed']['content']; //////////////////////////////////////////////// // die Platzhalter ersetzen $mail-\>Body = str\_replace("{firma}",$data['Firmenname'],$mail-\>Body); $mail-\>Body = str\_replace("{plz}",$data['PLZ'],$mail-\>Body); $mail-\>Body = str\_replace("{ort}",$data['Ort'],$mail-\>Body); $mail-\>Body = str\_replace("{adresse}",$data['Strasse'],$mail-\>Body); $mail-\>Body = str\_replace("{ustid}",$data['UstId\_2'],$mail-\>Body); $mail-\>From = $this-\>sSYSTEM-\>sCONFIG['sTemplates']['RequestVatConfirmationFailed']['frommail']; $mail-\>FromName = $this-\>sSYSTEM-\>sCONFIG['sTemplates']['RequestVatConfirmationFailed']['fromname']; $mail-\>Subject = $this-\>sSYSTEM-\>sCONFIG['sTemplates']['RequestVatConfirmationFailed']['subject']; $mail-\>Send(); } Erklärung: als erstes wird der Parameter Druck auf ja gesetzt, damit die amtliche Bestätigung angefordert wird. Dann wird wie vorher, die Anfrage gestartet. Wenn die Antwort ok ist, ist diese Funktion beendet. Wenn nicht, dann wird grob gesagt, eine Mail erstellt die dann an die in der Zeile $mail-\>AddAddress("XXX@YOUR-SHOP.TLD", ""); festgelegt ist, gesendet wird. Hier natürlich eure Mail Adresse eintragen! Man könnte dies auch noch eleganter über ne Konfigurationsvariable machen, aber da sich diese bei uns wahrscheinlich nie ändert, ist die hardcodierte Variante, an dieser Stelle für uns ausreichend praktikabel. Damit das mit der Mail auch funktioniert, benötigen wir nun noch ein Mailtemplate, das wir jetzt noch schnell anlegen. Dazu müssen wir in der Datenbank in der Tabelle s_core_config_mails einen Eintrag einfügen. In das Feld name kommt RequestVatConfirmationFailed der Rest kann dann komfortabel über das Backend eingetragen werden. Im Backend findet ihr nun unter Einstellungen >>> E-Mail Vorlagen den Eintrag RequestVatConfirmationFailed - unser neues Template. Im Feld Plaintext haben wir folgenden Text: Die Anforderung der amtlichen Bestätigung der UStID ist bei folgendem Kunden fehlgeschlagen: Firma: {firma} Adresse: {adresse} PLZ: {plz} Ort: {ort} UstID: {ustid} Die Bestätigung muss manuell angefordert werden! Die UstID war aber bei der Abprüfung gültig. Die Platzhalter {firma}, {adresse}, … werden in der Mail natürlich ersetzt. Das wars schon… Vielleicht kann ja jemand von Shopware drüberschauen, ob das so Sinn macht oder ob es evtl. zu irgendwelchen Problemen kommen kann. Wer das benutzt, tut dies auf eigene Gefahr! :sunglasses: