Hi,
für einen Kunden wollen wir einen Webservice einrichten. Der Kunde schickt uns Daten im folgenden Format:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelInvCountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" TimeStamp="2009-10-14T17:17:45" Target="Production" Version="1">
<POS>
<Source AgentDutyCode="agentdutycode" AgentSine="agentsine">
<RequestorID ID="199976"/>
</Source>
</POS>
<Inventories>
<Inventory>
<StatusApplicationControl Start="2009-10-14" End="2009-11-10" InvTypeCode="140759" />
<InvCounts><InvCount Count="60" CountType="1" /></InvCounts>
</Inventory>
<Inventory>
<StatusApplicationControl Start="2009-11-10" End="2009-11-11" InvTypeCode="140759" />
<InvCounts><InvCount Count="0" CountType="1" /></InvCounts>
</Inventory>
</Inventories>
</OTA_HotelInvCountNotifRQ>
Wie man erkennen kann, wird ein eigener Namespace "http://www.opentravel.org/OTA/2003/05" verwendet.
Der Server sieht derzeit nur so aus:
<?php
function OTA_HotelInvCountNotifRQ($test) {
return $test;
}
$server = new SoapServer(NULL, array('uri' => "http://www.opentravel.org/OTA/2003/05"));
$server->addFunction('OTA_HotelInvCountNotifRQ');
$server->handle();
?>
Der XML-Code wird mittels curl an den Server gesendet:
...
$result = curl_exec($ch);
if($result === false){
echo '<p>Fehler: '.curl_error($ch);
} else {
echo '<p>Ergebnis:'. $result;
}
Ausgegeben wird folgender Fehler:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:VersionMismatch</faultcode><faultstring>Wrong Version</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
Der curl-Request an sich funktioniert demnach. Nur scheinen Client und Server im Namespace nicht übereinzustimmen. Was muss ich im Server-Skript angeben, damit es keinen Versions-Konflikt mehr gibt? Oder bin ich komplett auf der falschen Fährte?
Und wie kann ich den Request mit der Funktion OTA_HotelInvCountNotifRQ auswerten? Ich benötige z. B. auch die Angabe "RequestorID".