PHP
Client SOAP
Recherche…
Syntaxe
- __getFunctions () // Retourne un tableau de fonctions pour le service (mode WSDL uniquement)
- __getTypes () // Renvoie un tableau de types pour le service (mode WSDL uniquement)
- __getLastRequest () // Renvoie le code XML de la dernière demande (option de
trace
requise) - __getLastRequestHeaders () // Renvoie les en-têtes de la dernière requête (option de
trace
requise) - __getLastResponse () // Retourne le code XML de la dernière réponse (option de
trace
requise) - __getLastResponseHeaders () // Renvoie les en-têtes de la dernière réponse (option de
trace
requise)
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 en2147483647
. 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()
);
}
...
}