2012-09-10 17 views
5

Wie wähle ich den Port in SOAP PHP? Ich entwickle eine Reisebuchungswebsite mit TravelPort als GDS. Ich habe gerade angefangen, ihre WSDLs zu betrachten, und ich versuche, sie zu verwenden, um ihren Server mit PHP aufzurufen. Ich kann das nicht machen. Ich weiß, dass der Server funktioniert, denn wenn ich eine Anfrage erstellen und über cURL sende, erhalte ich die Antwort, die ich erwarte, aber indem ich ihre eigene sample code anwende (Vertraulichkeitsvereinbarung akzeptiere, und dann auf "Beispielcode" klicke)), Ich gehe nirgendwohin.Wie Port-Namen in PHP WSDL angeben

Mit Blick auf die Anfrage generiert das SOAP PHP-Modul, ich denke, das Problem ist, dass es die falsche Funktion verwendet. Ich glaube nicht, dass ich die ganze WSDL offen legen kann, aber hier ist ein Auszug:

<!-- Service --> 

<service name="AirService"> 
    <port name="AirRepriceSearchPort" 
      binding="tns:AirRepriceSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

    <port name="AirScheduleSearchPort" 
      binding="tns:AirScheduleSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

    <port name="AirLowFareSearchPort" 
      binding="tns:AirLowFareSearchBinding"> 
     <soap:address 
       location="http://localhost:8080/kestrel/AirService" /> 
    </port> 

Anscheinend ist das Skript generiert immer die Anforderung basierend auf dem AirReprice Modul anstelle des LowFareSearch Modul. Wenn ich die WSDL bearbeite und "AirLowFareSearchPort" als erstes Element einfüge, funktioniert die Anfrage tatsächlich.

Ich habe versucht, die folgenden:

  • angeben, welche Aktion durch nehmen $client->AirLowFareSearchPort($data) verwenden, aber es ist keine gültige Funktion;

  • Ich habe alle Funktionen von $client->__getfunctions() mit:

: „service“

[0]=> 
string(48) "AirRepriceRsp service(AirRepriceReq $parameters)" 
[1]=> 
string(56) "ScheduleSearchRsp service(ScheduleSearchReq $parameters)" 
[2]=> 
string(54) "LowFareSearchRsp service(LowFareSearchReq $parameters)" 
[3]=> 
string(66) "LowFareSearchAsynchRsp service(LowFareSearchAsynchReq $parameters)" 

Es ist wie die einzige „Funktion“ aussieht, ist aber ich nicht, wo ich würde das Zeug in die Klammern setzen.

Ich habe keine anderen Ideen. Hoffentlich kannst du helfen!

UPDATE:

ich gefunden habe this article, wo es das Problem aussetzt. Es bezieht sich jedoch auf ihr eigenes Modul namens PHP Web Services. Ich muss dasselbe mit SOAP machen. Ich brauche Ihre Hilfe wirklich ..

Antwort

3

Sie sollten in der Lage sein, den Endpunkt manuell mit __setLocation festzulegen, sobald Sie die WSDL geladen haben.

Beispiel:

$client = new SoapClient('http://localhost/supplied_path?wsdl'); 
$client->__setLocation('http://localhost:8080/kestrel/AirService'); 

print_r($client->__getfunctions());