(PHP 5, PHP 7, PHP 8)
SoapClient::__construct — Конструктор класса SoapClient
Создаёт объект SoapClient для подключения к службе SOAP.
wsdlURI WSDL-файла, описывающего сервис, который используется для автоматической настройки клиента. Если он не указан, клиент будет работать в режиме без WSDL. mode.
Замечание:
По умолчанию WSDL-файл будет кешироваться для повышения производительности. Чтобы отключить или настроить кеширование, смотрите раздел Опции настройки SOAP и параметр
cache_wsdl.
options
Ассоциативный массив, определяющий дополнительные параметры для клиента SOAP.
Если указан параметр wsdl, это необязательно, в противном случае,
по крайней мере параметры location и url должны быть указаны.
location
string
URL-адрес сервера SOAP для отправки запроса.
Обязателен, если параметр wsdl не указан.
Если предоставлены и параметр wsdl и
location, параметр location
будет приоритетнее расположения, указанного в WSDL-файле.
uri
string
Целевое пространство имён службы SOAP.
Обязателен, если параметр wsdl не указан;
в противном случае игнорируется.
style
int
Определяет стиль связывания, который будет использоваться клиентом, используя константы
SOAP_RPC и SOAP_DOCUMENT.
Константа SOAP_RPC указывает на привязку в стиле RPC, где
тело запроса SOAP содержит стандартное кодирование вызова функции.
Константа SOAP_DOCUMENT указывает на привязку в стиле документа,
где тело запроса SOAP содержит XML-документ с определённым службой значением.
Если указан параметр wsdl,
то этот параметр игнорируется, а стиль считывается из WSDL-файла.
Если ни этот параметр, ни параметр wsdl
не указан, используется RPC-стиль.
use
int
Определяет стиль кодировки, который будет использоваться клиентом, используя константы
SOAP_ENCODED или SOAP_LITERAL.
Константа SOAP_ENCODED указывает на кодирование с использованием типов
определённых в спецификации SOAP.
Константа SOAP_LITERAL указывает на кодирование с использованием схемы
определённой службой.
Если указан параметр wsdl, этот
параметр игнорируется, а кодировка считывается из файла WSDL.
Если ни этот параметр, ни параметр wsdl
не указаны, используется стиль "encoded".
soap_version
int
Определяет версию протокола SOAP:
Константа SOAP_1_1 для SOAP 1.1,
или SOAP_1_2 для SOAP 1.2.
Если опущено, используется SOAP 1.1.
authentication
int
Указывает метод аутентификации при использовании HTTP-аутентификации
в запросах. Значение может быть либо SOAP_AUTHENTICATION_BASIC,
либо SOAP_AUTHENTICATION_DIGEST.
Если параметр не указан, но указан параметр login,
используется Basic Authentication.
login
string
Имя пользователя для использования при аутентификации HTTP Basic или Digest.
password
string
Пароль для использования при аутентификации HTTP Basic или Digest.
Не следует путать с параметром passphrase,
который используется при аутентификации сертификата клиента HTTPS.
local_cert
string
Путь к клиентскому сертификату для использования с аутентификацией HTTPS. Должен быть файл в кодировке PEM, содержащий сертификат и закрытый ключ.
Файл также может включать цепочку эмитентов, которая должна идти после сертификата клиента.
Также может быть задан с помощью параметра
stream_context,
который также поддерживает указание отдельного файла закрытого ключа.
passphrase
string
Ключевая фраза для клиентского сертификата, указанного в параметре
local_cert.
Не следует путать с параметром password,
который используется для аутентификации Basic или Digest.
Можно также установить с помощью параметра
stream_context.
proxy_host
string
Имя хоста для использования в качестве прокси-сервера для HTTP-запросов.
Также должен быть указан параметр proxy_port.
proxy_port
int
TCP-порт для использования при подключении к прокси-серверу,
указанному в параметре proxy_host.
proxy_login
string
Необязательное имя пользователя для аутентификации на прокси-сервере,
указанном в параметре proxy_host, используя HTTP
Basic Authentication.
proxy_password
string
Необязательный пароль для аутентификации на прокси-сервере,
указанном в параметре proxy_host, используя HTTP
Basic Authentication.
compression
int
Включает сжатие HTTP SOAP запросов и ответов.
Значение должно быть побитовым ИЛИ из трёх частей:
необязательная SOAP_COMPRESSION_ACCEPT,
для отправки заголовка "Accept-Encoding";
либо константа SOAP_COMPRESSION_GZIP
или SOAP_COMPRESSION_DEFLATE для указания
используемого алгоритма сжатия;
число от 1 до 9, чтобы указать уровень сжатия, который будет использоваться в запросе.
Например, чтобы включить двустороннее сжатие gzip с максимальным
уровнем сжатия, используйте
SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9.
encoding
string
Определяет внутреннюю кодировку символов. Запросы всегда отправляются в UTF-8 и преобразуются в эту кодировку и обратно.
trace
bool
Захватывает информацию о запросе и ответе, которая затем может быть доступна с помощью методов: SoapClient::__getLastRequest(), SoapClient::__getLastRequestHeaders(), SoapClient::__getLastResponse() и SoapClient::__getLastResponseHeaders().
Если опущено, по умолчанию используется значение false.
classmap
array
Используется для сопоставления типов, определённых в WSDL с классами PHP. Должен быть указан ассоциативный массив (array) с именами типов из WSDL в качестве ключей и именами классов PHP в качестве значений. Обратите внимание, что имя типа элемента не обязательно совпадает с именем элемента (тега).
Предоставляемые имена классов всегда должны быть полностью определены с помощью любых
пространств имён и никогда не должны
начинаться с ведущего слеша (\).
Правильная форма может быть указана с помощью
::class.
Обратите внимание, что при создании класса конструктор вызываться не будет, но магические методы __set() и __get() будут вызываться для отдельных свойств.
typemap
array
Используется для определения сопоставлений типов с помощью определяемых
пользователем callback-функций.
Каждое сопоставление типов должно представлять собой массив с ключами
type_name (строка (string), определяющая тип элемента XML);
type_ns (строка (string), содержащая пространство имён URI);
from_xml (callable, принимающий один строковый параметр и возвращающий объект) и
to_xml (callable, принимающий один объектный параметр и возвращающий строку).
exceptions
bool
Определяет, будут ли ошибки выбрасывать исключение типа SoapFault.
По умолчанию значение true
connection_timeout
int
Определяет время ожидания в секундах для соединения с сервисом SOAP. Параметр не определяет время ожидания служб с медленными ответами. Чтобы ограничить время ожидания завершения вызовов, можно использовать параметр конфигурации default_socket_timeout.
cache_wsdl
int
Если указан параметр wsdl, а также параметр
soap.wsdl_cache_enabled
включён, этот параметр определяет тип кеширования.
Одно из значений: WSDL_CACHE_NONE,
WSDL_CACHE_DISK,
WSDL_CACHE_MEMORY или
WSDL_CACHE_BOTH.
Доступны два типа кеша: кеширование в памяти, которое кеширует WSDL в памяти текущего процесса и дисковое кеширование, которое кеширует WSDL в файле на диске, разделяемом между всеми процессами. Каталог, который будет использоваться для дискового кеша, определяется параметром soap.wsdl_cache_dir. Оба кеша используют одинаковое время жизни, определяемое параметром soap.wsdl_cache_ttl. У кеша в памяти также есть максимальное количество записей, определяемое параметром soap.wsdl_cache_limit.
Если не указано, будет использоваться параметр конфигурации soap.wsdl_cache.
user_agent
string
Значение для использования в HTTP-заголовке User-Agent
при выполнении запросов.
Можно также установить с помощью параметра
stream_context.
Если не указано, User-Agent будет "PHP-SOAP/"
за которым следует значение PHP_VERSION.
stream_context
resource
Контекст stream context, созданный с помощью функции stream_context_create(), которая позволяет установить дополнительные параметры.
Контекст может включать параметры контекста сокета,
параметры контекста SSL,
а также выбранные опции контекста HTTP:
content_type, header,
max_redirects, protocol_version,
и user_agent.
Обратите внимание, что следующие HTTP-заголовки генерируются автоматически или на основе других
параметров и будут игнорироваться, если указаны в параметре контекста 'header':
host, connection,
user-agent, content-length,
content-type, cookie,
authorization и proxy-authorization
features
int
Битовая маска для включения одной или нескольких следующих функций:
SOAP_SINGLE_ELEMENT_ARRAYS
При декодировании ответа в массив по умолчанию определяется, появляется ли имя элемента один или несколько раз в определённом родительском элементе. Для элементов, которые появляются только один раз, свойство объекта позволяет получить прямой доступ к содержимому; для элементов, которые появляются более одного раза, свойство содержит массив с содержимым каждого соответствующего элемента.
Если включена функция SOAP_SINGLE_ELEMENT_ARRAYS,
элементы, которые появляются только один раз, помещаются в одноэлементный массив,
чтобы доступ был последовательным для всех элементов.
Это будет работать только при использовании WSDL, содержащего схему для ответа.
Для демонстрации смотрите раздел с примерами.
SOAP_USE_XSI_ARRAY_TYPE
Если параметру use или свойству WSDL
передано значение encoded, массивы принудительно используют тип
SOAP-ENC:Array, а не специфический для схемы.
SOAP_WAIT_ONE_WAY_CALLS
Ожидание ответа, даже если WSDL указывает на односторонний запрос.
keep_alive
bool
Логическое значение, определяющее, следует ли
отправлять заголовок Connection: Keep-Alive или
Connection: close.
По умолчанию true
ssl_method
string
Определяет версию протокола SSL или TLS для использования в защищённых
HTTP-соединениях вместо согласования по умолчанию.
Указание SOAP_SSL_METHOD_SSLv2 или SOAP_SSL_METHOD_SSLv3
заставит использовать SSL 2 или SSL 3, соответственно.
Указание константы SOAP_SSL_METHOD_SSLv23 не имеет никакого смысла;
константа существует только для обратной совместимости.
Начиная с PHP 7.2, указание константы SOAP_SSL_METHOD_TLS
также не имеет никакого смысла; в более ранних версиях константа
определяла принудительное использование TLS 1.0.
Обратите внимание, что SSL версий 2 и 3 считаются небезопасными и могут не поддерживаться установленной библиотекой OpenSSL.
Параметр объявлен УСТАРЕВШИМ, начиная с PHP 8.1.0.
Более гибкой альтернативой, позволяющей указывать
отдельные версии TLS, можно использовать параметр
stream_context
с параметром контекста 'crypto_method'.
Пример #1 Указание использования только TLS 1.3
<?php
$context = stream_context_create([
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_3_CLIENT
]
]);
$client = new SoapClient("some.wsdl", ['context' => $context]);
Метод SoapClient::__construct() выводит ошибку уровня
E_ERROR, если параметры location и
uri не указаны в режиме не-WSDL.
Выбрасывается исключение SoapFault, если
параметр wsdl URI не может быть загружен.
Пример #2 Пример использования SoapClient::__construct()
<?php
$client = new SoapClient("some.wsdl");
$client = new SoapClient("some.wsdl", array('soap_version' => SOAP_1_2));
$client = new SoapClient("some.wsdl", array('login' => "some_name",
'password' => "some_password"));
$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080));
$client = new SoapClient("some.wsdl", array('proxy_host' => "localhost",
'proxy_port' => 8080,
'proxy_login' => "some_name",
'proxy_password' => "some_password"));
$client = new SoapClient("some.wsdl", array('local_cert' => "cert_key.pem"));
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/",
'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL));
$client = new SoapClient("some.wsdl",
array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 9));
$client = new SoapClient("some.wsdl", array('encoding'=>'ISO-8859-1'));
class MyBook {
public $title;
public $author;
}
$client = new SoapClient("books.wsdl", array('classmap' => array('book' => "MyBook")));
$typemap = array(
array("type_ns" => "http://schemas.example.com",
"type_name" => "book",
"from_xml" => "unserialize_book",
"to_xml" => "serialize_book")
);
$client = new SoapClient("books.wsdl", array('typemap' => $typemap));
?>
Пример #3 Пример использования SOAP_SINGLE_ELEMENT_ARRAYS
<?php
/* Предполагая, что ответ, подобный этому, и соответствующий WSDL:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:example">
<SOAP-ENV:Body>
<response>
<collection>
<item>Single</item>
</collection>
<collection>
<item>First</item>
<item>Second</item>
</collection>
</response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*/
echo "По умолчанию:\n";
$client = new TestSoapClient(__DIR__ . '/temp.wsdl');
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );
echo "\nС помощью SOAP_SINGLE_ELEMENT_ARRAYS:\n";
$client = new TestSoapClient(__DIR__ . '/temp.wsdl', ['features' => SOAP_SINGLE_ELEMENT_ARRAYS]);
$response = $client->exampleRequest();
var_dump( $response->collection[0]->item );
var_dump( $response->collection[1]->item );Результат выполнения приведённого примера:
По умолчанию:
string(6) "Single"
array(2) {
[0] =>
string(5) "First"
[1] =>
string(6) "Second"
}
С помощью SOAP_SINGLE_ELEMENT_ARRAYS:
array(1) {
[0] =>
string(6) "Single"
}
array(2) {
[0] =>
string(5) "First"
[1] =>
string(6) "Second"
}