PHP
SOAP-Client
Suche…
Syntax
- __getFunctions () // Gibt ein Array von Funktionen für den Service zurück (nur WSDL-Modus)
- __getTypes () // Gibt ein Array von Typen für den Service zurück (nur WSDL-Modus)
- __getLastRequest () // Gibt XML von der letzten Anforderung zurück (Option für
trace
erforderlich) - __getLastRequestHeaders () // Header von den letzten Anfrage Returns (Erfordert
trace
- Option) - __getLastResponse () // Gibt XML aus der letzten Antwort zurück (Option für
trace
erforderlich) - __getLastResponseHeaders () // Gibt die Header der letzten Antwort zurück (Option für
trace
erforderlich)
Parameter
Parameter | Einzelheiten |
---|---|
$ wsdl | URI von WSDL oder NULL wenn der Nicht-WSDL-Modus verwendet wird |
$ options | Optionsfeld für SoapClient. Im Nicht-WSDL-Modus müssen location und uri festgelegt werden. Alle anderen Optionen sind optional. Mögliche Werte finden Sie in der folgenden Tabelle. |
Bemerkungen
Die SoapClient
Klasse ist mit einer __call
Methode ausgestattet. Dies ist nicht direkt anzurufen. Stattdessen können Sie Folgendes tun:
$soap->requestInfo(['a', 'b', 'c']);
Dadurch wird die SOAP-Methode requestInfo
.
Tabelle möglicher $options
Werte ( Array von Schlüssel / Wert-Paaren ):
Möglichkeit | Einzelheiten |
---|---|
Standort | URL des SOAP-Servers. Erforderlich im Nicht-WSDL-Modus. Kann im WSDL-Modus verwendet werden, um die URL zu überschreiben. |
uri | Zielnamensraum des SOAP-Dienstes. Erforderlich im Nicht-WSDL-Modus. |
Stil | Mögliche Werte sind SOAP_RPC oder SOAP_DOCUMENT . Nur im Nicht-WSDL-Modus gültig. |
benutzen | Mögliche Werte sind SOAP_ENCODED oder SOAP_LITERAL . Nur im Nicht-WSDL-Modus gültig. |
soap_version | Mögliche Werte sind SOAP_1_1 ( Standard ) oder SOAP_1_2 . |
Authentifizierung | Aktivieren Sie die HTTP-Authentifizierung. Mögliche Werte sind SOAP_AUTHENTICATION_BASIC ( Standard ) oder SOAP_AUTHENTICATION_DIGEST . |
Anmeldung | Benutzername für die HTTP-Authentifizierung |
Passwort | Passwort für die HTTP-Authentifizierung |
Proxy-Host | URL des Proxy-Servers |
Proxy-Port | Proxy-Server-Port |
proxy_login | Benutzername für Stellvertreter |
proxy_password | Passwort für Proxy |
local_cert | Pfad zum HTTPS-Client-Zertifikat (zur Authentifizierung) |
Passphrase | Passphrase für HTTPS-Client-Zertifikat |
Kompression | Anfrage / Antwort komprimieren Wert ist eine Bitmaske von SOAP_COMPRESSION_ACCEPT mit entweder SOAP_COMPRESSION_GZIP oder SOAP_COMPRESSION_DEFLATE . Zum Beispiel: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP . |
Codierung | Interne Zeichenkodierung (TODO: mögliche Werte) |
Spur | Boolean , Standardeinstellung ist FALSE . Ermöglicht die Rückverfolgung von Anforderungen, damit Fehler zurückverfolgt werden können. Ermöglicht die Verwendung von __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() und __getLastResponseHeaders() . |
Classmap | Ordnen Sie WSDL-Typen PHP-Klassen zu. Wert sollte ein Array mit WSDL-Typen als Schlüssel und PHP-Klassennamen als Werte sein. |
Ausnahmen | Boolescher Wert. Sollte bei SOAP Ausnahmen auftreten (vom Typ `SoapFault). |
Verbindungszeitüberschreitung | Timeout (in Sekunden) für die Verbindung zum SOAP-Dienst. |
typemap | Array von Typzuordnungen. Das Array sollte aus Schlüssel / Wert-Paaren mit den folgenden Schlüsseln bestehen: type_name , type_ns (Namespace-URI), from_xml (Callback akzeptiert einen String-Parameter) und to_xml (Callback akzeptiert einen Objektparameter). |
cache_wsdl | Wie (wenn überhaupt) soll die WSDL-Datei zwischengespeichert werden? Mögliche Werte sind WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY oder WSDL_CACHE_BOTH . |
User-Agent | Zeichenfolge, die im User-Agent Header verwendet werden soll. |
stream_context | Eine Ressource für einen Kontext. |
Eigenschaften | Bitmaske von SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS . |
bleib am Leben | ( Nur PHP-Version> = 5.4 ) Boolescher Wert. Senden Sie entweder Connection: Keep-Alive Header ( TRUE ) oder Connection: Close Header ( FALSE ). |
ssl_method | ( Nur PHP-Version> = 5.5 ) Welche SSL / TLS-Version soll verwendet werden. Mögliche Werte sind SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 oder SOAP_SSL_METHOD_SSLv23 . |
Problem mit 32-Bit-PHP : In 32-Bit-PHP werden numerische Zeichenfolgen, die größer als 32 Bit sind und automatisch von
xs:long
in Ganzzahlen umgewandelt werden, dazu geführt, dass die 32-Bit-Grenze erreicht wird und der2147483647
in2147483647
. Um dies zu__soapCall()
, werfen Sie die Strings in Float um, bevor Sie sie an__soapCall()
.
WSDL-Modus
Erstellen Sie zunächst ein neues SoapClient
Objekt, und übergeben Sie die URL an die WSDL-Datei und optional ein Array von Optionen.
// Create a new client object using a WSDL URL
$soap = new SoapClient('https://example.com/soap.wsdl', [
# This array and its values are optional
'soap_version' => SOAP_1_2,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
'cache_wsdl' => WSDL_CACHE_BOTH,
# Helps with debugging
'trace' => TRUE,
'exceptions' => TRUE
]);
Rufen Sie dann mit dem $soap
Objekt Ihre SOAP-Methoden auf.
$result = $soap->requestData(['a', 'b', 'c']);
Nicht-WSDL-Modus
Dies ist dem WSDL-Modus ähnlich, mit der Ausnahme, dass wir NULL
als WSDL-Datei übergeben und die location
und uri
Optionen festlegen.
$soap = new SoapClient(NULL, [
'location' => 'https://example.com/soap/endpoint',
'uri' => 'namespace'
]);
Klassenpläne
Beim Erstellen eines SOAP-Clients in PHP können Sie auch einen classmap
Schlüssel im Konfigurationsarray classmap
. Diese classmap
definiert, welche Typen in der WSDL anstelle der standardmäßigen StdClass
tatsächlichen Klassen zugeordnet werden StdClass
. Der Grund, warum Sie dies tun möchten, ist, dass Sie die automatische Vervollständigung von Feldern und Methodenaufrufen für diese Klassen erhalten können, anstatt zu erraten, welche Felder für die reguläre StdClass
.
class MyAddress {
public $country;
public $city;
public $full_name;
public $postal_code; // or zip_code
public $house_number;
}
class MyBook {
public $name;
public $author;
// The classmap also allows us to add useful functions to the objects
// that are returned from the SOAP operations.
public function getShortDescription() {
return "{$this->name}, written by {$this->author}";
}
}
$soap_client = new SoapClient($link_to_wsdl, [
// Other parameters
"classmap" => [
"Address" => MyAddress::class, // ::class simple returns class as string
"Book" => MyBook::class,
]
]);
Nach der Konfiguration der Classmap wird der SoapClient bei jeder Ausführung einer bestimmten Operation, die einen Typ Address
oder Book
zurückgibt, diese Klasse instanziieren, die Felder mit den Daten füllen und sie vom Operationsaufruf zurückgeben.
// Lets assume 'getAddress(1234)' returns an Address by ID in the database
$address = $soap_client->getAddress(1234);
// $address is now of type MyAddress due to the classmap
echo $address->country;
// Lets assume the same for 'getBook(1234)'
$book = $soap_client->getBook(124);
// We can not use other functions defined on the MyBook class
echo $book->getShortDescription();
// Any type defined in the WSDL that is not defined in the classmap
// will become a regular StdClass object
$author = $soap_client->getAuthor(1234);
// No classmap for Author type, $author is regular StdClass.
// We can still access fields, but no auto-completion and no custom functions
// to define for the objects.
echo $author->name;
Verfolgung der SOAP-Anforderung und -Antwort
Manchmal möchten wir uns ansehen, was in der SOAP-Anfrage gesendet und empfangen wird. Die folgenden Methoden geben das XML in der Anforderung und der Antwort zurück:
SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()
Angenommen, wir haben eine ENVIRONMENT
Konstante. Wenn der Wert dieser Konstante auf DEVELOPMENT
, möchten wir alle Informationen getAddress
wenn der Aufruf von getAddress
einen Fehler getAddress
. Eine Lösung könnte sein:
try {
$address = $soap_client->getAddress(1234);
} catch (SoapFault $e) {
if (ENVIRONMENT === 'DEVELOPMENT') {
var_dump(
$soap_client->__getLastRequestHeaders()
$soap_client->__getLastRequest(),
$soap_client->__getLastResponseHeaders(),
$soap_client->__getLastResponse()
);
}
...
}