В настоящее время мы создаем PHP SoapClient с дайджест-аутентификацией по HTTPS.Все работает для основного файла wsdl, но файл wsdl импортирует схему xsd поверх другого URL.Проблема заключается в том, что заголовок дайджеста корректен для первого вызова SoapClient для загрузки основного файла wsdl, поскольку его окончание равно /DispatcherWS?wsdl
и генерируется атрибут Digest-Response, включая uri /DispatcherWS?wsdl
.Теперь SoapClient пытается импортировать schma из /DispatcherWS?xsd=1
, который не может работать, потому что это другой URI, и Digest-Auth-Header должен быть восстановлен с URI Schema-Import.Как можно заархивировать это поведение с помощью PHP SoapClient.
Ошибка из-за неудачного импорта схемы: "SOAP-ERROR: Parsing Schema: can't import schema from 'https://EXAMPLE.COM:443/webservice/DispatcherWS?xsd=1'"
Наш код:
$soapParams = [
'encoding' => 'UTF-8',
'trace' => 1,
'exceptions' => false,
'cache_wsdl' => WSDL_CACHE_NONE,
'authentication' => SOAP_AUTHENTICATION_DIGEST,
'login' => $this->username,
'password' => $this->password,
'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP,
'stream_context' => stream_context_create([
'http' => [
'header' => sprintf('Authorization: Digest username="***", realm="***", nonce="***", uri="/webservice/DispatcherWS?wsdl", algorithm="MD5", qop=auth, nc=00000001, cnonce="***", response="***", opaque="***"')
]
])
];
$this->client = new SoapClient($this->wsdl, $soapParams);
(Да, имя пользователя, пароль и сгенерированные хэши для аутентификации дайджеста верны, и мы проверили их с почтальоном).
Кстати, все работает в почтальоне, поэтому в Postman должна быть реализована другая логика для регенерации аутентификацииheader.
Мы много гуглили и потратили как минимум два полных дня на эту тему.Было бы замечательно, если бы у кого-то была такая же проблема в прошлом, и она могла бы дать нам несколько советов или решение.Заранее спасибо !!