Come consumare facilmente un servizio web da PHP

È disponibile uno strumento per PHP che può essere utilizzato per generare codice per il consumo di un servizio Web basato sul suo WSDL ? Qualcosa di simile a fare clic su "Aggiungi riferimento Web" in Visual Studio o sul plugin Eclipse che fa la stessa cosa per Java.

Ho avuto un grande successo con wsdl2php . Creerà automaticamente le classi wrapper per tutti gli oggetti e i methods utilizzati nel tuo servizio web.

In PHP 5 è ansible utilizzare SoapClient sul WSDL per call le funzioni del servizio Web. Ad esempio :

$client = new SoapClient("some.wsdl"); 

e $ client ora è un object che ha methods di class come definito in alcuni.wsdl. Quindi se ci fosse un metodo chiamato getTime nel WSDL, allora chiameresti semplicemente:

 $result = $client->getTime(); 

E il risultato sarebbe (ovviamente) nella variabile $ result. È ansible utilizzare il metodo __getFunctions per restituire un elenco di tutti i methods disponibili.

Ho usato NuSOAP in passato. Mi è piaciuto perché è solo un insieme di file PHP che puoi includere. Non c'è nulla da installare sul server Web e nessuna opzione di configuration da modificare. Ha anche il supporto WSDL che è un bonus.

Bene, queste funzionalità sono specifiche di uno strumento che si sta utilizzando per lo sviluppo in quelle lingue.

Non avresti quegli strumenti se (per esempio) stavi usando il block note per scrivere codice. Quindi, forse dovresti fare la domanda per lo strumento che stai utilizzando.

Per PHP: http://webservices.xml.com/pub/a/ws/2004/03/24/phpws.html

Questo articolo spiega come utilizzare PHP SoapClient per call un servizio web API.

Ho ottenuto questo da questo sito: http://forums.asp.net/t/887892.aspx?Consume+an+ASP+NET+Web+Service+with+PHP

Il servizio web ha il metodo Add che richiede due parametri:

 <?php $client = new SoapClient("http://localhost/csharp/web_service.asmx?wsdl"); print_r( $client->Add(arrays("a" => "5", "b" =>"2"))); ?> 

Di 'che ti è stato fornito il seguente:

 <x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:int="http://thesite.com/"> <x:Header/> <x:Body> <int:authenticateLogin> <int:LoginId>12345</int:LoginId> </int:authenticateLogin> </x:Body> </x:Envelope> 

e

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <authenticateLoginResponse xmlns="http://thesite.com/"> <authenticateLoginResult> <RequestStatus>true</RequestStatus> <UserName>003p0000006XKX3AAO</UserName> <BearerToken>Abcdef1234567890</BearerToken> </authenticateLoginResult> </authenticateLoginResponse> </s:Body> </s:Envelope> 

Diciamo che l'accesso a http://thesite.com/ ha detto che l'indirizzo WSDL è: http://thesite.com/PortalIntegratorService.svc?wsdl

 $client = new SoapClient('http://thesite.com/PortalIntegratorService.svc?wsdl'); $result = $client->authenticateLogin(arrays('LoginId' => 12345)); if (!empty($result->authenticateLoginResult->RequestStatus) && !empty($result->authenticateLoginResult->UserName)) { echo 'The username is: '.$result->authenticateLoginResult->UserName; } 

Come puoi vedere, gli elementi specificati nell'XML sono usati nel codice PHP anche se il valore di LoginId può essere modificato.