Einen Webdienst verwenden

Für die Nutzung eines Webdienstes bietet PHP die Klasse SOAPClient an. Ein Objekt dieser Klasse dient hierbei als Stellvertreter (siehe „Stellvertreter“) für den Webdienst: Methodenaufrufe werden automatisch in eine SOAP-Nachricht übersetzt und an den entsprechenden Webdienst weitergeleitet. Die SOAP-Antwort wird verarbeitet und als Ergebnis des Methodenaufrufes zurückgegeben. Intern benutzt die Klasse SOAPClient hierfür eine __call()-Methode (siehe Kapitel 2).

Liegt für den zu verwendenden Webdienst eine WSDL-Beschreibung vor, so ist dem Konstruktor der Klasse SOAPClient lediglich Pfad oder URL zu übergeben, wo das WSDL-Dokument zu finden ist. Beispiel 9.5 zeigt den Zugriff auf den Hallo-Welt-Webdienst über dessen WSDL-Beschreibung.

Beispiel 9.5: Über die WSDL-Beschreibung auf den Hallo-Welt-Webdienst zugreifen

<?php
try {
  $client = new SOAPClient('http://localhost/HalloWelt.php?wsdl');
 
  print $client->halloWelt();
}
 
catch (SOAPFault $f) {
  print $f->faultstring;
}
?>
Hallo Welt


Die Erzeugung eines SOAPClient-Objektes für die Verwendung eines Webdienstes, für den keine WSDL-Beschreibung vorliegt, gestaltet sich etwas aufwändiger. Die sonst aus der WSDL-Beschreibung gewonnenen Informationen müssen dann dem Konstruktor in einem assoziativen Array übergeben werden.

Beispiel 9.6: Ohne WSDL-Beschreibung auf den Hallo-Welt-Webdienst zugreifen

<?php
try {
  $client = new SOAPClient(
    NULL,
    array(
      'location' => 'http://localhost/HalloWelt.php',
      'uri'      => 'http://localhost/HalloWelt',
      'style'    => SOAP_RPC,
      'use'      => SOAP_ENCODED
    )
  );
 
  print $client->halloWelt();
}
 
catch (SOAPFault $f) {
  print $f->faultstring;
}
?>
Hallo Welt


Über die Methode __getFunctions() der Klasse SOAPClient können Informationen über die Funktionen des Webdienstes abgefragt werden. Hierzu gehören Name der Funktion, Name und Typ der Parameter sowie der Typ des Rückgabewertes. Beispiel 9.7 zeigt die Ausgabe von __getFunctions() für ein SOAPClient-Objekt, das den Google-Webdienst repräsentiert. Die Methode __getFunctions() gewinnt ihre Informationen aus der WSDL-Beschreibung des Webdienstes.

Beispiel 9.7: Die Methode SOAPClient::__getFunctions()

<?php
$client = new SOAPClient('GoogleSearch.wsdl');
print_r($client->__getFunctions());
?>
Array
(
    [0] => base64Binary doGetCachedPage(string $key, string $url)
    [1] => string doSpellingSuggestion(string $key, string $phrase)
    [2] => GoogleSearchResult doGoogleSearch(string $key, string $q,
           int $start, int $maxResults, boolean $filter, string $restrict,
           boolean $safeSearch, string $lr, string $ie, string $oe)
)


Beispiel 9.8 demonstriert den Zugriff auf den Google-Webdienst über ein Objekt der Klasse SOAPClient. Damit das Beispiel korrekt funktioniert, muss der erste Parameter der Methode doGoogleSearch() durch einen gültigen Lizenzschlüssel für den Google-Webdienst ersetzt werden.

Beispiel 9.8: Auf den Webdienst von Google zugreifen

<?php
$client = new SOAPClient('GoogleSearch.wsdl');
 
try {
  $result = $client->doGoogleSearch(
    '00000000000000000000000000000000',
    'Professionelle Softwareentwicklung mit PHP 5',
    0,
    1,
    FALSE,
    '',
    FALSE,
    '',
    '',
    ''
  );
 
  foreach ($result->resultElements as $resultElement) {
    print $resultElement->URL;
  }
}
 
catch (SOAPFault $f) {
  print $f->faultstring;
}
?>
http://www.professionelle-softwareentwicklung-mit-php5.de/