2009-11-01 28 views
6

¿Hay alguna forma de generar un PHP Soap Client a partir de un archivo WSDL?¿Cómo generar un código de cliente PHP soap?

quiero decir algo así como wsdl.exe o svcutil.exe en .NET, que genera código para una clase que puede ser el cliente de un servicio, no algo como:

$WSDL  = new SOAP_WSDL($wsdl_url); 
$client = $WSDL->getProxy(); 

mi problema es que quiero que el cliente PHP para poder trabajar con un servicio, incluso cuando ese servicio no expone su WSDL.

Respuesta

8

Puede utilizar el [generateProxyCode] proporcionado en el paquete (http://pear.php.net/reference/SOAP-0.9.4/SOAP/SOAP_WSDL.html#methodgenerateProxyCode) Método SOAP_WSDL método en su lugar y guardarlo en un archivo:

$WSDL  = new SOAP_WSDL($wsdl_url); 
$php  = $WSDL->generateProxyCode(); 
file_put_contents('wsdl_proxy.php', '<?php ' . $php . ' ?>'); 

require 'wsdl_proxy.php'; 
+4

dos notas sobre el código de ejemplo: debe incluir la clase PEAR con require_once ("SOAP/WSDL.php "); y el método no es $ WSDL-> getProxyCode(); pero $ WSDL-> generateProxyCode(); – Pisu

3

sólo para ayudar a cualquier otra persona que se encuentra con este post y piensa "cómo diablos, ¿trabajo con este SOAP_WSDL? " (Como yo)

Abra la línea de comandos y llegar a su directorio php (He instalado XAMPP Lite en este ejemplo)

Una vez en el directorio php me encontré con el guión pear.bat. Después de esto yo era capaz de escribir la siguiente línea a través de cmd

-V pera (proporciona la versión de su instalación)

lista de pera

Si escribe lo anterior y no ve lo que necesita de SOAP hacer lo siguiente desde la línea de comando:

  • pera instalar Net_DIME-1.0.1

  • pera instalar Mail_Mime-1.5.2

  • pera instalar Mail-1.2.0b1

  • pera instalación de SOAP-0.12.0

Ahora después de instalar estos paquetes y hacen otra "lista de pera" debería ver la lista de SOAP.

Si es así, puede incluir una referencia a los archivos php arrastrados dentro del directorio pear en SOAP.

Un ejemplo de esta ruta podría ser C: \ xampplite \ php \ PEAR \ JABÓN

7

Hay una aplicación para esto, se llama wsdl2phpgenerator:

http://code.google.com/p/wsdl2phpgenerator/

ejecutarla en un WSDL archivo y generará clases basadas en los servicios WSDL.

+0

wsdl2phpgenerator le dará una excelente ventaja inicial – jjwdesign

+1

Para obtener la última versión, vaya al nuevo hogar de wsdl2phpgenerator, en github, https://github.com/walle/wsdl2phpgenerator También hay una bifurcación notable en https://github.com/reload/wsdl2phpgenerator que intentan integrar solicitudes de extracción que realmente no he tenido tiempo de verificar y merge –

0

He usado wsdl2php, una herramienta PEAR simple; parece que el proyecto está muerto, pero todavía se puede descargar la versión más reciente aquí: http://sourceforge.net/projects/wsdl2php/

Se requiere un equipo de desarrollo de PHP 5 y pera, y hay que instalarlo con este comando PERA:

sudo pear install wsdl2php-0.2.1-pear.tgz 

Después de esto, se puede generar el archivo en PHP clases con este comando:

wsdl2php <WSDL_URL> 

genera una clase principal que se extiende SoapClient, y muchos otros clasificada que representan peticiones, respuestas y objetos complejos, por lo que es muy útil cuando desarrollando en un IDE con "intellisense" como NetBeans.

0

He intentado utilizar everething que se enumeran aquí.

encontrado la otra elección: https://github.com/mikaelcom/WsdlToPhp

Pluses en comparition con anterior:

  • No hay dependencias. Ambos para generador y cliente creado.

  • Las clases para en y fuera parámetros.

  • Ejemplos de uso para cliente creado. Por supuesto, no es tan importante. Sin embargo, algunas veces muy útiles

  • Menos de código (En comparación con SOAP_WSDL)

Desventajas:

  • respuesta y cualquier subtipo complejo se envuelven a otro objeto que contiene información técnica.
+0

Gracias por sus comentarios detallados. ¿Podría enviarme más detalles sobre su comentario? La respuesta y cualquier subtipo complejo están envueltos en otro objeto que contenga información técnica. "en [email protected], sería muy apreciado, Thks –

+0

En realidad, no es correcto. En .NET puede obtener los objetos exactamente igual que en el servicio. Pero en mi caso cuando recibo respuesta en PHP desde el servicio .NET, Tengo envoltorios "adicionales". En realidad, se presentan en WSDL, pero .NET, de alguna manera, "sabe" que algunas clases son solo para necesidades técnicas y las elimina en el resultado. –

+0

Gracias, si tuviera algunos ejemplos sería genial, de lo contrario buscaré si puede evitarse. –