Recentemente abbiamo ricevuto un paio di progetti in cui si consumano webservices SOAP per ottenere i dati. La verità è che per un bel po 'di tempo da quando li ho visto nel mio lavoro regolare. Alcuni anni fa era comune a quasi tutto ciò che avrebbe comportato la comunicazione con le fonti esterne, tuttavia negli ultimi anni era caduto in disuso per alcune cose semplici come un lavoro abbastanza complicato con una semplice richiesta HTTP e di un XML di base potrebbe essere risolto . Proprio questo è sempre stato uno dei più grandi critiche del protocollo SOAP , l'alto consumo di larghezza di banda per una semplice richiesta.

Finora sempre usato NuSOAP per fare chiamate SOAP da PHP , ma ho trovato un problema quando si accede a un servizio di un importante mezzo di comunicazione internazionale. La chiamata non ha restituito risultati con NuSOAP mentre dal test di funzionamento del sistema html corretto.

Dopo aver dato un migliaio di giri e non trovare alcun errore (le altre richieste agli stessi servizi che se lavorate) mi resi conto che PHP ha già una serie di funzioni SOAP nativo, quindi non è necessario NuSOAP. La questione era se funzionano bene, per così dire. Dopo aver aggiunto l'estensione appropriata viene una incompatibilità di piccole dimensioni. NuSOAP e non può utilizzare le funzioni native per la stessa installazione di PHP. In altre parole, se si attiva l'estensione SOAP, NuSOAP smettere di lavorare e iniziare a stendere i messaggi di errore in quanto molte delle funzioni utilizzate hanno lo stesso nome come il nativo, che saranno poi riservati i nomi. Se avete qualsiasi applicazione che utilizza NuSOAP sulla stessa macchina dovranno migrare anche per utilizzare le funzioni native.

esempio di oggi è una semplice chiamata ad un servizio che restituisce un elenco di notizie.

Il processo è molto semplice, è necessario l'url del webservice, il metodo che verrà chiamata e passare i parametri, e come per ogni servizio SOAP, ci verrà restituito un XML.

  1. ; //url del servicio Servizio $ = "http://dominio.com/noticias?wsdl" / / URL del servizio
  2. ( ) ; //parametros de la llamada $ Params = array (), / / parametri della chiamata
  3. 'idioma' ] = "es" ; Params ['$ lingua'] = "it";
  4. 'usuario' ] = "manolo" ; ['User' Params] $ = "Manolo"
  5. 'clave' ] = "tuclave" ; $client = new SoapClient ( $servicio , $parametros ) ; Params [tasto '$'] = "tuclave" $ client = SoapClient nuovo ($ servizio, $ params);
  6. -> getNoticias ( $parametros ) ; //llamamos al métdo que nos interesa con los parámetros $ Risultato = $ client - getNoticias> ($ params) / / chiama il métdo ci riguarda con i parametri

Con queste semplici istruzioni $ risultato che abbiamo in XML il risultato della chiamata al servizio. Lavorare con l'XML è un po 'ingombrante, ci convertirlo in un array associativo in modo da rendere più facile il trattamento dei dati, si usa la funzione che obj2array descritta di seguito.

  1. $result ) ; $ Risultato = obj2array ($ risultato);
  2. [ 'resultado' ] [ 'noticias' ] ; News $ = $ risultato 'risultato [' ['news]'];
  3. ( $noticias ) ; $ N = count ($ news);
  4. / / Processo il risultato in qualsiasi altro array
  5. $i = 0 ; $i < $n ; $i ++ ) { for ($ i = 0, $ i <$ n, $ i + +) (
  6. [ $i ] ; News $ = $ notizia [$ i];
  7. [ 'id' ] ; Id = $ $ notizie ['id'];
  8. / / Qui va il resto del codice dove si elaborano i dati ricevuti
  9. )
  10. $obj ) { obj2array funzione ($ obj) (
  11. ( ) ; $ Out = array ();
  12. $obj as $key => $val ) { foreach ($ obj as $ key => $ val) (
  13. true ) { switch (vero) (
  14. ( $val ) : caso is_object ($ val):
  15. $key ] = obj2array ( $val ) ; $ Out [$ chiave] = obj2array ($ val);
  16. break;
  17. ( $val ) : caso is_array ($ val):
  18. $key ] = obj2array ( $val ) ; $ Out [$ chiave] = obj2array ($ val);
  19. break;
  20. default:
  21. $key ] = $val ; Out [$ key] = $ val;
  22. )
  23. )
  24. ; ritorno $ out;
  25. )

In seconda linea ci ritroviamo con gli elementi della matrice che si desidera elaborare. Se non sai cosa riporta il webservice può fare un var_dump ($ risultato) e vedrete il risultato. Nel nostro caso, in quanto è una sequenza di notizie, siamo lasciati con l'elemento che ha la notizia.

Come avete notato, io non sono preoccupato per la gestione degli errori quando si chiama il webservice. Questo lo lascio come esercizio per te, che è agosto e non voglio :P . Il manuale di PHP è tutte le informazioni.

E questo è tutto gente, oggi è stato un esempio semplice ma molto utile quando è necessario utilizzare SOAP.

Se si sono rivelati utili questo articolo ... Condividi!