Para ahorrar tiempo a todos los que van a crear un servicio web teniendo que conectar desde un cliente en PHP que no utiliza el WSDL. Como no se utiliza el WSDL del servidor, la estructura de la comunicación SOAP la establece el cliente, en este caso el cliente en PHP.
El problema radica en varios puntos:
- Saber cual es el location del servicio y el uri para pasarlo como parametros a la clase de PHP
- Saber como es la estructura del mensaje SOAP del cliente PHP y aplicarla al wsdl para definir los tipos
Os cuento de que va todo esto:
- Vamos a explicar el punto 1 que es muy sencillo con un ejemplo:
- La estructura de los mensajes SOAP en PHP sin utiilizar el WSDL establece ciertas etiquetas para el paso de parametros en las consultas y una etiqueta en el resultado que se devuelve.
- Los parametros en PHP se etiquetan con “param0“, “param1″, … y hay que definirlos en el wsdl como un tipo.
- Los resultados también se etiquetan mediante “return“.
- Los metodos que no tienen parametros hay que definirlos de la siguiente forma:
<xsd:element name="version" type="xsd:string" nillable="true" />Este sería un ejemplo de definición de tipos:
<?php
$client = new SoapClient(null, array('location' => "http://servicioweb.tundidor.com/proyecto/clase",
'uri' => "http://www.tundidor.com/uriWSDL",
'trace' => 1));
$result = $client->__soapCall("version", array());
echo $result;
?>
<wsdl:types><xsd:schema targetNamespace="http://www.tundidor.com/uriWSDL"><xsd:complexType name="texto"><xsd:sequence maxOccurs="1" minOccurs="1"><xsd:element name="param0" type="xsd:string" /></xsd:sequence></xsd:complexType><xsd:complexType name="respuesta"><xsd:sequence maxOccurs="1" minOccurs="1"><xsd:element name="return" type="xsd:string" /></xsd:sequence></xsd:complexType><xsd:element name="esquema" type="tns:texto" /><xsd:element name="esquemaResponse" type="tns:respuesta" /><xsd:element name="busca" type="tns:texto" /><xsd:element name="buscaResponse" type="tns:respuesta" /><xsd:element name="version" type="xsd:string" nillable="true" /><xsd:element name="versionResponse" type="tns:respuesta" /><xsd:element name="ejemplo" type="xsd:string" nillable="true" /><xsd:element name="ejemploResponse" type="tns:respuesta" /></xsd:schema></wsdl:types>
Espero que con estás simples aclaraciones os ahorre tiempo en vuestros desarrollos.
Saludos

Comentarios
Dejar un comentario Trackback