2010-04-08 17 views
5

Soy nuevo en soapclient, he intentado hacer un poco de estudio en línea y también intenté codificar en jabón, pero parece que esto todavía no funciona para mí, solo vagando por aquí puede señalar y quizás Dame un ejemplo de cómo puedo usar el jabón para obtener los comentarios del siguiente servidor web.Cómo hacer SoapClient en 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); 


?> 

¿Qué debo hacer para los próximos pasos para que pueda obtener la respuesta?

Respuesta

10

primero hay que instanciar la claseSoapClient, igual que lo hizo:

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


Entonces, usted tiene que llamada el método que desea utilizar - se pueden encontrar los nombres de los métodos en el WSDL.

Por ejemplo, podríamos llamamos un método llamado CelsiusToFahrenheit, en este servicio Web:

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


Ahora, el problema es saber lo que Paramaters deben pasar; y cómo ...

Si nos fijamos en el WSDL, verá esta porción:

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

lo que indica que estos métodos deben pasar una matriz, que contiene 1 artículo, lo que tendría "Celsius "como clave y el valor para convertir como valor.

Lo que significa que tendría que utilizar esta porción de código PHP:

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


La ejecución de esta llamada, y volcar el resultado:

var_dump($result); 

sale este tipo de salida:

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


Lo que significa que usted tiene que utilizar esto:

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

para obtener el valor resultante:

50 


Nota: la estructura de este resultado se puede encontrar en el archivo WSDL también, de Por supuesto, consulte la sección CelsiusToFahrenheitResponse.

+0

@Pascal MARTIN eres el superhombre ... gracias por el ejemplo ... ahora sé mucho mejor cómo funciona el soapclient. GRACIAS :) –

+0

De nada :-) Diviértase! –

+0

Estoy enfrentando algún problema para saop otra vez ... ¿no estoy seguro de si sabes lo que está pasando mal con mi código? Por favor clikc en este enlace para el problema http://stackoverflow.com/questions/2619519/soap-client-not-working-in-php gracias –

Cuestiones relacionadas