2010-04-08 17 views
5

Ich bin neu in soapclient, ich habe versucht, einige Studie online zu tun und versuchte auch auf Seife zu programmieren, aber das scheint immer noch nicht funktioniert zu mir, nur wandern jemand hier kann darauf hinweisen und vielleicht gib mir ein paar beispiele wie kann ich die soapclint benutzen um das feedback vom folgenden webserver zu bekommen?Wie SoapClient auf PHP

POST /webservices/tempconvert.asmx HTTP/1.1 
Host: www.w3schools.com 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 
SOAPAction: "http://tempuri.org/CelsiusToFahrenheit" 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <CelsiusToFahrenheit xmlns="http://tempuri.org/"> 
     <Celsius>string</Celsius> 
    </CelsiusToFahrenheit> 
    </soap:Body> 
</soap:Envelope> 

HTTP/1.1 200 OK 
Content-Type: text/xml; charset=utf-8 
Content-Length: length 

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
    <CelsiusToFahrenheitResponse xmlns="http://tempuri.org/"> 
     <CelsiusToFahrenheitResult>string</CelsiusToFahrenheitResult> 
    </CelsiusToFahrenheitResponse> 
    </soap:Body> 
</soap:Envelope> 



<?php 
$url = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"; 
$client = new SoapClient($url); 


?> 

Was soll ich für die nächsten Schritte tun, damit ich die Antwort bekommen kann ??

Antwort

10

Sie zuerst Instanciate der SoapClient Klasse haben, wie Sie haben:

$url = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"; 
$client = new SoapClient($url); 


Dann müssen Sie Aufruf der Methode, die Sie verwenden möchten - die Methoden Namen gefunden werden kann in der WSDL.

Zum Beispiel könnten wir ein Verfahren CelsiusToFahrenheit, in diesem WebService genannt nennen:

$result = $client->CelsiusToFahrenheit(/* PARAMETERS HERE */); 


Nun, das Problem zu wissen, ist der Paramater geben werden soll; und wie ...

Wenn man sich die WSDL anschauen, werden Sie diesen Teil sehen:

<s:element name="CelsiusToFahrenheit"> 
    <s:complexType> 
    <s:sequence> 
     <s:element minOccurs="0" maxOccurs="1" name="Celsius" type="s:string" /> 
    </s:sequence> 
    </s:complexType> 
</s:element> 

was darauf hindeutet, dass diese Methoden sollte ein Array übergeben werden, die 1 Punkt, die haben würde "Celsius "als Schlüssel und der Wert, der als Wert konvertiert werden soll.

Was bedeutet, würden Sie diesen Teil von PHP-Code verwenden müssen:

$result = $client->CelsiusToFahrenheit(array('Celsius' => '10')); 


diesen Aufruf durchführen, und Dumping das Ergebnis:

var_dump($result); 

aus Ruft diese Art der Ausgabe:

object(stdClass)#2 (1) { 
    ["CelsiusToFahrenheitResult"]=> 
    string(2) "50" 
} 


Was bedeutet, dass Sie diese verwenden müssen:

echo $result->CelsiusToFahrenheitResult . "\n"; 

Um den resultierenden Wert:

50 


Hinweis: Die Struktur dieses Ergebnisses in der WSDL-Datei gefunden werden, von Natürlich - siehe den Teil.

+0

@Pascal MARTIN du bist der supermann ... danke für das beispiel ... jetzt weiß ich viel besser wie die soapclient funktionieren. DANKE :) –

+0

Gern geschehen :-) Viel Spaß! –

+0

Ich sehe wieder ein Problem für Saop .. nicht sicher, ob Sie wissen, was mit meinem Code falsch läuft? Bitte klicken Sie auf diesen Link für das Problem http://stackoverflow.com/questions/2619519/soap-client-not-working-in-php danke –