Recherche…


Syntaxe

Paramètres

Paramètre Détails
$ wsdl URI de WSDL ou NULL si vous utilisez un mode non-WSDL
$ options Tableau d'options pour SoapClient. Le mode non-WSDL nécessite un location et un uri à définir, toutes les autres options sont facultatives. Voir le tableau ci-dessous pour les valeurs possibles.

Remarques

La classe SoapClient est équipée d'une méthode __call . Ceci ne doit pas être appelé directement. Au lieu de cela, cela vous permet de faire:

$soap->requestInfo(['a', 'b', 'c']);

Cela appellera la méthode SOAP requestInfo .


Tableau des valeurs possibles des $options ( tableau de paires clé / valeur ):

Option Détails
emplacement URL du serveur SOAP. Requis en mode non-WSDL. Peut être utilisé en mode WSDL pour remplacer l'URL.
uri Espace de noms cible du service SOAP. Requis en mode non-WSDL.
style Les valeurs possibles sont SOAP_RPC ou SOAP_DOCUMENT . Uniquement valide en mode non-WSDL.
utilisation Les valeurs possibles sont SOAP_ENCODED ou SOAP_LITERAL . Uniquement valide en mode non-WSDL.
soap_version Les valeurs possibles sont SOAP_1_1 ( par défaut ) ou SOAP_1_2 .
authentification Activer l'authentification HTTP Les valeurs possibles sont SOAP_AUTHENTICATION_BASIC ( par défaut ) ou SOAP_AUTHENTICATION_DIGEST .
s'identifier Nom d'utilisateur pour l'authentification HTTP
mot de passe Mot de passe pour l'authentification HTTP
Hôte proxy URL du serveur proxy
port proxy Port du serveur proxy
proxy_login Nom d'utilisateur pour le proxy
proxy_password Mot de passe pour proxy
local_cert Chemin d'accès au certificat client HTTPS (pour l'authentification)
mot de passe Phrase secrète pour le certificat client HTTPS
compression Compresser demande / réponse. La valeur est un masque de bits de SOAP_COMPRESSION_ACCEPT avec SOAP_COMPRESSION_GZIP ou SOAP_COMPRESSION_DEFLATE . Par exemple: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP .
codage Codage interne des caractères (TODO: valeurs possibles)
trace Booléen , la valeur par défaut est FALSE . Permet le traçage des requêtes afin que les erreurs puissent être retracées. Permet d'utiliser __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() et __getLastResponseHeaders() .
classmap Mapper les types WSDL aux classes PHP. La valeur doit être un tableau avec des types WSDL en tant que clés et des noms de classe PHP en tant que valeurs.
des exceptions Valeur booléenne Faut-il des erreurs SOAP exceptions (de type `SoapFault).
délai de connection dépassé Délai d'attente (en secondes) pour la connexion au service SOAP.
typemap Tableau de mappages de types. Tableau doit être paires clé / valeur avec les touches suivantes: type_name , type_ns (URI d'espace de nommage), from_xml (rappel acceptant un paramètre de chaîne) et to_xml (callback accepter un paramètre d'objet).
cache_wsdl Comment (le cas échéant) le fichier WSDL doit être mis en cache. Les valeurs possibles sont WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY ou WSDL_CACHE_BOTH .
agent utilisateur Chaîne à utiliser dans l'en User-Agent tête User-Agent .
stream_context Une ressource pour un contexte.
fonctionnalités Bitmask de SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS .
rester en vie ( Version PHP> = 5.4 uniquement ) Valeur booléenne . Envoyez soit la Connection: Keep-Alive tête Connection: Keep-Alive ( TRUE ) ou Connection: Close header ( FALSE ).
ssl_method ( Version PHP> = 5.5 uniquement ) Quelle version de SSL / TLS utiliser? Les valeurs possibles sont SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 ou SOAP_SSL_METHOD_SSLv23 .

Problème avec PHP 32 bits : en PHP 32 bits, les chaînes numériques supérieures à 32 bits qui sont automatiquement converties en entier par xs:long entraînent le dépassement de la limite de 32 bits, en le convertissant en 2147483647 . Pour contourner ce __soapCall() les chaînes avant de les transmettre à __soapCall() .

Mode WSDL

Tout d'abord, créez un nouvel objet SoapClient , en transmettant l'URL au fichier WSDL et éventuellement un tableau d'options.

// 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
]);

Utilisez ensuite l'objet $soap pour appeler vos méthodes SOAP.

$result = $soap->requestData(['a', 'b', 'c']);

Mode non WSDL

Ceci est similaire au mode WSDL, sauf que nous passons NULL tant que fichier WSDL et que nous nous assurons de définir l' location et les options de l' uri .

$soap = new SoapClient(NULL, [
    'location' => 'https://example.com/soap/endpoint',
    'uri' => 'namespace'
]);

Classmaps

Lors de la création d'un client SOAP en PHP, vous pouvez également définir une clé de classmap dans le tableau de configuration. Cette classmap définit les types définis dans le WSDL qui doivent être mappés sur les classes réelles, au lieu du StdClass par défaut. La raison pour laquelle vous souhaitez le faire est que vous pouvez obtenir une complétion automatique des champs et des appels de méthode sur ces classes, au lieu d'avoir à deviner quels champs sont définis sur le StdClass normal.

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,
    ]
]);

Après avoir configuré le classmap, chaque fois que vous effectuez une opération spécifique renvoyant un type Address ou Book , SoapClient instanciera cette classe, remplira les champs avec les données et les renverra de l'appel d'opération.

// 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;

Suivi des requêtes et des réponses SOAP

Parfois, nous voulons voir ce qui est envoyé et reçu dans la requête SOAP. Les méthodes suivantes renverront le code XML dans la requête et la réponse:

SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()

Par exemple, supposons que nous ayons une constante ENVIRONMENT et que la valeur de cette constante est définie sur DEVELOPMENT nous voulons faire écho à toutes les informations lorsque l'appel à getAddress génère une erreur. Une solution pourrait être:

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow