2009-11-01 25 views
6

C'è un modo per generare un Soap Client PHP da un file WSDL?Come generare un codice client soap PHP?

voglio dire qualcosa come wsdl.exe o svcutil.exe in .net, che genera il codice per una classe che può essere il cliente di un servizio, non qualcosa di simile:

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

Il mio problema è che io voglio il client PHP essere in grado di lavorare con un servizio, anche quando tale servizio non espone il suo WSDL.

risposta

8

È possibile utilizzare il fornito nella confezione (http://pear.php.net/reference/SOAP-0.9.4/SOAP/SOAP_WSDL.html#methodgenerateProxyCode) Metodo SOAP_WSDL metodo [generateProxyCode] invece e salvarlo in un file:

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

require 'wsdl_proxy.php'; 
+4

due note sul codice di esempio: è necessario includere la classe PEAR con require_once ("SOAP/WSDL.php "), e il metodo non è $ WSDL-> getProxyCode(), ma $ WSDL-> generateProxyCode(); – Pisu

3

solo per aiutare chiunque si imbatte in questo post e pensa "come diamine faccio a lavorare con questa cosa SOAP_WSDL? " (Come me)

Aprire la riga di comando e raggiungere la vostra directory php (ho installato XAMPP Lite in questo esempio)

volta nella directory php ho eseguito lo script pear.bat. Dopo questo ho potuto digitare la seguente via linea cmd

pera -V (fornisce la versione della vostra installazione)

lista pera

Se si digita il sopra e non si vede SOAP è necessario effettuare le seguenti operazioni dalla linea di cmd:

  • pear install Net_DIME-1.0.1

  • pear install Mail_Mime-1.5.2

  • pear install Mail-1.2.0b1

  • pera installare SOAP-0.12.0

Ora dopo l'installazione di questi pacchetti e fare un altro "lista pera" si dovrebbe vedere SOAP elencato.

In questo modo è possibile includere un riferimento ai file php estratti all'interno della directory Pear in SOAP.

Un esempio di questo percorso potrebbe essere C: \ xampplite php \ PEAR \ SOAP \

7

C'è un app per questo, si chiama wsdl2phpgenerator:

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

Run contro un WSDL file e genererà classi basate sui servizi WSDL.

+0

wsdl2phpgenerator vi darà un grande vantaggio iniziale – jjwdesign

+1

Per ottenere la versione più recente andare alla nuova sede del wsdl2phpgenerator, sulla GitHub, https://github.com/walle/wsdl2phpgenerator C'è anche una forchetta notevole a https://github.com/reload/wsdl2phpgenerator che cercano di integrare le richieste di pull non ho davvero avuto il tempo di verificare e Unisci –

0

ho usato wsdl2php, un semplice strumento PEAR; sembra che il progetto è morto, ma è ancora possibile scaricare l'ultima versione qui: http://sourceforge.net/projects/wsdl2php/

Si richiedono una macchina di sviluppo con PHP 5 e pera, e devi installarlo con questo comando PEAR:

sudo pear install wsdl2php-0.2.1-pear.tgz 

Dopo questo, è possibile generare il PHP file delle classi con questo comando:

wsdl2php <WSDL_URL> 

genera una classe principale che si estende SoapClient, e molti altri classificati che rappresentano le richieste, le risposte e oggetti complessi, quindi è molto utile quando sviluppando in un IDE con "intellisense" come NetBeans.

0

Ho cercato di utilizzare everething che sono stati elencati qui.

trovato il un'altra scelta: https://github.com/mikaelcom/WsdlToPhp

Pluses in comparition con precedenti:

  • Nessun dipendenze. Sia per il generatore che per il client creato.

  • Classi per in e fuori parametri.

  • Esempi di utilizzo per creato client. Naturalmente non è così importante. Ma alcune volte molto utili

  • Meno di codice (in confronto con SOAP_WSDL)

Lati negativi:

  • risposta e qualsiasi sottotipo complesso sono avvolte da un altro oggetto che contiene informazioni tecniche.
+0

Grazie per il tuo feedback dettagliato. Potresti inviarmi ulteriori dettagli sulla tua osservazione "Risposta e qualsiasi sottotipo complesso sono racchiusi in un altro oggetto che contiene informazioni tecniche." a [email protected], sarebbe molto apprezzato, Ths –

+0

In realtà, non è corretto, in .NET è possibile ottenere gli oggetti esattamente come se fossero al servizio, ma nel mio caso quando ricevo risposta in PHP dal servizio .NET, Ho wrapper "aggiuntivi". In realtà sono presenti in WSDL, ma .NET, in qualche modo, "sa" che alcune classi sono solo per esigenze tecniche e rimuovono il risultato. –

+0

Grazie, se avessi degli esempi sarebbe bello, altrimenti cercherò se può essere evitato. –