Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #45 am: 20. März 2013, 14:23:06
    Hat jemand bitte einen Lösungsansatz, wie man wenigstens die Ust. Prüfung umgehen kann?

    Stimmt, die Deaktivierung der Plausibilitätsprüfung im Admin hat nicht funktioniert.

    Bitte die Datei includes/classes/vat_validation.php wie folgt ändern:
    https://trac.modified-shop.org/changeset/4541/trunk#file1
    Trade Republic - Provisionsfrei Aktien handeln

    Folienschrift-Shop

    • Fördermitglied
    • Beiträge: 140
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #46 am: 20. März 2013, 21:45:17
    Kann man die Ust.ID Prüfung nicht über diese Schnittstelle zukünfig abwickeln?
    https://evatr.bff-online.de/eVatR/xmlrpc/

    Nachteil: Der Service steht lt. Info nur zwischen 5:00 und 23:00 Uhr zur Verfügung. Aber immerhin! Außerhalb der Zeit könnte die Eintragung mit Hinweis für den Admin auf 'ungeprüft' erfolgen, damit der Kunde auch nachts bestellen kann ;-) Der Admin könnte dann am nächsten Tag die Prüfung manuell vornehmen und die Korrektheit bestätigen.

    Edit:
    Ich sehe gerade, daß über diese Schnittstelle wohl nur ausländische IDs geprüft werden können und leider keine aus Deutschland.

    Für inländische Ustd.IDs (zur automatischen Umschaltung auf NETTO-Kunde) würde doch die Plausibilitäts- und Prüfsummenberechnung ausreichen. Bei der inländischen Ust.ID Prüfung geht es doch lediglich darum, dem Kunden nach Eröffung eines Kontos statt der Bruttopreise automatisiert die Nettopreise  anzuzeigen und dafür sollte das Prüfsummenverfahren doch ausreichen.

    Wie ist Eure Meinung dazu?

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #47 am: 21. März 2013, 08:31:16
    Der Check von bff-online.de war früher drin, aber wie du schon sagtest, haben die:
    - "nachts" geschlossen
    - Prüfen keine DE-Nummern
    - leiten die Anfragen auch nur an die Mitgleidsstaaten weiter

    Deshalb sind wir gleich zur EU-Abfragestelle gewechselt.

    Da die WebServices die Prüfsummenberechnung und die Gültigkeitsprüfung vornehmen macht es doch wenig Sinn, nun zwischen ausländischen und inländischen zu unterscheiden. Entweder prüft man alle oder keine...

    Folienschrift-Shop

    • Fördermitglied
    • Beiträge: 140
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #48 am: 21. März 2013, 10:32:38
    @Dokuman
    Du hast recht: Entweder alle oder gar nicht prüfen ;-)

    Leider ist die EU-Prüftselle offensichtlich überlastet oder aus anderen Gründen nicht erreichbar, sodaß Prüfungen fehlschlagen.

    Mein Vorschlag zielt für o.g. Fall darauf ab, daß eine Plausibilitätsprüfung die automatische Umschaltung auf Nettokunde (EU-Inland bzw. EU-Ausland) ermöglichen würde und der Kunde ohne Admin-Eingriff zu Nettopreisen mit oder ohne Ust. innerhalb der EU bestellen (und sofort bezahlen) kann.

    Die Prüfung der Kunden ohne Ust.-Zahlung obliegt anschließend manuell dem Admin, denn nur für diesen Fall ist eine bestätigte Ust.ID relevant.

    Ohne Umschalt-Automatik (wegen Nichterreichbarkeit der Prüfstelle) fallen Nettokunden weg, die nicht Rücksprache mit dem Shop betreffend der Umsatzsteuer halten wollen.

    Eine shopinterne Plausibilitätsprüfung würde die Benutzerfreundlichkeit für alle Nettokunden steigern, denn nur die EU-Inlandskunden, die keine Ust. zahlen wollen, müssen vor dem Warenversand hinsichtlich der gültigen Ust.ID überprüft werden. Dies kann m.E. generell manuell erfolgen.

    Mein Vorschlag zusammengefaßt:
    Keine Ust.ID bei der Prüfstelle prüfen, statt dessen Plausibilitäskontrolle für die Umschaltautomatik zu Nettokunden und manuelle Prüfung der EU-Kunden, die die Ust. im eigenen Land abführen wollen.

    p3e

    • Experte
    • Beiträge: 2.426
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #49 am: 21. März 2013, 10:59:00
    Wir prüfen auch nur manuell, da die automatische Prüfung zu oft fehlschlägt.
    Wäre praktisch, wenn der Shop nur angibt, ob die VAT-Überprüfung ein OK ergeben hat. Falls nicht, keine Fehlermeldung sondern nur ein Hinweis, dass die VAT noch überprüft werden muss.
    Das verunsichert den Kunden nicht so.

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #50 am: 21. März 2013, 12:56:58
    Hm, die UST-ID nur im Backend (automatisch) zu prüfen ist wahrscheinlich die beste Idee!

    Folienschrift-Shop

    • Fördermitglied
    • Beiträge: 140
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #51 am: 21. März 2013, 12:59:42
     :pro:

    ... und für das Frontend eine einfache Plausibilitätsprüfung, damit die automatische Umschaltung auf 'Nettokunde' funktioniert?

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #52 am: 21. März 2013, 14:02:56
    Wie soll die "einfache Plausibilitätsprüfung" aussehen?
    Es gibt nur eine Onlineprüfung oder gar keine Prüfung.

    Die Umschaltung wollte wirklich nur passieren, wenn die USTID gültig ist und nicht schon vorher.
    Das kann man auch nachträglich im Admin machen, wenn man die Kundendaten (nachbearbeitet).

    So könnte das aussehen (hier ein test), wenn man das bei der Kundenregistrierung deaktivieren will. Dann erfolgt keine Prüfung der USTID.

    Folienschrift-Shop

    • Fördermitglied
    • Beiträge: 140
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #53 am: 21. März 2013, 14:19:37
    Deine Lösung zur Unterscheidung der Ust.ID Prüfung  Frontend bzw. Backend finde ich ausgezeichnet.

    Für das Frontend und zum Ziel der Umschaltautomatik auf 'Nettokunde' möchte ich meinen Vorschlag verdeutlichen:

    Mit 'einfacher Plausibilitätsprüfung' meine ich den Prüfsummencheck. Wenn der im Frontend erfolgreich ist, könnte die automatische Umschaltung auf 'Nettokunde' im Shop erfolgen.

    Der Prüfsummencheck ist nicht unsicherer, als die Eingabe einer fremden Ust.ID.

    Es liegt in der Verantwortung des Admins, ob er bei einem Inlands-Nettokunden die Ust.ID im Backend überprüft, weil das Ergebnis für die steuerliche Behandlung des Shop-Umsatzes im Inland irrelevant ist (Shop und Kunde befinden sich im gleichen EU-Land, Kunde muß Ust. bezahlen).

    Für einen Nettokunden aus dem EU-Inland ist die Prüfung der Ust.ID für den Shop ebenfalls irrelevant, wenn der Kunde die Ust. im Land des Shops (z.B. D) bezahlt (Shop und Kunde befinden sich in unterschiedlichen EU-Ländern, Kunde zahlt Ust. im Land des Shops).

    Umsatzsteuerrelevant ist nur der EU-Nettokunde, der in seinem eigenen Land die Ust. abführen will. Und da muß der Admin die Gültigkeit der Ust.ID prüfen, um nicht vom FA zur Nachzahlung der Ust. aufgefordert zu werden. Dies würde schon bei der nächsten BZSt-Anmeldung auffallen.

    Aus dem Grund bin ich der Auffassung, daß im Frontend ein Prüfsummencheck der Ust.ID für eine automatische Umschaltung auf 'Nettokunde' ausreichend ist.

    p3e

    • Experte
    • Beiträge: 2.426
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #54 am: 21. März 2013, 22:30:51
    Ja so sehe ich das auch. Es kommt sehr selten vor, dass ein Kunde eine VAT-ID angibt, die Ihm nicht gehört. Wenn ich das im Nachhinein feststellte, muss ich ihn sowieso noch einmal kontaktieren und das Kundenkonto manuell anpassen.
    Die Zuordnung zur Kudengruppe sollte aber bereits automatisch erfolgen weil meiner Erfahrung nach die Angabe des Kunden zu über 99% der Fälle stimmt. Ich möchte nur ungern den Bestellprozeß meiner ehrlichen Kunden stören. Die meisten Fehler bei der VAT sind Tippfehler.

    Toll wäre, wenn der Shop zunächst versucht die VAT zu überprüfen. Ist diese korrekt, ist alles prima. Ist die VAT nicht korrekt, soll der Kunde sie noch einmal eingeben. Wenn er wieder die selbe eingibt, bekommt der Kunde die Nachricht, dass die VAT nicht automatisch verifiziert werden konnte, dass der Kunde zunächst normal bestellen kann, die VAT nachträglich manuell überprüft werden wird. Sollte auch eine manuelle Verifizierung nicht positiv verlaufen, werden wir Sie diesbezüglich kontaktieren.

    Clever

    • Schreiberling
    • Beiträge: 257
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #55 am: 25. März 2013, 15:18:50
    Hat jemand bitte einen Lösungsansatz, wie man wenigstens die Ust. Prüfung umgehen kann?

    Stimmt, die Deaktivierung der Plausibilitätsprüfung im Admin hat nicht funktioniert.

    Bitte die Datei includes/classes/vat_validation.php wie folgt ändern:
    https://trac.modified-shop.org/changeset/4541/trunk#file1
    Die Änderungen führen bei mir zur weissen Seite ohne Fehlermeldung - Kunde wird nicht angelegt.
    Ohne Änderung funktioniert alles reibungslos - nur das der kunde die USTID nicht eintragen kann

    digicam

    • Fördermitglied
    • Beiträge: 122
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #56 am: 04. Mai 2013, 13:38:50
    Kann es sein dass die VAT-Prüfung in der modified eCommerce Shopsoftware v1.06 rev 4642 nur für einige EU-Länder funktioniert und für andere nicht? Hab einige Länder ausprobiert und z.B. für Tschechien und Slowakei funktioniert die Prüfung nicht. Hab noch eine alte modified eCommerce Shopsoftware v1.05 und da funktioniert die VAT-Überprüfung im Frontend und Backend problemlos.
    Gruß
    digicam

    Clever

    • Schreiberling
    • Beiträge: 257
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #57 am: 04. Juni 2013, 15:46:33
    Ich finde dieses wichtige Thema hat durchaus mal eine Lösung verdient....

    die aktuelle /includes/classes/vat_validation.php im 1.06er:
    Code: PHP  [Auswählen]
     <?php
    /* -----------------------------------------------------------------------------------------
       $Id: vat_validation.php 3198 2012-07-11 09:41:52Z dokuman $

       modified eCommerce Shopsoftware
       http://www.modified-shop.org

       Copyright (c) 2009 - 2013 [www.modified-shop.org]
       -----------------------------------------------------------------------------------------
       based on:
       (c) 2006 XT-Commerce (vat_validation.php 1283 2005-10-05)

       Released under the GNU General Public License
       ---------------------------------------------------------------------------------------*/


    // include needed functions
    require_once (DIR_FS_INC.'xtc_get_countries.inc.php');

    class vat_validation {
      var $vat_info;
      var $vat_mod;

      const SOAP_WSDL_URL = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';

      function __construct($vat_id = '', $customers_id = '', $customers_status = '', $country_id = '', $guest = false) {
        $this->vat_info = array ();
     //   $this->live_check = ACCOUNT_COMPANY_VAT_LIVE_CHECK;
        if (xtc_not_null($vat_id) && ACCOUNT_COMPANY_VAT_LIVE_CHECK == 'true') {
          $this->getInfo($vat_id, $customers_id, $customers_status, $country_id, $guest);
        } else {
          if ($guest) {
            $this->vat_info = array ('status' => DEFAULT_CUSTOMERS_STATUS_ID_GUEST);
          } else {
            $this->vat_info = array ('status' => DEFAULT_CUSTOMERS_STATUS_ID);
          }
        }
      }

      function getInfo($vat_id = '', $customers_id = '', $customers_status = '', $country_id = '', $guest = false) {

        if (!$guest) {
          if ($vat_id) {
            $validate_vatid = $this->validate_vatid($vat_id, $country_id);

            switch ($validate_vatid) {

              case '0' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID;
                $vat_id_status = '0';
                break;

              case '1' :
                if ($country_id == STORE_COUNTRY) {
                  if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
                    $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID_LOCAL;
                  } else {
                    $status = DEFAULT_CUSTOMERS_STATUS_ID;
                  }
                } else {
                  if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
                    $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID;
                  } else {
                    $status = DEFAULT_CUSTOMERS_STATUS_ID;
                  }
                }
                $error = false;
                $vat_id_status = '1';
                break;

              case '2' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID;
                $vat_id_status = $validate_vatid;
                break;

              case '8' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID;
                $vat_id_status = '8';
                break;

              case '99' :
              case '98' :
              case '97' :
              case '96' :
              case '95' :
              case '94' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID;
                $vat_id_status = $validate_vatid;
                break;

              default :
                $status = DEFAULT_CUSTOMERS_STATUS_ID;

            } //end switch

          } else {
            if ($customers_status) {
              $status = $customers_status;
            } else {
              $status = DEFAULT_CUSTOMERS_STATUS_ID;
            }
            $vat_id_status = '';
            $error = false;
          }

        } else {
          if ($vat_id) {
            $validate_vatid = $this->validate_vatid($vat_id, $country_id);

            switch ($validate_vatid) {

              case '0' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
                $vat_id_status = '0';
                break;

              case '1' :
                if ($country_id == STORE_COUNTRY) {
                  if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
                    $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID_LOCAL;
                  } else {
                    $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
                  }
                } else {
                  if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
                    $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID;
                  } else {
                    $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
                  }
                }
                $error = false;
                $vat_id_status = '1';
                break;

              case '2' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
                $vat_id_status = $validate_vatid;
                break;

              case '8' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
                $vat_id_status = '8';
                break;

              case '99' :
              case '98' :
              case '97' :
              case '96' :
              case '95' :
              case '94' :
                if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
                  $error = true;
                }
                $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
                $vat_id_status = $validate_vatid;
                break;

              default :
                $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;

            } //end switch

          } else {
            if ($customers_status) {
              $status = $customers_status;
            } else {
              $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
            }
            $vat_id_status = '';
            $error = false;
          }
        }

        if ($customers_id) {
          $customers_status_query = xtc_db_query("SELECT customers_status FROM ".TABLE_CUSTOMERS." WHERE customers_id = '".$customers_id."'");
          $customers_status_value = xtc_db_fetch_array($customers_status_query);

          if ($customers_status_value['customers_status'] != 0) {
            $status = $status;
          } else {
            $status = $customers_status_value['customers_status'];
          }
        }

        $this->vat_info = array (
          'status' => $status,
          'vat_id_status' => $vat_id_status,
          'error' => $error,
          'validate' => $validate_vatid
        );

      }

      // DokuMan - 2011-08-24 - check VAT via SOAP at http://ec.europa.eu
      function validate_vatid($vat_id, $country_id) {

          // 0 = 'VAT invalid'
          // 1 = 'VAT valid'
          // 2 = 'SOAP ERROR: Connection to host not possible, europe.eu down?'
          // 8 = 'unknown country'
          //94 = 'INVALID_INPUT'       => 'The provided CountryCode is invalid or the VAT number is empty',
          //95 = 'SERVICE_UNAVAILABLE' => 'The SOAP service is unavailable, try again later',
          //96 = 'MS_UNAVAILABLE'      => 'The Member State service is unavailable, try again later or with another Member State',
          //97 = 'TIMEOUT'             => 'The Member State service could not be reached in time, try again later or with another Member State',
          //98 = 'SERVER_BUSY'         => 'The service cannot process your request. Try again later.'
          //99 = 'no PHP5 SOAP support'
          $results = array (0 => '0',
                             1 => '1',
                             2 => '2',
                             8 => '8',
                            94 => '94',
                            95 => '95',
                            96 => '96',
                            97 => '97',
                            98 => '98',
                            99 => '99');

          // check if PHP5 bulit-in SOAP class is available
          if (!class_exists('SoapClient')) {
            return $results[99]; // no PHP5 SOAP support
          }

          // map numeric country id to alphanumeric ISO 3166 country code
          $country_array = array ();
          $country_array = xtc_get_countriesList($country_id, true);
          $country_id = strtoupper($country_array['countries_iso_code_2']);

          // check VAT for EU countries only
          switch ($country_id) {
          // EU countries
            case 'AT':
            case 'BE':
            case 'BG':
            case 'CY':
            case 'CZ':
            case 'DE':
            case 'DK':
            case 'EE':
            case 'GR':
            case 'ES':
            case 'FI':
            case 'FR':
            case 'GB':
            case 'HU':
            case 'IE':
            case 'IT':
            case 'LT':
            case 'LU':
            case 'LV':
            case 'MT':
            case 'NL':
            case 'PL':
            case 'PT':
            case 'RO':
            case 'SE':
            case 'SI':
            case 'SK':
              return $results[$this->checkVatID_EU($vat_id, $country_id)];

            default:
              return $results[8]; // unknown country
          }
      }

      /**
      * Invoke the VIES service to check an EU VAT number
      *
      * @param string $vat_id VAT number
      * @param string $country_id Country Code
      * @return mixed
      */

      function checkVatID_EU($vat_id, $country_id) {

        // remove noise from VAT
        $remove = array (' ', '-', '/', '\\', '.', ':', ',');
        $vat_id = trim(chop($vat_id));
        $vat_id = str_replace($remove, '', $vat_id );
        // split VAT into ISO 3166 ALPHA-2 country code and vat number
        $countryCode = substr($vat_id, 0, 2);
        $vatNumber = substr($vat_id, 2);

        try {
          $options = array(
            'soap_version'=>SOAP_1_1,
            'exceptions'=>true,
            'trace'=>1,
            'cache_wsdl'=>WSDL_CACHE_NONE,
            'user_agent' => 'Mozilla',  // User agent mandatory for this special VAT WSDL-request
            //'proxy_host' => '[2a01:e0b:1:143:62eb:69ff:fe8f:1764]',
            //'proxy_port' => 80
          );
          $client = @new SoapClient(vat_validation::SOAP_WSDL_URL, $options);
        } catch (Exception $e) {
          echo '<span class="messageStackError">'.$e->faultstring.'</span>';
        }
        if($client){
          try {
            $params = array('countryCode' => $country_id, 'vatNumber' => $vatNumber);
            $result = $client->checkVat($params);
            if($result->valid == true){
              return 1;  // VAT-ID is valid
            } else {
              return 0;   // VAT-ID is NOT valid
            }
          } catch (SoapFault $e) {
            //enhanced error reporting
            $errors = array(
              'INVALID_INPUT'       => '94',
              'SERVICE_UNAVAILABLE' => '95',
              'MS_UNAVAILABLE'      => '96',
              'TIMEOUT'             => '97',
              'SERVER_BUSY'         => '98'
              );
            return $errors[$e->faultstring];
          }
        } else {
          return 2;  // Connection to host not possible, europe.eu down?
        }
      } // end checkVatID_EU
    }
    ?>
    funktioniert nunmal gar nicht...

    ich habe nun eine ältere Version gefunden, die super funktioniert - nur das sie nicht zurückkehrt, will sagen der Kunde bekommt eine weiße Seite, obwohl alles einwandfrei geklappt hat und er korrekt mit gültiger USTID eingetragen ist:
    Code: PHP  [Auswählen]
        <?php
        /* -----------------------------------------------------------------------------------------
          $Id: vat_validation.php 2211 2011-09-13 12:45:15Z dokuman $
         
          modified eCommerce Shopsoftware - community made shopping
          http://www.modified eCommerce Shopsoftware.org
         
          Copyright (c) 2010 modified eCommerce Shopsoftware
          -----------------------------------------------------------------------------------------
          based on:
          (c) 2006 XT-Commerce (vat_validation.php 1283 2005-10-05)
         
          Released under the GNU General Public License
          ---------------------------------------------------------------------------------------*/

         
        // include needed functions
        require_once (DIR_FS_INC.'xtc_get_countries.inc.php');
         
        class vat_validation {
        var $vat_info;
        var $vat_mod;
         
        const SOAP_WSDL_URL = 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl';
         
        function vat_validation($vat_id = '', $customers_id = '', $customers_status = '', $country_id = '', $guest = false) {
        $this->vat_info = array ();
        $this->live_check = ACCOUNT_COMPANY_VAT_LIVE_CHECK;
        if (xtc_not_null($vat_id)) {
        $this->getInfo($vat_id, $customers_id, $customers_status, $country_id, $guest);
        } else {
        if ($guest) {
        $this->vat_info = array ('status' => DEFAULT_CUSTOMERS_STATUS_ID_GUEST);
        } else {
        $this->vat_info = array ('status' => DEFAULT_CUSTOMERS_STATUS_ID);
        }
        }
        }
         
        function getInfo($vat_id = '', $customers_id = '', $customers_status = '', $country_id = '', $guest = false) {
         
        if (!$guest) {
        if ($vat_id) {
        $validate_vatid = $this->validate_vatid($vat_id, $country_id);
         
        switch ($validate_vatid) {
         
        case '0' :
        if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
        $error = true;
        }
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
        $vat_id_status = '0';
        break;
         
        case '1' :
        if ($country_id == STORE_COUNTRY) {
        if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
        $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID_LOCAL;
        } else {
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
        }
        } else {
        if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
        $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID;
        } else {
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
        }
        }
        $error = false;
        $vat_id_status = '1';
        break;
         
        case '8' :
        if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
        $error = true;
        }
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
        $vat_id_status = '8';
        break;
         
        case '99' :
        case '98' :
        case '97' :
        case '96' :
        case '95' :
        case '94' :
        if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
        $error = true;
        }
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
        $vat_id_status = $validate_vatid;
        break;
         
        default :
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
         
        } //end switch
         
        } else {
        if ($customers_status) {
        $status = $customers_status;
        } else {
        $status = DEFAULT_CUSTOMERS_STATUS_ID;
        }
        $vat_id_status = '';
        $error = false;
        }
         
        } else {
        if ($vat_id) {
        $validate_vatid = $this->validate_vatid($vat_id, $country_id);
         
        switch ($validate_vatid) {
         
        case '0' :
        if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
        $error = true;
        }
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
        $vat_id_status = '0';
        break;
         
        case '1' :
        if ($country_id == STORE_COUNTRY) {
        if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
        $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID_LOCAL;
        } else {
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
        }
        } else {
        if (ACCOUNT_COMPANY_VAT_GROUP == 'true') {
        $status = DEFAULT_CUSTOMERS_VAT_STATUS_ID;
        } else {
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
        }
        }
        $error = false;
        $vat_id_status = '1';
        break;
         
        case '8' :
        if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
        $error = true;
        }
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
        $vat_id_status = '8';
        break;
         
        case '99' :
        case '98' :
        case '97' :
        case '96' :
        case '95' :
        case '94' :
        if (ACCOUNT_VAT_BLOCK_ERROR == 'true') {
        $error = true;
        }
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
        $vat_id_status = $validate_vatid;
        break;
         
         
        default :
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
         
        } //end switch
         
        } else {
        if ($customers_status) {
        $status = $customers_status;
        } else {
        $status = DEFAULT_CUSTOMERS_STATUS_ID_GUEST;
        }
        $vat_id_status = '';
        $error = false;
        }
        }
         
        if ($customers_id) {
        $customers_status_query = xtc_db_query("SELECT customers_status FROM ".TABLE_CUSTOMERS." WHERE customers_id = '".$customers_id."'");
        $customers_status_value = xtc_db_fetch_array($customers_status_query);
         
        if ($customers_status_value['customers_status'] != 0) {
        $status = $status;
        } else {
        $status = $customers_status_value['customers_status'];
        }
        }
         
        $this->vat_info = array (
        'status' => $status,
        'vat_id_status' => $vat_id_status,
        'error' => $error,
        'validate' => $validate_vatid
        );
         
        }
         
        //BOF - DokuMan - 2011-08-24 - check UstID live via SOAP at http://ec.europa.eu
        function validate_vatid($vat_id, $country_id) {
         
        // 0 = 'invalid'
        // 1 = 'valid'
        // 8 = 'unknown country'
        //94 = 'INVALID_INPUT' => 'The provided CountryCode is invalid or the VAT number is empty',
        //95 = 'SERVICE_UNAVAILABLE' => 'The SOAP service is unavailable, try again later',
        //96 = 'MS_UNAVAILABLE' => 'The Member State service is unavailable, try again later or with another Member State',
        //97 = 'TIMEOUT' => 'The Member State service could not be reached in time, try again later or with another Member State',
        //98 = 'SERVER_BUSY' => 'The service cannot process your request. Try again later.'
        //99 = 'no PHP5 SOAP support'
        $results = array (0 => '0',
        1 => '1',
        8 => '8',
        94 => '94',
        95 => '95',
        96 => '96',
        97 => '97',
        98 => '98',
        99 => '99');
         
        //check if PHP5 bulit-in SOAP class is available
        if (!class_exists('SoapClient')) {
        return $results[99]; //no PHP5 SOAP support
        }
         
        // Get country ISO code after $country_id
        $country_array = array ();
        $country_array = xtc_get_countriesList($country_id, true);
        $country_id = strtoupper($country_array['countries_iso_code_2']);
         
        //Check VAT for EU countries only
        switch ($country_id) {
        // EU countries
        case 'AT':
        case 'BE':
        case 'BG':
        case 'CY':
        case 'CZ':
        case 'DE':
        case 'DK':
        case 'EE':
        case 'GR':
        case 'ES':
        case 'FI':
        case 'FR':
        case 'GB':
        case 'HU':
        case 'IE':
        case 'IT':
        case 'LT':
        case 'LU':
        case 'LV':
        case 'MT':
        case 'NL':
        case 'PL':
        case 'PT':
        case 'RO':
        case 'SE':
        case 'SI':
        case 'SK':
        return $results[$this->checkVatID_EU($vat_id, $country_id)];
         
        default:
        return $results[8]; //unknown country
        }
        }
         
        function checkVatID_EU($vat_id, $country_id) {
         
        // Leerzeichen und sonderzeichen entfernen
        $remove = array (' ', '-', '/', '\\', '.', ':', ',');
        $vat_id = trim(chop($vat_id));
        $vat_id = str_replace($remove, '', $vat_id );
        $vatNumber = substr($vat_id, 2); // alles ab 2 Stellen der VAT (ohne Land)
         
        $client = new SoapClient(vat_validation::SOAP_WSDL_URL, array('connection_timeout' => 2));
        $params = array('countryCode' => $country_id, 'vatNumber' => $vatNumber);
         
        try {
        $result = $client->checkVat($params);
        } catch (SoapFault $e) {
        //enhanced error reporting
        $faultstring = $e->faultstring;
        $n = preg_match('/\{ \'([A-Z_]*)\' \}/', $faultstring, $matches);
        $result = $matches[1];
        $errors = array(
        'INVALID_INPUT' => '94',
        'SERVICE_UNAVAILABLE' => '95',
        'MS_UNAVAILABLE' => '96',
        'TIMEOUT' => '97',
        'SERVER_BUSY' => '98.'
        );
        return $errors[$result];
        }
         
        if (!$result->valid) {
        return 0; //invalid VAT
        } else {
        return 1; //valid VAT
        }
        return false;
         
        } // end checkVatID_EU
        //EOF - DokuMan - 2011-08-24 - check UstID live via SOAP at http://ec.europa.eu
        }
        ?>
    "return true;"  hilft da leider nix... aber ich hab zuwenig Ahnung von PHP um zu sehen wo da das problem liegt.

    Beim Vergleich mit WinMerge kann man sehen das an Zeile 68 / 193 eine geschweifte Klammer anders gesetzt ist... die wichtigen Änderungen sind dann im unteren Teil...
    vielleicht mag sich ja mal einer der Profis damit befassen ?

    LG

    samadai05

    • Neu im Forum
    • Beiträge: 1
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #58 am: 22. Februar 2014, 12:50:04
    Hallo zusammen,

    kann mir jemand sagen, wo die entsprechenden Dateien für den Fix mittlerweile zu finden sind? Die sourceforge Links in diesem Thread scheinen allesamt nichtmehr zu funktionieren.

    Hab jetzt genau das gleiche Problem mit HostEurope.

    Danke schonmal für Eure Antworten!

    Astwert

    • Neu im Forum
    • Beiträge: 34
    • Geschlecht:
    Re: Unbekannter Fehler beim Überprüfen der VAT-ID / USt-ID
    Antwort #59 am: 27. Mai 2014, 13:11:19
    Ich hatte auch diesen Fehler:

    SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl' : failed to load external entity http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

    Für SOAP wird Url_Fopen (serverseitig) benötigt. Bei meinem Provider musste ich diese Option zusätzlich buchen. Danach konnte ich unter httpd.Spezial (im Server Backend meines Providers) diese aktivieren und alles funzt.
    Ggf. muss man noch entsprechende Ports der Server-Firewall öffnen.

    Ich hoffe es hilft dem Ein oder Anderen.

    LG
    André

    Werbung / Banner buchen
    11 Antworten
    6675 Aufrufe
    23. Mai 2010, 17:52:42 von mikeSo
    7 Antworten
    6050 Aufrufe
    31. Januar 2011, 13:24:40 von itnorden
    2 Antworten
    2783 Aufrufe
    01. September 2012, 00:15:47 von Tȟatȟáŋka Íyotake
               
    anything