PHP
Klient SOAP
Szukaj…
Składnia
- __getFunctions () // Zwraca tablicę funkcji dla usługi (tylko tryb WSDL)
- __getTypes () // Zwraca tablicę typów dla usługi (tylko tryb WSDL)
- __getLastRequest () // Zwraca XML z ostatniego żądania (wymaga opcji
trace
) - __getLastRequestHeaders () // Zwraca nagłówki z ostatniego żądania (wymaga opcji
trace
) - __getLastResponse () // Zwraca XML od ostatniej odpowiedzi (wymaga opcji
trace
) - __getLastResponseHeaders () // Zwraca nagłówki od ostatniej odpowiedzi (wymaga opcji
trace
)
Parametry
Parametr | Detale |
---|---|
$ wsdl | URI WSDL lub NULL jeśli używasz trybu innego niż WSDL |
Opcje $ | Tablica opcji dla SoapClient. Tryb inny niż WSDL wymaga ustawienia location i uri , wszystkie pozostałe opcje są opcjonalne. Możliwe wartości znajdują się w tabeli poniżej. |
Uwagi
Klasa SoapClient
jest wyposażona w metodę __call
. Nie można tego nazwać bezpośrednio. Zamiast tego pozwala to na:
$soap->requestInfo(['a', 'b', 'c']);
Spowoduje to wywołanie metody SOAP requestInfo
.
Tabela możliwych wartości $options
( tablica par klucz / wartość ):
Opcja | Detale |
---|---|
Lokalizacja | URL serwera SOAP. Wymagane w trybie innym niż WSDL. Może być używany w trybie WSDL w celu zastąpienia adresu URL. |
uri | Docelowa przestrzeń nazw usługi SOAP. Wymagane w trybie innym niż WSDL. |
styl | Możliwe wartości to SOAP_RPC lub SOAP_DOCUMENT . Obowiązuje tylko w trybie innym niż WSDL. |
posługiwać się | Możliwe wartości to SOAP_ENCODED lub SOAP_LITERAL . Obowiązuje tylko w trybie innym niż WSDL. |
wersja_mydła | Możliwe wartości to SOAP_1_1 ( domyślnie ) lub SOAP_1_2 . |
poświadczenie | Włącz uwierzytelnianie HTTP. Możliwe wartości to SOAP_AUTHENTICATION_BASIC ( domyślnie ) lub SOAP_AUTHENTICATION_DIGEST . |
Zaloguj sie | Nazwa użytkownika do uwierzytelnienia HTTP |
hasło | Hasło do uwierzytelnienia HTTP |
proxy_host | URL serwera proxy |
Port proxy | Port serwera proxy |
proxy_login | Nazwa użytkownika dla proxy |
hasło_ proxy | Hasło do serwera proxy |
local_cert | Ścieżka do certyfikatu klienta HTTPS (do uwierzytelnienia) |
hasło | Hasło do certyfikatu klienta HTTPS |
kompresja | Kompresuj żądanie / odpowiedź. Wartość jest SOAP_COMPRESSION_ACCEPT z SOAP_COMPRESSION_GZIP lub SOAP_COMPRESSION_DEFLATE . Na przykład: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP . |
kodowanie | Wewnętrzne kodowanie znaków (TODO: możliwe wartości) |
ślad | Boolean , domyślnie FALSE . Umożliwia śledzenie żądań, aby można było śledzić błędy. Umożliwia używanie __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() i __getLastResponseHeaders() . |
mapa klas | Odwzoruj typy WSDL na klasy PHP. Wartość powinna być tablicą z typami WSDL jako kluczami i nazwami klas PHP jako wartości. |
wyjątki | Wartość logiczna . Powinny błędy SOAP (wyjątki typu `SoapFault). |
czas połączenia minął | Limit czasu (w sekundach) dla połączenia z usługą SOAP. |
mapa strony | Tablica odwzorowań typów. Tablica powinna być kluczowe pary wartości / z następujących klawiszy: type_name , type_ns (nazw URI), from_xml (zwrotna przyjmowanie parametr jeden ciąg) i to_xml (parametr callback przyjmując jeden obiekt). |
cache_wsdl | Jak (jeśli w ogóle) powinien być buforowany plik WSDL. Możliwe wartości to WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY lub WSDL_CACHE_BOTH . |
agent użytkownika | Ciąg znaków do użycia w nagłówku User-Agent . |
stream_context | Zasób dla kontekstu. |
cechy | Maska bitów SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS . |
utrzymać przy życiu | ( Tylko wersja PHP> = 5.4 ) Wartość logiczna . Wyślij albo Connection: Keep-Alive header ( TRUE ), albo Connection: Close header ( FALSE ). |
ssl_method | ( Tylko wersja PHP> = 5.5 ) Której wersji protokołu SSL / TLS użyć. Możliwe wartości to SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 lub SOAP_SSL_METHOD_SSLv23 . |
Problem z 32-bitowym PHP : w 32-bitowym PHP ciągi liczbowe większe niż 32 bity, które są automatycznie rzutowane na liczbę całkowitą przez
xs:long
powodują, że osiągną limit 32 bitów, przesyłając go do2147483647
. Aby obejść ten problem, należy rzutować ciągi znaków na zmiennoprzecinkowe przed przekazaniem ich do__soapCall()
.
Tryb WSDL
Najpierw utwórz nowy obiekt SoapClient
, przekazując adres URL do pliku WSDL i opcjonalnie tablicę opcji.
// 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
]);
Następnie użyj obiektu $soap
do wywołania metod SOAP.
$result = $soap->requestData(['a', 'b', 'c']);
Tryb inny niż WSDL
Jest to podobne do trybu WSDL, z tym wyjątkiem, że przekazujemy NULL
jako plik WSDL i upewnij się, że ustawiłeś opcje location
i uri
.
$soap = new SoapClient(NULL, [
'location' => 'https://example.com/soap/endpoint',
'uri' => 'namespace'
]);
Mapy klas
Podczas tworzenia klienta SOAP w PHP można również ustawić klucz classmap
w tablicy konfiguracji. Ta classmap
określa, które typy zdefiniowane w WSDL powinny być mapowane na rzeczywiste klasy, zamiast domyślnej StdClass
. Powodem, dla którego chcesz to zrobić, jest to, że możesz uzyskać automatyczne uzupełnianie pól i wywołań metod w tych klasach, zamiast zgadywać, które pola są ustawione na zwykłym 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,
]
]);
Po skonfigurowaniu mapy klas, za każdym razem, gdy wykonasz określoną operację, która zwraca typ Address
lub Book
, SoapClient utworzy instancję tej klasy, wypełni pola danymi i zwróci je z wywołania operacji.
// 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;
Śledzenie żądania i odpowiedzi SOAP
Czasami chcemy spojrzeć na to, co jest wysyłane i odbierane w żądaniu SOAP. Następujące metody zwrócą XML w żądaniu i odpowiedzi:
SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()
Załóżmy na przykład, że mamy stałą ENVIRONMENT
a gdy wartość tej stałej jest ustawiona na DEVELOPMENT
, chcemy echo wszystkich informacji, gdy wywołanie getAddress
zgłosi błąd. Jednym z rozwiązań może być:
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()
);
}
...
}