A quick example of how easy it is to consume web services with PHP, using PEAR::SOAP and WSDL, as there isn't much material around.
Picking a web service at random described by this WSDL document [[http://wavendon.dsdata.co.uk/axis/services/CarRentalQuotes?wsdl|http://wavendon.dsdata.co.uk/axis/services/CarRentalQuotes?wsdl]], here's how to consume it with PEAR::SOAP.
First check out the proxy code generated from the WSDL document so you understand the available methods (note this a good way to mentally "reverse engineer" what WSDL actually says);
generateProxyCode() );
?>
This will display something like;
class WebService_CarRentalQuotesService_CarRentalQuotes extends SOAP_Client {
function WebService_CarRentalQuotesService_CarRentalQuotes() {
$this->SOAP_Client(
"http://wavendon.dsdata.co.uk/axis/services/CarRentalQuotes", 0);
}
function getQuotes($carType, $country, $currency, $pickupDate,
$pickupLocation, $returnDate, $returnLocation) {
// SOAP Stuff here
}
function getCountries() {
// SOAP Stuff here
}
function getLocations($country) {
// SOAP Stuff here
}
function getCurrencies() {
// SOAP Stuff here
}
function getCarTypes() {
// SOAP Stuff here
}
}
Now you know what the methods are and their parameters.
Note I've chopped down the above code to make it readable but make sure you try it yourself - basically the generated code makes use of the underlying SOAP_Client class - if you've had any experience of XML-RPC, you had to hand code this stuff - this is the big step forward WSDL brings.
You could then apply eval() to the above code then instantiate an object by PEAR::SOAP already provides the method getProxy() which does it for you;
getProxy();
$countries=$carRentalQuotes->getCountries();
print_r ( $countries );
?>
You get back a list of countries from the remote SOAP server, which you could then feed back into the getLocations() method. Note bad for four lines of code.
Note: at some point people will start implement WSCI ([[http://www.w3.org/TR/wsci/|Web Service Choreography Interface]][[http://www.xmethods.com|XMethods]] - watch out for those described as "Document Literal" - these are a bit more tricky - reasons explained in brief [[http://talks.php.net/show/soap-forumduphp-paris2002/27|here]].
I'll look at building SOAP servers some other time with PEAR::SOAP (it's also easy - credit to the authors). The harder part is writing WSDL document to describe your service - basically you need to do it manually. Explaining WSDL is more than a quick article but some time...
======Follow On======
Check out [[develop:pear_soap_server_quick_start|PEAR::SOAP Server Quick Start]] to find out about build SOAP servers and hand coding SOAP clients (Quick but not fast...)