Rene: SOAP-Request mit curl

Beitrag lesen

Hi, für den Online-Shop eines Kunden soll ich eine Bonitätsprüfung per Webservice einbinden. Mit dem Tool soapUI funktionieren die Abfragen schon ganz gut, ich erhalte eine Antwort in XML.
Die Bonitätsprüfung im Online-Shop soll per PHP eingebunden werden. Die Abfragen werden mittels curl durchgeführt. Nur bekomme ich immer einen Fehler 400 ausgegeben, was laut Webservice-Doku "INVALID_REQUEST - Faulty enquiry. One or more Elements are faulty." bedeutet, also eine fehlerhafte Abfrage.
Ich habe den XML-Code für die Abfrage aus soapUI 1 zu 1 kopiert und in der Variablen $body gespeichert.

$body = '<?xml version="1.0" encoding="utf-8"?>  
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v001="http://www.deltavista.com/dspone/ordercheck-if/V001">  
   <soapenv:Header>  
...  
   </soapenv:Header>  
   <soapenv:Body>  
...  
   </soapenv:Body>  
</soapenv:Envelope>';

Den Header habe ich ebenfalls aus soapUI kopiert, nur den User-Agent habe ich angepasst.

$headers = array("POST https://dspone.deltavista.com/dspone/services/OrderCheckService HTTP/1.1\n",  
"Accept-Encoding: gzip,deflate\n",  
"Content-Type: text/xml;charset=UTF-8\n",  
"SOAPAction: \"urn:orderCheck\"\n",  
"User-Agent: ".$_SERVER['HTTP_USER_AGENT']."\n",  
"Host: dspone.deltavista.com\n");

Und danach folgen die curl-Anweisungen

//Die Session initialisieren  
$ch = curl_init();  
  
//Session Optionen setzen  
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
curl_setopt($ch, CURLOPT_URL, "https://dspone.deltavista.com/dspone/services/OrderCheckService");  
curl_setopt($ch, CURLOPT_HEADER, TRUE);  
curl_setopt($ch, CURLOPT_POST, TRUE);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  
echo $code;  
//Session beenden  
curl_close($ch);  

Und jetzt komme ich nicht mehr weiter. Am XML-Code für die Abfrage kann es doch eigentlich nicht liegen, oder? Bleiben also nur die curl-Anweisungen. Ich habe etliche Optionen (siehe php.net) ausprobiert, aber leider keinen Erfolg gehabt. Hab ich vielleicht was grundsätzliches übersehen oder nicht verstanden? Ist nämlich mein erster Webservice, den ich einbinde.