PHP
SOAP-klient
Sök…
Syntax
- __getFunctions () // Returnerar en rad funktioner för service (endast WSDL-läge)
- __getTypes () // Returnerar array av typer för service (endast WSDL-läge)
- __getLastRequest () // Returnerar XML från den senaste begäran (Kräver
trace
) - __getLastRequestHeaders () // Returnerar rubriker från den senaste begäran (Kräver
trace
) - __getLastResponse () // Returnerar XML från senaste svaret (Kräver
trace
) - __getLastResponseHeaders () // Returnerar rubriker från senaste svaret (Kräver
trace
)
parametrar
Parameter | detaljer |
---|---|
$ WSDL | URI för WSDL eller NULL om du använder icke-WSDL-läge |
$ alternativ | Utbud av alternativ för SoapClient. Icke-WSDL-läge kräver location och uri att ställa in, alla andra alternativ är valfria. Se tabell nedan för möjliga värden. |
Anmärkningar
SoapClient
klassen är utrustad med en __call
metod. Detta ska inte kallas direkt. Istället kan du göra det här:
$soap->requestInfo(['a', 'b', 'c']);
Detta kommer att anropa requestInfo
metoden requestInfo
.
Tabell över möjliga värden för $options
( array av nyckel- / värdepar ):
Alternativ | detaljer |
---|---|
plats | URL till SOAP-server. Krävs i läget utan WSDL. Kan användas i WSDL-läge för att åsidosätta URL: en. |
uri | Målnamn för SOAP-tjänst. Krävs i läget utan WSDL. |
stil | Möjliga värden är SOAP_RPC eller SOAP_DOCUMENT . Gäller endast i icke-WSDL-läge. |
använda sig av | Möjliga värden är SOAP_ENCODED eller SOAP_LITERAL . Gäller endast i icke-WSDL-läge. |
soap_version | Möjliga värden är SOAP_1_1 ( standard ) eller SOAP_1_2 . |
autentisering | Aktivera HTTP-autentisering. Möjliga värden är SOAP_AUTHENTICATION_BASIC ( standard ) eller SOAP_AUTHENTICATION_DIGEST . |
logga in | Användarnamn för HTTP-autentisering |
Lösenord | Lösenord för HTTP-autentisering |
proxy_host | URL för proxyserver |
proxy_port | Proxy-serverport |
proxy_login | Användarnamn för proxy |
proxy_password | Lösenord för proxy |
local_cert | Sökväg till HTTPS-klientcertifikat (för autentisering) |
lösenfras | Lösenfras för HTTPS-klientcert |
kompression | Komprimera begäran / svar. Värde är en bitmask av SOAP_COMPRESSION_ACCEPT med antingen SOAP_COMPRESSION_GZIP eller SOAP_COMPRESSION_DEFLATE . Till exempel: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP . |
kodning | Internt teckenkodning (TODO: möjliga värden) |
spår | Boolean , är standard FALSE . Aktiverar spårning av förfrågningar så att fel kan spåras tillbaka. Aktiverar användning av __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() och __getLastResponseHeaders() . |
classMap | Karta över WSDL-typer till PHP-klasser. Värde ska vara en matris med WSDL-typer som nycklar och PHP-klassnamn som värden. |
undantag | Booleskt värde. Bör SOAP-fel undantag (av typen SoapFault). |
connection_timeout | Timeout (i sekunder) för anslutningen till SOAP-tjänsten. |
typemap | Array av typmappningar. Array ska vara nyckel- / värdepar med följande knappar: type_name , type_ns (namnutrymme URI), from_xml (återuppringning accepterar en to_xml ) och to_xml (återuppringning accepterar en objektparameter). |
cache_wsdl | Hur (om inte alls) ska WSDL-filen cache. Möjliga värden är WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY eller WSDL_CACHE_BOTH . |
USER_AGENT | Sträng att använda i rubriken User User-Agent . |
stream_context | En resurs för ett sammanhang. |
funktioner | Bitmask av SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS . |
håll vid liv | ( PHP-version> = endast 5.4 ) Booleskt värde. Skicka antingen Connection: Keep-Alive header ( TRUE ) eller Connection: Close header ( FALSE ). |
ssl_method | ( PHP-version> = endast 5.5 ) Vilken SSL / TLS-version att använda. Möjliga värden är SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 eller SOAP_SSL_METHOD_SSLv23 . |
Problem med 32-bitars PHP : I 32-bitars PHP kommer numeriska strängar större än 32 bitar som automatiskt kastas till heltal med
xs:long
kommer att resultera i att den träffar 32-bitarsgränsen och kastar den till2147483647
. För att lösa detta, kastar du strängarna för att flyta innan du__soapCall()
till__soapCall()
.
WSDL-läge
SoapClient
ett nytt SoapClient
objekt som skickar webbadressen till WSDL-filen och eventuellt en rad alternativ.
// 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
]);
Använd sedan $soap
att kalla dina SOAP-metoder.
$result = $soap->requestData(['a', 'b', 'c']);
Icke-WSDL-läge
Detta liknar WSDL-läge, förutom att vi passerar NULL
som WSDL-fil och ser till att ställa in location
och uri
alternativ.
$soap = new SoapClient(NULL, [
'location' => 'https://example.com/soap/endpoint',
'uri' => 'namespace'
]);
Classmaps
När du skapar en SOAP-klient i PHP kan du också ställa in en classmap
i konfigurationsfältet. Detta classmap
definierar vilka typer som definierats i WSDL ska mappas till faktiska klasser istället för standard StdClass
. Anledningen till att du vill göra detta är att du kan få automatisk utfyllnad av fält och metodsamtal på dessa klasser istället för att behöva gissa vilka fält som är inställda i det vanliga 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,
]
]);
När du har konfigurerat klasskarta, så kommer SoapClient, när du utför en viss operation som returnerar en typ av Address
eller Book
, att instansera den klassen, fylla fälten med data och returnera den från operationssamtalet.
// 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;
Spåra SOAP-begäran och svar
Ibland vill vi titta på vad som skickas och tas emot i SOAP-begäran. Följande metoder returnerar XML i begäran och svar:
SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()
Anta till exempel att vi har en ENVIRONMENT
och när denna konstants värde är inställt på DEVELOPMENT
vill vi återkalla all information när samtalet till getAddress
kastar ett fel. En lösning kan vara:
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()
);
}
...
}