Ciao a tutti,
Spiego quello che vorrei fare, forse qualcuno di voi conosce già un code open source da poter poi personalizzare.
Allora abbiamo i nostri wsdl(web service description languages), che viene richiamato con il php in connessione soap, per chi conosce un pò la struttura del wsdl sa che solitamente in tutti i wsdl ci sono delle testate di input(parametri in entrata che di solito sono fissi) e fin qui si potrebbe creare una funzione che ti ritorna l'intera testata, tanto se la testata da wsdl a wsdl non cambia grossi problemi non ce ne sono.
Poi il wsdl ha delle "operation" e queste operation ovviamente cambiano da wsdl a wsdl in base all'operation ha dei parametri in input che possono cambiare da operation a operation, alcuni possono essere dei tag tns(type namespace) quindi in php sono di solito array oppure potrebbero essere dei choice cioè delle scelte cioè dal php passi o A o B oppure delle semplici stringhe numeriche o alfanumeriche, in base all'operation ed ai parametri che accetta l'operation ci si creano tutti gli array si passano i parametri etc...e poi con la soap si passa la chiamata per la risposta del wsdl e se tutti i parametri sono giusti il wsdl risponde un stdClass che poi va gestita in php e nell'html.
Che cosa vorrei fare io?
Vorrei creare una classe che indipendentemente dalle operation e dal wsdl(quindi deve funzionare per tutti i possibili wsdl) vado a scrivere solamente l'operation del wsdl ed in automatico mi dica quali variabili accetta e come sono le variabili in modo che io poi chiamerò un metodo nella mia classe a cui passo solamente le variabili e il mio metodo analizzerà le variabili le invierà all'operation e poi mi ritorna una risposta.
Perchè adesso creo ogni volta il codice PHP andando a leggere punto per punto il wsdl e creandomi i miei array o le mie variabili caso per caso....
Secondo voi, si può innanzi tutto creare una classe che mi permette di leggere ed inviare dinamicamente variabili ai wsdl(calcolando che le operation ed ovviamente la struttura dei parametri che accetta il wsdl cambia da wsdl a wsdl) e se si conosce già un codice open source che permetta di fare ciò?
Ad esempio questa, la __getFunctions ritorna il nome di tutte le operation di quel wsdl
http://php.net/manual/en/soapclient.getfunctions.php
Poi ogni operation accetterà dei parametri in input e così via, quindi bisognerà creare il codice ad hoc di quei parametri dal PHP e poi fare la chiamata vera e propria alla operation del wsdl cioè
$risposta = $client->__soapCall("operationChiamata", array($parametri));
Qualche idea o qualche codice a classi già fatto da poter creare tutto dinamicamente?
PS:Di solito quell'array($parametri) è composto in maniera multidimensionale da array di testata e array di parametri che sono necessari alla operationChiamata io non voglio starmi a creare ogni volta gli array ad hoc leggendo il wsdl ma vorrei grazie ad un metodo che mi dica quanti parametri devo passare e che TIPO DI PARAMETRO accetta in modo che io scrivo solamente
Codice PHP:
$testata= creaTestata('pippo','pluto','paperino'); //la crea testata sarà creata ad hoc per andare a compilare l'array di testat
$parametriAccettatiDallaOperation = compilaOperation('nomeOperation, 'pippo','pluto','paperino') // la compila operation crea tutto dinamicamente in base al nome dell'operation.
$parametri = array('testata'=>$testata, 'parametriAccettatiDallaOperation'=>$parametriAccettatiDallaOperation);
$risposta = $client->__soapCall("operationChiamata", $parametri);
var_dump($risposta);
In generale una cosa di questo genere, perchè adesso creo tutti gli array e tutte le dimensioni dell'array ogni volta andando sempre a leggere wsdl per wsdl....Vorrei qualcosa di più comodo e usabile diverse volte.