2010-04-08 17 views
5

Sono nuovo in soapclient, ho provato a fare qualche studio online e ho anche provato a scrivere sul sapone, ma sembra che questo non funzioni ancora per me, solo vagabondare chiunque qui può indicare e forse dammi un esempio come posso usare effettivamente il soapclint per ottenere il feedback dal seguente server web?Come fare SoapClient su 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); 


?> 

Cosa devo fare per i passaggi successivi in ​​modo che possa ottenere la risposta ??

risposta

10

Dovete prima instanciate il SoapClient classe, come hai fatto:

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


Poi, si deve chiamata al metodo che si desidera utilizzare - i nomi metodi possono essere trovati nel WSDL.

Per esempio, potremmo chiamiamo un metodo chiamato CelsiusToFahrenheit, in questo WebService:

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


Ora, il problema è quello di sapere che paramaters dovrebbero essere passati; e come ...

Se si guarda il WSDL, vedrete questa parte:

<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> 

Il che indica che il metodo dovrebbe essere passato un array, contenente 1 elemento, che avrebbe "Celsius "come chiave e il valore da convertire come valore.

Il che significa che dovreste usare questa porzione di codice PHP:

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


L'esecuzione di questa chiamata, e il dumping il risultato:

var_dump($result); 

esce questo tipo di uscita:

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


Il che significa che si deve usare questo:

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

per ottenere il valore risultante:

50 


Nota: la struttura di questo risultato può essere trovato nel file WSDL troppo, di corso - vedere la parte CelsiusToFahrenheitResponse.

+0

@Pascal MARTIN sei il superuomo ... grazie per l'esempio ... ora so molto meglio come funziona il sapone. GRAZIE :) –

+0

Prego :-) Buon divertimento! –

+0

Affronto di nuovo un problema per il saop di nuovo ... non sono sicuro che tu sappia cosa sta andando storto con il mio codice? Si prega di clikc su questo collegamento per il problema http://stackoverflow.com/questions/2619519/soap-client-not-working-in-php ringraziamenti –

Problemi correlati