Suche…


Syntax

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 der 2147483647 in 2147483647 . 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()
        );
    }
    ...
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow