Heim > Artikel > Backend-Entwicklung > SOAP-Webservice-Schnittstelle
In PHP kann SOAP unterstützt werden, nachdem die Erweiterung php_soap.dll in der Datei php.ini aktiviert wurde.
In der Soap-Erweiterungsbibliothek gibt es hauptsächlich drei Arten von Objekten.
1. SoapServer
wird verwendet, um Funktionen zu definieren, die aufgerufen werden können und Antwortdaten zurückgeben, wenn serverseitige PHP-Seiten erstellt werden. Das Syntaxformat zum Erstellen eines SoapServer-Objekts lautet wie folgt:
$soap = new SoapServer($wsdl, $array);
Darunter ist $wsdl die von Shoep verwendete WSDL-Datei und WSDL ist ein Standardformat zur Beschreibung des Webdienstes. Wenn $wsdl auf null gesetzt ist, bedeutet dies, dass der WSDL-Modus nicht verwendet wird. $array sind die Attributinformationen von SoapServer und ein Array.
Die addFunction-Methode des SoapServer-Objekts wird verwendet, um zu deklarieren, welche Funktion vom Client aufgerufen werden kann. Das Syntaxformat ist wie folgt:
$soap->addFunction($function_name);
Darunter: $soap ist ein SoapServer-Objekt. $function_name ist der Name der Funktion, die aufgerufen werden muss.
Die Handle-Methode des SoapServer-Objekts wird verwendet, um Benutzereingaben zu verarbeiten und die entsprechende Funktion aufzurufen, und gibt schließlich das Verarbeitungsergebnis an den Client zurück. Das Syntaxformat lautet wie folgt:
$soap->handle([$soap_request]);
Darunter ist $soap ein SoapServer-Objekt und $soap_request ein optionaler Parameter, der zur Darstellung der Anforderungsinformationen des Benutzers verwendet wird . Wenn $soap_request nicht angegeben ist, bedeutet dies, dass der Server alle Anfragen des Benutzers akzeptiert.
2. SoapCliet
wird verwendet, um die SoapServer-Seite auf dem Remote-Server aufzurufen und den Aufruf der entsprechenden Funktion zu implementieren. Das Syntaxformat zum Erstellen eines SoapClient-Objekts lautet wie folgt:
$soap = new SoapClient($wsdl,$array);
Unter diesen sind die Parameter $wsdl und $array dieselben wie bei SoapServer.
Nach dem Erstellen des SoapClient-Objekts entspricht der Aufruf der Funktion auf der Serverseite dem Aufruf der SoapClient-Methode. Die Erstellungssyntax lautet wie folgt:
$soap->user_function($params);
Darunter , $soap ist ein SoapClient-Objekt, user_function ist die Funktion, die auf der Serverseite aufgerufen werden soll, und $params sind die Parameter, die an die Funktion übergeben werden sollen.
3. SoapFault
SoapFault wird verwendet, um Fehler zu generieren, die beim Soap-Zugriff auftreten können. Das Syntaxformat zum Erstellen eines SoapFault-Objekts lautet wie folgt:
$fault = new SoapFault($faultcode,$faultstring);
Darunter ist $faultcode ein benutzerdefinierter Fehlercode und $faultstring ein Benutzer -definierte Fehlermeldung. Das SoapFault-Objekt wird automatisch generiert, wenn auf der serverseitigen Seite ein Fehler auftritt oder wenn der Benutzer ein SoapFault-Objekt erstellt. Bei Fehlern, die beim Soap-Zugriff auftreten, kann der Client die entsprechenden Fehlerinformationen durch Erfassen des SoapFalut-Objekts erhalten.
Nach der Erfassung des SoapFault-Objekts auf dem Client können der Fehlercode und die Fehlerinformationen über den folgenden Code abgerufen werden:
$fault->faultcode;//Fehlercode
$fault->faultstring; //Fehlerinformationen
Darunter ist $fault das zuvor erstellte SoapFault-Objekt.
Sowohl SoapServer als auch SoapClient erhalten zwei Parameter, die mehrere Optionen unterstützen:
uri: Namespace, erforderlich für Client und Server.
Speicherort. Wird vom Client verwendet, um die Zugriffsadresse des Serverprogramms anzugeben, in diesem Beispiel die Programmadresse des zweiten Codes.
Trace: Wird vom Client verwendet. Wenn „true“, kann der Inhalt der Kommunikation zwischen dem Server und dem Client zum Debuggen abgerufen werden.
Soapserver.php
Java-Code
//Erstellen Sie zunächst eine SoapServer-Objektinstanz und registrieren Sie dann die gewünschten Funktionen Exposé ,
//Das letzte Handle() wird verwendet, um die akzeptierte Soap-Anfrage zu verarbeiten
error_reporting(7); //Bei offizieller Veröffentlichung auf 0 gesetzt
date_default_timezone_set (' PRC'); // Zeitzone einstellen
/* Mehrere Funktionen für Client-Anrufe */
function reverse($str)
{
$retval = '';
if (strlen($str) < 1) {
return new SoapFault ('Client', '', 'Invalid string'); >
} for ($i = 1; $i <= strlen($str); $i++) { $retval .= $str [(strlen($ str) - $i)]; } return $retval; } function add2numbers($num1, $num2) { if (trim($num1) != intval($num1)) {return new SoapFault ('Client', '', 'The first number is invalid');
}
if (trim($num2) != intval($num2)) {
return new SoapFault ('Client', '', 'Die zweite Nummer ist ungültig');
}
return ($num1 + $num2);
}
function gettime()
{
$time = date('Y-m-d H:i:s', Zeit());
return $time;
}
$soap = new SoapServer (null, array('uri' => "httr://test-rui"));
$soap->addFunction('reverse');
$soap->addFunction('add2numbers');
$soap->addFunction('gettime');
$soap->addFunction(SOAP_FUNCTIONS_ALL);
$soap->handle();
?>
SoapClient.php
Java代码
error_reporting(7);
versuchen Sie {
$client = new SoapClient (null, array('location' => "http://www.yiigo.com/Soapserver.php", 'uri' = > "http://test-uri"));
$str = "Diese Zeichenfolge wird umgekehrt";
$reversed = $client->reverse($str);
echo "Wenn Sie '$str' umkehren, erhalten Sie '$reversed'";
$n1 = 20;
$n2 = 33;
$sum = $client->add2numbers($n1, $n2);
echo "
";
echo "Wenn Sie $n1 + $n2 versuchen, erhalten Sie $sum";
echo "
";
echo "Die remoye-Systemzeit ist: " . $client->gettime();
} catch (SoapFault $fault) {
echo "Fehler! Code:" . $fault->Fehlercode . " Zeichenfolge:". . $fault->faultstring;
}
?>
Wenn Sie „Diese Zeichenfolge wird umgekehrt“ umkehren, erhalten Sie „desrever eb lliw gnirts sihT“
Wenn Sie 20 + 33 versuchen, erhalten Sie 53
Die Remote-Systemzeit ist: 28.05.2012 16:14:29
通过SoapHeader实现身份认证
Java代码
class Server
{
public function auth($a)
{
if ($a != '123456789') {
throw new SoapFault('Server', '用户身份认证信息错误');
}
}
public function say()
{
return 'Hi';
}
}
$srv = new SoapServer(null, array('uri' => 'http://localhost/namespace '));
$srv->setClass('Server');
$srv->handle();
客户端
Java代码
$cli = new SoapClient(null,
array('uri' => 'http://localhost/namespace/',
'location' => 'http://localhost/server.php',
'trace' => true));
//auth ist die vom Server zu verarbeitende Funktion 12345689 ist der Parameter
$h = new SoapHeader(' http://localhost/namespace/',
'auth', '123456789', false, SOAP_ACTOR_NEXT);
$cli->__setSoapHeaders(array($h) );
try {
echo $cli->say(); >getMessage ();
}
Beachten Sie, dass die Serverklasse in server.php eine Methode „auth“ hat, die dem Namen des Headers entspricht Bei der Methode Auth handelt es sich um die Daten von SoapHeader. Wenn SoapServer diese Anfrage empfängt, ruft er zunächst die Auth-Methode auf und übergibt „123456789“ als Parameter an die Methode. Wenn der Parameter „mustUnderstand“ „false“ ist, wird die Methode „say“ auch dann aufgerufen, wenn keine Authentifizierungsmethode vorhanden ist. Wenn er jedoch „true“ ist und die Authentifizierungsmethode nicht vorhanden ist, wird ein Soapfault zurückgegeben, um darüber zu informieren, dass der Header nicht verarbeitet wurde . Der Akteurparameter gibt an, welche Rollen den Header verarbeiten müssen. Ich verstehe ihn hier nicht sehr genau, daher ist es schwer zu sagen.
Java-Code
$file = $this->getSoapWSDL();
$client = new SoapClient($file);//url kann über die zugegriffen werden Browser, kann nicht durch direkten Aufruf gelöst werden
$param = array('userID' => 'test', 'merchantID' => 'test');
$returnSt = $ client-> ;checkUser($param);
print_r($returnSt->checkUserResult>
public function getSoapWSDL()
{ // Die URL-Datei regelmäßig lokal speichern
DS 'shengda' if (time() > filemtime($file) + 7 * 86400) {
$url = "http://jf.sdo.com/ExchangeScore/ExchangeService.asmx?WSDL";
include_once(BP . DS . "lib/Snoopy.class.php"); $snoopy = new Snoopy; $snoopy->fetch($url); / Alle Inhalte abrufen $snoopy->read_timeout = 4; $wsdl = $snoopy->results; if ($snoopy-& gt;status == '200' && !$snoopy->timed_out) { if (!is_dir(dirname($file))) { mkdir(dirname($file)); 🎜>.$file;
}