PHP
Клиент SOAP
Поиск…
Синтаксис
- __getFunctions () // Возвращает массив функций для обслуживания (только для режима WSDL)
- __getTypes () // Возвращает массив типов для службы (только режим WSDL)
- __getLastRequest () // Возвращает XML из последнего запроса (требуется опция
trace
) - __getLastRequestHeaders () // Возвращает заголовки последнего запроса (требуется опция
trace
) - __getLastResponse () // Возвращает XML из последнего ответа (требуется опция
trace
) - __getLastResponseHeaders () // Возвращает заголовки последнего ответа (требуется опция
trace
)
параметры
параметр | подробности |
---|---|
$ WSDL | URI WSDL или NULL при использовании режима, отличного от WSDL |
$ варианты | Массив вариантов для SoapClient. Режим Non-WSDL требует установки location и uri , все остальные опции являются необязательными. См. Таблицу ниже для возможных значений. |
замечания
Класс SoapClient
оснащен __call
методом. Это не следует вызывать напрямую. Вместо этого это позволяет:
$soap->requestInfo(['a', 'b', 'c']);
Это вызовет requestInfo
SOAP requestInfo
.
Таблица возможных значений $options
( массив пар ключ / значение ):
вариант | подробности |
---|---|
место нахождения | URL-адрес сервера SOAP. Требуется в режиме, отличном от WSDL. Может использоваться в режиме WSDL для переопределения URL-адреса. |
URI | Целевое пространство имен службы SOAP. Требуется в режиме, отличном от WSDL. |
стиль | Возможными значениями являются SOAP_RPC или SOAP_DOCUMENT . Действует только в режиме, отличном от WSDL. |
использование | Возможные значения: SOAP_ENCODED или SOAP_LITERAL . Действует только в режиме, отличном от WSDL. |
soap_version | Возможные значения: SOAP_1_1 (по умолчанию ) или SOAP_1_2 . |
аутентификация | Включить проверку подлинности HTTP. Возможные значения: SOAP_AUTHENTICATION_BASIC (по умолчанию ) или SOAP_AUTHENTICATION_DIGEST . |
авторизоваться | Имя пользователя для проверки подлинности HTTP |
пароль | Пароль для проверки подлинности HTTP |
proxy_host | URL прокси-сервера |
порт прокси | Порт прокси-сервера |
proxy_login | Имя пользователя для прокси |
PROXY_PASSWORD | Пароль для прокси |
local_cert | Путь к сертификату клиента HTTPS (для проверки подлинности) |
ключевая фраза | Парольная фраза для сертификата клиента HTTPS |
компрессия | Сжимать запрос / ответ. Значение - это битовая SOAP_COMPRESSION_ACCEPT с SOAP_COMPRESSION_GZIP или SOAP_COMPRESSION_DEFLATE . Например: SOAP_COMPRESSION_ACCEPT \| SOAP_COMPRESSION_GZIP . |
кодирование | Внутреннее кодирование символов (TODO: возможные значения) |
след | Boolean , по умолчанию FALSE . Позволяет отслеживать запросы, поэтому ошибки могут быть возвращены. Включает использование __getLastRequest() , __getLastRequestHeaders() , __getLastResponse() и __getLastResponseHeaders() . |
classmap | Отображать типы WSDL для классов PHP. Значение должно быть массивом с типами WSDL в виде ключей и имен классов PHP в качестве значений. |
исключения | Логическое значение. Должны быть исключения SOAP ошибок (типа `SoapFault). |
время соединения вышло | Таймаут (в секундах) для подключения к службе SOAP. |
TypeMap | Массив отображения типов. Массив должен быть пар ключ / значение со следующими ключами: type_name , type_ns (URI пространства имен), from_xml (обратный вызов принимает один строковый параметр) и to_xml (обратный вызов принимает один параметр объекта). |
cache_wsdl | Как (если вообще) должен быть кэширован файл WSDL. Возможные значения: WSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY или WSDL_CACHE_BOTH . |
user_agent | Строка для использования в заголовке User-Agent . |
stream_context | Ресурс для контекста. |
функции | SOAP_SINGLE_ELEMENT_ARRAYS маска SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLS . |
keep_alive | ( Только версия PHP> = 5.4 ) Булево значение. Отправьте либо Connection: Keep-Alive header ( TRUE ), либо Connection: Close header ( FALSE ). |
ssl_method | ( Только версия PHP> = 5.5 ) Какую версию SSL / TLS использовать. Возможные значения: SOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 или SOAP_SSL_METHOD_SSLv23 . |
Проблема с 32-битным PHP : в 32-битном PHP числовые строки, превышающие 32 бита, которые автоматически отбрасываются на integer с помощью
xs:long
, приведут к тому, что он достигнет 32-битного предела, отбросив его до2147483647
. Чтобы обойти это,__soapCall()
строки для плавания, прежде чем передавать их в__soapCall()
.
Режим WSDL
Сначала создайте новый объект SoapClient
, передав URL-адрес в файл WSDL и, при необходимости, массив параметров.
// 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
]);
Затем используйте объект $soap
для вызова методов SOAP.
$result = $soap->requestData(['a', 'b', 'c']);
Режим без WSDL
Это похоже на режим WSDL, за исключением того, что мы передаем NULL
в качестве файла WSDL и не забудьте указать параметры location
и uri
.
$soap = new SoapClient(NULL, [
'location' => 'https://example.com/soap/endpoint',
'uri' => 'namespace'
]);
Classmaps
При создании SOAP-клиента в PHP вы также можете установить ключ classmap
в массиве конфигурации. Эта classmap
определяет, какие типы, определенные в WSDL, должны быть сопоставлены фактическим классам, а не по умолчанию StdClass
. Причина, по которой вы хотели бы сделать это, - это то, что вы можете получить автоматическое заполнение полей и вызовов методов на этих классах, вместо того, чтобы угадывать, какие поля заданы на обычном 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,
]
]);
После настройки класса карты всякий раз, когда вы выполняете определенную операцию, которая возвращает Address
или Book
, SoapClient будет создавать экземпляр этого класса, заполнять поля данными и возвращать их из вызова операции.
// 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
Иногда мы хотим посмотреть, что отправлено и получено в запросе SOAP. Следующие методы возвратят XML в запросе и ответе:
SoapClient::__getLastRequest()
SoapClient::__getLastRequestHeaders()
SoapClient::__getLastResponse()
SoapClient::__getLastResponseHeaders()
Например, предположим, что у нас есть константа ENVIRONMENT
и когда значение этой константы установлено в DEVELOPMENT
мы хотим getAddress
всю информацию, когда вызов getAddress
вызывает ошибку. Одним из решений может быть:
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()
);
}
...
}