IXR Library und SSL


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Sprint

Erfahrenes Mitglied
#1
Hallo zusammen,

da wir sehr viel mit ausländischen Firmen zu tun haben, wurden deren UID Nummern immer über die XML-RPC Schnittstelle vom BZSt. abgefragt. Das geht aber seit heute nicht mehr. In einem Hinweis auf der Seite heißt es lapidar "Bitte stellen Sie Ihre Abfragen ab dem genannten Zeitpunkt nur noch über HTTPS (TLS1.2)".

Unsere Seite ist aber schon seit Jahren abgesichert und auch die Schnittstelle wurde über https:// Aufrufe angesprochen!?

In der SSL-bezogenen Funktion in der Lib kann man zwar separate Cert, CA und Key Files angeben und die bekäme ich auch, allerdings widerstrebt es mir, das Keyfile selbst auf den Server zu legen. Dann kann auch noch ein Kennwort zum Entsperren des privateKey angegeben werden. Nur wo kriege ich das her??? Und könnte das wirklich helfen?

Hat jemand damit schon Erfahrungen und kann mir sagen, wie ich die wieder zum Laufen kriege?

Vielen Dank schon mal im Voraus,
Sprint

Edit: Bei der Schnittstellenbeschreibung ist ein Beispiel für eine Abfrage über HTTP:

HTML:
https://evatr.bff-online.de/evatrRPC?UstId_1=DE123456789&UstId_2=AB1234567890 
&Firmenname=Firmenname einschl. Rechtsform&Ort=Ort der Firma&PLZ=12345&Strasse=Strasse der Firma 
&Druck=nein
Wenn ich das über den Browser abschicke, bekomme ich korrekt einen XML String als Antwort.

Wenn ich das ganze über PHP laufen lasse:
PHP:
$client = new IXR_Client('https://evatr.bff-online.de/');
if (!$client->query('evatrRPC',
                    $duid['uid'],
                    $uiddaten['uid'],
                    $sende_firmenname,
                    $uiddaten['ort'],
                    $uiddaten['plz'],
                    $uiddaten['strasse'],
                    'nein'))
    $antwort = $client->getErrorCode().":".$client->getErrorMessage();
else
    $antwort = $client->getResponse();
bekomme ich die Meldung "-32300:transport error - could not open socket".

Wenn es über HTTP geht, sollte das Problem doch eher in der Library zu finden sein, oder? Damit könnte ich mir den o.g. Weg über die Zertifikatdateien usw. wohl sparen, denn die sind ja bei einem Aufruf über den Browser ja definitiv nicht da.

Gibt es denn eine Möglichkeit, ohne die IXR Library den Aufruf zu erstellen und die Antwort abzufangen?
 
Zuletzt bearbeitet:

Sprint

Erfahrenes Mitglied
#5
Kein Problem.
PHP:
$data = array(
    'UstId_1'=>$duid['uid'],
    'UstId_2'=>$uiddaten['uid'],
    'Firmenname'=>$sende_firmenname,
    'Ort'=>$uiddaten['ort'],
    'PLZ'=>$uiddaten['plz'],
    'Strasse'=>$uiddaten['strasse'],
    'Druck'=>'nein'
);

$string = http_build_query($data, '&');

$antwort = urlRequest('https://evatr.bff-online.de/evatrRPC', 'Mozilla/5.0 (X11; Ubuntu; Linux x86; rv:28.0) Gecko/20100101 Firefox/28.0', true, '', $string);

function urlRequest($url, $setUserAgent=false, $usePost=false, $additionalHeaders='', $content='') {
    return file_get_contents($url, false, stream_context_create(array('http' => array('method' => (($usePost) ? 'POST' : 'GET'), 'header' => "User-Agent: ".(($setUserAgent) ? $setUserAgent : $_SERVER['HTTP_USER_AGENT'])."\r\n"."Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n".$additionalHeaders, 'content' => $content))));
}
So läuft es bei mir genauso wie vor der Umstellung. Wenn es bei dir auch um das BZSt. geht, paß bei den Statuscodes auf. die haben sich vor einigen Monaten nämlich etwas geändert.
 
#6
Kein Problem.

So läuft es bei mir genauso wie vor der Umstellung. Wenn es bei dir auch um das BZSt. geht, paß bei den Statuscodes auf. die haben sich vor einigen Monaten nämlich etwas geändert.
Super, vielen Dank. So funktioniert es. Nur leider bekommt man als Antwort den ganzen String zurück. Wie hast Du denn da den ErrorCode einzeln ausgelesen?
 

Sprint

Erfahrenes Mitglied
#7
Wenn du die Abfragen als qualifizierte Abfragen aufheben willst, mußt du sowieso den ganzen String speichern. Aber das ist ja nur ein ganz einfacher XML Text. Der muß nur noch geparst werden und schon hast du ein Array mit alles Werten.

Den Status allein wirst du vermutlich nicht bekommen. Wird dir aber auch nicht viel helfen, da meines Wissens nach nur die komplette qualifizierte Abfrage mit ALLEN Daten auch von den Finanzbehörden anerkannt wird. Wir erleben hier von unseren Kunden diesbezüglich Sachen, die massive Zweifel an dem generellen Vorhandensein von Intelligenz auf diesem Planeten aufkommen lassen. ;)
 

guenter024

Erfahrenes Mitglied
#8
So löse ich die XML sowie die Fehlercodes:

PHP:
$msg = '';
if(!($res = curl_exec($ch))) {

    echo 'Fehler bei der Auswertung der Daten in Curl'; // siehe curl_error($ch)

    curl_close($ch);

    die();

}

curl_close($ch);


// Lade XML-Daten

if(!$xml = simplexml_load_string($res))

{

    foreach (libxml_get_errors() as $error) {

        $xml_errors .= $error."\r\n";

    }


    libxml_clear_errors();

    die('Fehler beim Lesen der XML');


}

else

{

    $data = array();

    $i = 1;

    foreach($xml as $param)

    {

        foreach($param->value->array->data as $value) {

            $key = '';

            $val = '';

            foreach($value as $val)

            {

                if(is_int($i/2)) {

                    switch($i) {

                        case 2:

                        $data['UstId_1'] = $val->string;

                        break;


                        case 4:

                        $data['ErrorCode'] = $val->string;

                        break;


                        case 6:

                        $data['UstId_2'] = $val->string;

                        break;


                        case 12:

                        $data['Ort'] = $val->string;

                        break;


                        case 14:

                        $data['Datum'] = $val->string;

                        break;


                        case 16:

                        $data['PLZ'] = $val->string;

                        break;


                        case 20:

                        $data['Uhrzeit'] = $val->string;

                        break;


                        case 24:

                        $data['Gueltig_ab'] = $val->string;

                        break;


                        case 26:

                        $data['Gueltig_bis'] = $val->string;

                        break;


                        case 28:

                        $data['Strasse'] = $val->string;

                        break;


                        case 30:

                        $data['Firmenname'] = $val->string;

                        break;


                    }

                }


                $i++;

            }

        }

    }


    if(isset($data['UstId_2']) && $data['UstId_2'] != '') $msg .= 'Ergebnis der Prüfung für USt-IdNr. '.htmlspecialchars($data['UstId_2']).':<br>';


    if(isset($data['ErrorCode']) && $data['ErrorCode'] != '')

    {

        define('ERROR_CODE_200', 'Die angefragte USt-IdNr. ist gültig.');

        define('ERROR_CODE_201', 'Die angefragte USt-IdNr. ist ungültig. ');

        define('ERROR_CODE_202', 'Die angefragte USt-IdNr. ist ungültig. Sie ist nicht in der Unternehmerdatei des betreffenden EU-Mitgliedstaates registriert. Hinweis: Ihr Geschäftspartner kann seine gültige USt-IdNr. bei der für ihn zuständigen Finanzbehörde in Erfahrung bringen. Möglicherweise muss er einen Antrag stellen, damit seine USt-IdNr. in die Datenbank aufgenommen wird. ');

        define('ERROR_CODE_203', 'Die angefragte USt-IdNr. ist ungültig. Sie ist erst ab dem '.htmlspecialchars($data['Gueltig_ab']).' gültig. ');

        define('ERROR_CODE_204', 'Die angefragte USt-IdNr. ist ungültig. Sie war im Zeitraum von '.htmlspecialchars($data['Gueltig_ab']).' bis '.htmlspecialchars($data['Gueltig_bis']).' gültig. ');

        define('ERROR_CODE_205', 'Ihre Anfrage kann derzeit durch den angefragten EU-Mitgliedstaat oder aus anderen Gründen nicht beantwortet werden. Bitte versuchen Sie es später noch einmal. Bei wiederholten Problemen wenden Sie sich bitte an das Bundeszentralamt für Steuern - Dienstsitz Saarlouis. ');

        define('ERROR_CODE_206', 'Ihre deutsche USt-IdNr. ist ungültig. Eine Bestätigungsanfrage ist daher nicht möglich. Den Grund hierfür können Sie beim Bundeszentralamt für Steuern - Dienstsitz Saarlouis - erfragen. ');

        define('ERROR_CODE_207', 'Ihnen wurde die deutsche USt-IdNr. ausschliesslich zu Zwecken der Besteuerung des innergemeinschaftlichen Erwerbs erteilt. Sie sind somit nicht berechtigt, Bestätigungsanfragen zu stellen. ');

        define('ERROR_CODE_208', 'Für die von Ihnen angefragte USt-IdNr. läuft gerade eine Anfrage von einem anderen Nutzer. Eine Bearbeitung ist daher nicht möglich. Bitte versuchen Sie es später noch einmal. ');

        define('ERROR_CODE_209', 'Die angefragte USt-IdNr. ist ungültig. Sie entspricht nicht dem Aufbau der für diesen EU-Mitgliedstaat gilt.');

        define('ERROR_CODE_210', 'Die angefragte USt-IdNr. ist ungültig. Sie entspricht nicht den Prüfziffernregeln die für diesen EU-Mitgliedstaat gelten. ');

        define('ERROR_CODE_211', 'Die angefragte USt-IdNr. ist ungültig. Sie enthält unzulässige Zeichen.');

        define('ERROR_CODE_212', 'Die angefragte USt-IdNr. ist ungültig. Sie enthält ein unzulässiges Länderkennzeichen. ');

        define('ERROR_CODE_213', 'Die Abfrage einer deutschen USt-IdNr. ist nicht möglich. ');

        define('ERROR_CODE_214', 'Ihre deutsche USt-IdNr. ist fehlerhaft. Sie beginnt mit DE gefolgt von 9 Ziffern. ');

        define('ERROR_CODE_215', 'Ihre Anfrage enthält nicht alle notwendigen Angaben für eine einfache Bestätigungsanfrage (Ihre deutsche USt-IdNr. und die ausl. USt-IdNr.). Ihre Anfrage kann deshalb nicht bearbeitet werden. ');

        define('ERROR_CODE_216', 'Ihre Anfrage enthält nicht alle notwendigen Angaben für eine qualifizierte Bestätigungsanfrage (Ihre deutsche USt-IdNr., die ausl. USt-IdNr., Firmenname einschl. Rechtsform und Ort). Es wurde eine einfache Bestätigungsanfrage durchgeführt mit folgenden Ergebnis: Die angefragte USt-IdNr. ist gültig. ');

        define('ERROR_CODE_217', 'Bei der Verarbeitung der Daten aus dem angefragten EU-Mitgliedstaat ist ein Fehler aufgetreten. Ihre Anfrage kann deshalb nicht bearbeitet werden.');

        define('ERROR_CODE_218', 'Eine qualifizierte Bestätigung ist zur Zeit nicht möglich. Es wurde eine einfache Bestätigungsanfrage mit folgendem Ergebnis durchgeführt: Die angefragte USt-IdNr. ist gültig. ');

        define('ERROR_CODE_219', 'Bei der Durchführung der qualifizierten Bestätigungsanfrage ist ein Fehler aufgetreten. Es wurde eine einfache Bestätigungsanfrage mit folgendem Ergebnis durchgeführt: Die angefragte USt-IdNr. ist gültig. ');

        define('ERROR_CODE_220', 'Bei der Anforderung der amtlichen Bestätigungsmitteilung ist ein Fehler aufgetreten. Sie werden kein Schreiben erhalten. ');

        define('ERROR_CODE_999', 'Eine Bearbeitung Ihrer Anfrage ist zurzeit nicht möglich. Bitte versuchen Sie es später noch einmal. ');


        switch ($data['ErrorCode']) {

            case '200':

            $msg .= ERROR_CODE_200;

            break;

            case '201':

            $msg .= ERROR_CODE_201;

            break;

            case '202':

            $msg .= ERROR_CODE_202;

            break;

            case '203':

            $msg .= ERROR_CODE_203;

            break;

            case '204':

            $msg .= ERROR_CODE_204;

            break;

            case '205':

            $msg .= ERROR_CODE_205;

            break;

            case '206':

            $msg .= ERROR_CODE_206;

            break;

            case '207':

            $msg .= ERROR_CODE_207;

            break;

            case '208':

            $msg .= ERROR_CODE_208;

            break;

            case '209':

            $msg .= ERROR_CODE_209;

            break;

            case '210':

            $msg .= ERROR_CODE_210;

            break;

            case '211':

            $msg .= ERROR_CODE_211;

            break;

            case '212':

            $msg .= ERROR_CODE_212;

            break;

            case '213':

            $msg .= ERROR_CODE_213;

            break;

            case '214':

            $msg .= ERROR_CODE_214;

            break;

            case '215':

            $msg .= ERROR_CODE_215;

            break;

            case '216':

            $msg .= ERROR_CODE_216;

            break;

            case '217':

            $msg .= ERROR_CODE_217;

            break;

            case '218':

            $msg .= ERROR_CODE_218;

            break;

            case '219':

            $msg .= ERROR_CODE_219;

            break;

            case '220':

            $msg .= ERROR_CODE_220;

            break;

            case '999':

            $msg .= ERROR_CODE_999;

            break;

        }

    }


    $msg .= '<br><br>Prüfung durchgeführt am '.htmlspecialchars($data['Datum']). ' um '.htmlspecialchars($data['Uhrzeit']). '<br>';

}


echo $msg;
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…