PHP SOAP Server
Es ist sehr einfach, einen SOAP-Server mit PHP und NuSoap einzurichten. Im Grunde schreiben Sie einfach die Funktionen, die Sie Ihren Webdiensten zur Verfügung stellen möchten, und registrieren sie bei NuSoap. OK, es sind noch zwei weitere Schritte erforderlich, um die Einrichtung des PHP-SOAP-Servers abzuschließen. Zuerst müssen Sie eine Instanz des NuSoap-Objekts in Ihrem PHP-Code erstellen und dann die HTTP-POST-Methode verwenden, um die Originaldaten zur Verarbeitung an NuSoap zu übergeben
Die Verwendung von NuSOAP ist relativ einfach, und die am häufigsten verwendeten Klassen sind Soap_Server und SoapClient, , wobei Soap_Server zum Erstellen von Webservice-Diensten und die Klasse SoapClient zum Aufrufen von Webservice verwendet werden Die Definitionen dieser beiden Klassen befinden sich in lib/nusoap.php, daher müssen wir beim Erstellen oder Aufrufen des Webservice-Schnittstellenprogramms auf diese Datei verweisen.
NuSoap ist ein WebService-Programmiertool in der PHP-Umgebung WebService erstellen oder aufrufen. Es handelt sich um eine Open-Source-Software, bei der es sich um eine Reihe von PHP-Klassen handelt, die vollständig in PHP-Sprache geschrieben sind und SOAP-Nachrichten über HTTP senden und empfangen. Sie wurde von der NuSphere Corporation (http://dietrich.ganx4.com/nusoap/) entwickelt. Ein Vorteil von NuSOAP besteht darin, dass keine Unterstützung für Erweiterungsbibliotheken erforderlich ist. Diese Funktion ermöglicht die Verwendung von NuSoap in allen PHP-Umgebungen und wird nicht von den Sicherheitseinstellungen des Servers beeinflusst.
1.Gehen Sie zunächst zu http://sourceforge.net/projects/nusoap / Laden Sie nusoap.zip herunter.
2.Server: Erstellen Sie die Datei nusoapService.php.
[php]
Klartext anzeigen
-
- require_once ("lib /nusoap.php"); Soap_server ();
- // Verstümmelte Zeichen vermeiden $server->soap_defencoding = 'UTF-8'
- ; >$server->decode_utf8 = false; 🎜>// WSDL-Unterstützung öffnen
- / * Registrieren Sie ein Programm, auf das der Client zugreifen muss
- Geben Sie den entsprechenden Wert ein: bool ->"xsd:boolean" string->"xsd: string"
- int->"xsd:int" float->"xsd :float" */
- $server->register ( 'GetTestStr', // Methodenname
-
Array (
- "name" => "xsd:string"
- ), // Parameter, Der Standardwert ist „xsd:string“
-
Array
- ("return" => "xsd:string"
- ) // Rückgabewert, Standard ist "xsd:string" //isset Überprüfen Sie, ob die Variable gesetzt ist
- $HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_P OST_DATA : '';
-
//service Verarbeitet die vom Kunden eingegebenen Daten $server->service ( $HTTP_RAW_POST_DATA ); 🎜>Funktion GetTestStr(
- $name) {
- return „Hallo, { $name } !“; } ?>
- 3.
Client: Erstellen Sie - nusoapClient.php Datei.
-
[php]
Klartext anzeigen
-
- require_once ("lib /nusoap.php");
- /* >WebService über WSDL aufrufen
- Parameter 1 Die Adresse der WSDL-Datei (die WSDL nach dem Fragezeichen darf nicht großgeschrieben werden)
- Parameter 2 gibt an, ob um WSDL zu verwenden
- $client = new Soapclient('http://localhost/nusoapService.php?wsdl', true);
- */
- $client
= - neuer Soapclient ( 'http://localhost/nusoapService.php' ); 🎜>$client->soap_defencoding = 'UTF-8';
- $client->decode_utf8 = false;
- $client->xml_encoding = 'UTF-8';
- //Die Parameter werden in Array-Form übergeben
- $paras = array (
- 'name' => 'Bruce Lee' ); >// Wenn die Zielmethode keine Parameter hat, können die folgenden Parameter weggelassen werden $result =
$client- -> call ( 'GetTestStr',
$paras- ) ; 🎜>// Auf Fehler prüfen und den Rückgabewert erhalten if (! $err = $client
->getError ()) { - echo
- " Rückgabeergebnisse: ", $result; } else
{ echo-
" Aufruffehler: ", $err ; }
-
?>
- [php]
Klartext anzeigen
- require_once ("lib /nusoap.php");
- /* >WebService über WSDL aufrufen
- Parameter 1 Die Adresse der WSDL-Datei (die WSDL nach dem Fragezeichen darf nicht großgeschrieben werden)
- Parameter 2 gibt an, ob um WSDL zu verwenden
- $client = new Soapclient('http://localhost/nusoapService.php?wsdl', true);
- */
- $client
= - neu Soapclient ( 'http://localhost/nusoapService.php?wsdl',true); $client
->soap_defencoding = - 'UTF-8'; 🎜>$client->decode_utf8 = false;
- $client- >xml_encoding = 'UTF-8'
; - / / Parameter werden in Array-Form übergeben
-
$paras = array
(- 'name' => 'Bruce Lee' ); / Wenn die Zielmethode keine Parameter hat, können die folgenden Parameter weggelassen werden $client -> call (
'GetTestStr'- , $paras );
- $document = $client->document;
echo- $document;
Hinweis: -
Zurück Ergebnis: Hallo, { Bruce
Lee } !
WSDLWSDL ist eine XML-Sprache, die zur Beschreibung von Webdiensten verwendet wird. Es handelt sich um ein maschinenlesbares Format, das dem Webdienst-Client alle für den Zugriff auf den Dienst erforderlichen Informationen bereitstellt. NuSOAP bietet speziell eine Klasse zum Parsen von WDSL-Dateien und zum Extrahieren von Informationen daraus. Das Soapclient-Objekt verwendet die WSDL-Klasse, um Entwicklern das Aufrufen von Diensten zu erleichtern. Durch die Erstellung der Nachricht mithilfe von WSDL-Informationen muss der Programmierer lediglich den Namen und die Parameter der Operation kennen, um sie aufzurufen. Die Verwendung von WSDL über NuSOAP bietet die folgenden Vorteile: Alle Dienstmetadateien wie Namespaces, Endpunkt-URLs, Parameternamen usw. können direkt aus der WSDL-Datei abgerufen werden, sodass sich der Client dynamisch anpassen kann serverseitige Änderungen. Da diese Daten immer vom Server verfügbar sind, müssen sie nicht mehr in Benutzerskripten fest codiert werden. Es ermöglicht uns die Verwendung der Soap_proxy-Klasse. Diese Klasse ist von der Soapclient-Klasse abgeleitet und fügt Methoden hinzu, die den in der WDSL-Datei beschriebenen Vorgängen entsprechen. Jetzt können Benutzer diese Methoden direkt aufrufen.
- Die Soapclient-Klasse enthält eine getProxy()-Methode , die ein Objekt der Soap_proxy-Klasse zurückgibt. Die Klasse „soap_proxy“ ist von der Klasse „soapclient“ abgeleitet, fügt Methoden hinzu, die den im WSDL-Dokument definierten Vorgängen entsprechen, und ermöglicht dem Benutzer den Aufruf der Remote-Methode eines Endpunkts. Dies gilt nur, wenn das Soapclient-Objekt mit einer WDSL-Datei initialisiert wird. Der Vorteil liegt in der Benutzerfreundlichkeit, der Nachteil in der Leistung – das Erstellen von Objekten in PHP ist zeitaufwändig – und dient keinem nützlichen Zweck (und dieser Funktionalität).
dient keinem nützlichen Zweck).
[php ]
Klartext anzeigen
- require_once ("lib /nusoap.php"); Soapclient (
'http://localhost/nusoapService.php?wsdl'- ,true); $client->soap_defencoding = 'UTF-8'; 🎜>
-
$client->decode_utf8 = false; 'UTF-8'; //Proxy-Klasse generieren
- $proxy =
- $client->getProxy(); >//Remotefunktion aufrufen
- $sq = $proxy
->GetTestStr(-
'Bruce Lee'); if (!$err=
- $proxy->getError()) {
print_r(- $sq); 🎜> { print "ERROR: $err";
- } print 'REQUEST:<xmp>'.$p
->request.-
'</xmp>'; 'ANTWORT:<xmp>'.
- str_replace( '><',
- ">n<", $p->response ).
- '</xmp> '
- ?> :http://localhost/
- nusoapService.php generierte WSDL-Datei
- Klicken Sie auf den Methodennamen. Auf diese Weise stellen wir durch das Hinzufügen einiger Codezeilen zum Dienst mithilfe von NuSOAP ein visuelles Dokument für den Dienst bereit. Aber das ist nicht alles, was wir tun können. Wir sind hier: Durch die Verwendung von NuSOAP zum Hinzufügen einiger WSDL-Aufrufe zum Dienst können wir WSDL und andere Dokumente für den Dienst generieren. Im Gegensatz dazu können wir im Client nicht viel tun, zumindest in unserem einfachen Beispiel. Der unten gezeigte Client unterscheidet sich nicht von dem Client, der kein WSDL verwendet. Der einzige Unterschied besteht darin, dass das Parsen der Soapclent-Klasse durch die Bereitstellung der URL des WSDL statt des Dienstendpunkts wie zuvor erfolgt. Lösung für verstümmelten Code, wenn NuSoap WebService aufruft: [php]
Klartext anzeigen$client->soap_defencoding = 'utf-8' ; $client->decode_utf8 = false;
$client
->xml_encoding =
'utf-8'; >Der Dateicode kann nicht keine Ausgabe haben, Andernfalls wird beim Aufruf ein Fehler ähnlich dem folgenden gemeldet:
XML-Fehler beim Parsen der SOAP-Nutzlast in Zeile x(Zeilennummer
): Reservierter XML-Name
Verwenden Sie
nusoap
, um
WebService zu implementieren,
Aktivieren Sie
php
s -
SOAP-Erweiterung, wegen der SoapClient-Klasse von nusoap und php5 Es gibt einen Konflikt mit der integrierten in der SOAP-Klasse. Lösung1. Ändern Sie php.ini so, dass die integrierte Soap-Erweiterung von php5 (php_soap.dll unter Windows) nicht geladen wird.
- 2. Einige haben auch die SoapClient-Klasse von nusoap umbenannt. Identitätsauthentifizierung
-
[php]
Klartext anzeigen
- header('content-type: text/xml; charset=UTF-8 ');
- require_once('nusoap.php');
- $params = array('AuthenticationHeader' => array(
- 'Content-Type' => 'text/xml; charset=UTF-8',
- 'SOAPAction' => 'YourFunstion',
- )
- );
- $client = neu nusoap_client('http:// www.yourdomain.com/service.asmx?wsdl', true, '', '' , '', '');
- $client->setHeaders('
- "http://tempuri.org/webservice">
username< ;/tns:Benutzername>
password
');
$err
= $client->getError(); if
($err) { echo
'Konstruktorfehler
'</span><span> . </span><span>$err</span><span> . </span><span>'
'; }
$result
= $client->call('YourFunction', $params, '', '', false, true); if
($client->fault) { echo
'Fault
'</span><span>; </span><span></span><span></span> print_r(</span>$result</li>
<li>); <span><span></span><span></span> </span>echo</li>
<li> <span><span>'
'; } else
{ $err = $client->getError(); if
($err) { echo
'Error
'</span><span> . </span><span>$err</span><span> . </span><span>'
'; } else
{ echo
'Ergebnis
'</span><span>; </span><span></span><span></span></span>//print_r($result);</li>
<li> <span><span></span><span></span> </span> echo</li>
<li> <span><span>'
'; }
}
echo 'Request
'</span><span> . htmlspecialchars(</span><span>$client</span><span>->request, ENT_QUOTES) </span><span>'
';
echo 'Response
'</span><span> .htmlspecialchars(</span><span>$client</span><span>->response, ENT_QUOTES) </span><span>'
';
Das Obige stellt die ausführliche Erklärung von webservice-nusoap vor, einschließlich seiner Aspekte. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.