2010-04-08 4 views
5

Je suis nouveau dans soapclient, j'ai essayé de faire des études en ligne et j'ai aussi essayé de coder sur du savon, mais il semble que cela ne fonctionne toujours pas pour moi, juste errant donnez-moi un exemple comment puis-je utiliser le soapclint pour obtenir les commentaires du serveur web suivant? Que dois-je faire pour les prochaines étapes afin que je puisse obtenir la réponse?Comment faire SoapClient sur 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); 


?> 

Que dois-je faire pour les prochaines étapes?

Répondre

10

Vous devez d'abord instancier SoapClient classe, comme vous l'avez fait:

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


, vous devez alors appeler la méthode que vous souhaitez utiliser - les noms de méthodes peuvent être trouvés dans le WSDL.

Par exemple, nous pourrions appeler une méthode appelée CelsiusToFahrenheit, dans ce WebService:

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


Maintenant, le problème est de savoir qui paramaters devraient être transmis; et comment ...

Si vous regardez le WSDL, vous verrez cette partie:

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

qui indique que ces méthodes doivent être passés un tableau, contenant 1 élément, qui aurait "Celsius "comme clé, et la valeur à convertir en valeur.

Ce qui signifie que vous auriez à utiliser cette partie du code PHP:

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


exécution de cet appel, et le dumping le résultat:

var_dump($result); 

sort ce genre de sortie:

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


Ce qui signifie que vous devez utiliser:

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

Pour obtenir la valeur résultante:

50 


Note: la structure de ce résultat se trouve dans le fichier WSDL aussi, Bien sûr - voir la partie CelsiusToFahrenheitResponse.

+0

@Pascal MARTIN vous êtes le surhomme ... merci pour l'exemple ... maintenant je sais beaucoup mieux comment fonctionne le soapclient. MERCI :) –

+0

Vous êtes les bienvenus :-) Amusez-vous! –

+0

Je suis encore confronté à un problème pour saop .. je ne sais pas si vous savez ce qui ne va pas avec mon code? S'il vous plaît cliquer sur ce lien pour le problème http://stackoverflow.com/questions/2619519/soap-client-not-working-in-php merci –

Questions connexes