PHP
SOAP-client
Zoeken…
Syntaxis
- __getFunctions () // Retourneert een reeks functies voor service (alleen WSDL-modus)
- __getTypes () // Retourneert een reeks typen voor service (alleen WSDL-modus)
- __getLastRequest () // Retourneert XML van laatste verzoek (
tracevereist) - __getLastRequestHeaders () // Retourneert headers van het laatste verzoek (
tracevereist) - __getLastResponse () // Retourneert XML van laatste antwoord (
tracevereist) - __getLastResponseHeaders () // Retourneert headers van de laatste reactie (
tracevereist)
parameters
| Parameter | Details |
|---|---|
| $ wsdl | URI van WSDL of NULL als de niet-WSDL-modus wordt gebruikt |
| $ options | Reeks opties voor SoapClient. Niet-WSDL-modus vereist location en uri om in te stellen, alle andere opties zijn optioneel. Zie onderstaande tabel voor mogelijke waarden. |
Opmerkingen
De SoapClient klasse is uitgerust met een __call methode. Dit is niet direct te noemen. In plaats daarvan kunt u het volgende doen:
$soap->requestInfo(['a', 'b', 'c']);
Dit roept de methode requestInfo SOAP aan.
Tabel met mogelijke $options optiewaarden ( array van sleutel / waarde-paren ):
| Optie | Details |
|---|---|
| plaats | URL van SOAP-server. Vereist in niet-WSDL-modus. Kan worden gebruikt in WSDL-modus om de URL te overschrijven. |
| uri | Doelnaamruimte van SOAP-service. Vereist in niet-WSDL-modus. |
| stijl | Mogelijke waarden zijn SOAP_RPC of SOAP_DOCUMENT . Alleen geldig in niet-WSDL-modus. |
| gebruik | Mogelijke waarden zijn SOAP_ENCODED of SOAP_LITERAL . Alleen geldig in niet-WSDL-modus. |
| soap_version | Mogelijke waarden zijn SOAP_1_1 ( standaard ) of SOAP_1_2 . |
| authenticatie | Schakel HTTP-authenticatie in. Mogelijke waarden zijn SOAP_AUTHENTICATION_BASIC ( standaard ) of SOAP_AUTHENTICATION_DIGEST . |
| Log in | Gebruikersnaam voor HTTP-authenticatie |
| wachtwoord | Wachtwoord voor HTTP-authenticatie |
| Proxy host | URL van proxyserver |
| proxy_port | Proxyserverpoort |
| proxy_login | Gebruikersnaam voor proxy |
| Proxy_Password | Wachtwoord voor proxy |
| local_cert | Pad naar HTTPS-client cert (voor authenticatie) |
| wachtwoordzin | Wachtwoordzin voor HTTPS-client cert |
| samendrukking | Verzoek / antwoord comprimeren. Waarde is een bitmasker van SOAP_COMPRESSION_ACCEPT met SOAP_COMPRESSION_GZIP of SOAP_COMPRESSION_DEFLATE . Bijvoorbeeld: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP . |
| codering | Interne tekencodering (TODO: mogelijke waarden) |
| spoor | Boolean , standaard ingesteld op FALSE . Maakt het traceren van aanvragen mogelijk zodat fouten kunnen worden teruggetrokken. Schakelt het gebruik van __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() en __getLastResponseHeaders() . |
| classmap | Wijs WSDL-typen toe aan PHP-klassen. Waarde moet een array zijn met WSDL-typen als sleutels en PHP-klassenamen als waarden. |
| uitzonderingen | Booleaanse waarde. Moeten SOAP fouten uitzonderingen (van het type `SoapFault). |
| connection_timeout | Time-out (in seconden) voor de verbinding met de SOAP-service. |
| typemap | Matrix van typetoewijzingen. Matrix moet sleutel / waarde-paren zijn met de volgende sleutels: type_name , type_ns (naamruimte URI), from_xml (callback die één stringparameter accepteert) en to_xml (callback die één objectparameter accepteert). |
| cache_wsdl | Hoe (of helemaal) moet het WSDL-bestand in de cache worden opgeslagen. Mogelijke waarden zijn WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY of WSDL_CACHE_BOTH . |
| user_agent | Te gebruiken tekenreeks in de header User-Agent . |
| stream_context | Een bron voor een context. |
| Kenmerken | Bitmasker van SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS . |
| in leven houden | (Alleen PHP-versie> = 5.4 ) Booleaanse waarde. Verzend ofwel Connection: Keep-Alive header ( TRUE ) of Connection: Close header ( FALSE ). |
| ssl_method | (Alleen PHP-versie> = 5,5 ) Welke SSL / TLS-versie moet worden gebruikt. Mogelijke waarden zijn SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 of SOAP_SSL_METHOD_SSLv23 . |
Probleem met 32-bits PHP : In 32-bits PHP worden numerieke tekenreeksen groter dan 32 bits die automatisch door
xs:longnaar geheel getal worden gegotenxs:longzal ertoe leiden dat de 32-bits limiet wordt bereikt, waardoor deze wordt gegoten naar2147483647. U kunt dit omzeilen door de tekenreeksen te laten zweven voordat u deze__soapCall()aan__soapCall().
WSDL-modus
Maak eerst een nieuw SoapClient object en SoapClient de URL door aan het WSDL-bestand en optioneel een reeks opties.
// 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
]);
Gebruik vervolgens het $soap object om uw SOAP-methoden aan te roepen.
$result = $soap->requestData(['a', 'b', 'c']);
Niet-WSDL-modus
Dit is vergelijkbaar met de WSDL-modus, behalve dat we NULL doorgeven als het WSDL-bestand en zorgen dat we de location en uri opties instellen.
$soap = new SoapClient(NULL, [
'location' => 'https://example.com/soap/endpoint',
'uri' => 'namespace'
]);
Classmaps
Bij het maken van een SOAP-client in PHP kunt u ook een classmap sleutel in de configuratie-array instellen. Deze classmap definieert welke typen die in de WSDL zijn gedefinieerd, moeten worden toegewezen aan werkelijke klassen, in plaats van de standaard StdClass . De reden dat u dit zou willen doen, is omdat u velden en StdClass voor deze klassen automatisch kunt aanvullen, in plaats van te hoeven raden welke velden zijn ingesteld op de reguliere 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,
]
]);
Na het configureren van de klassenmap, zal de SoapClient elke keer dat u een bepaalde bewerking uitvoert die een type Address of Book retourneert, die klasse instantiëren, de velden met de gegevens vullen en terugzenden vanuit de aanroep van de bewerking.
// 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;
SOAP-verzoek en reactie traceren
Soms willen we kijken naar wat er in het SOAP-verzoek is verzonden en ontvangen. De volgende methoden retourneren de XML in het verzoek en antwoord:
SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()
Stel bijvoorbeeld dat we een constante ENVIRONMENT en wanneer de waarde van deze constante is ingesteld op DEVELOPMENT , willen we alle informatie echoën wanneer de aanroep van getAddress een foutmelding geeft. Een oplossing zou kunnen zijn:
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()
);
}
...
}