PHP SoapClient Digest-Auth не подходит для импорта XSD - PullRequest
0 голосов
/ 22 февраля 2019

В настоящее время мы создаем 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.

Мы много гуглили и потратили как минимум два полных дня на эту тему.Было бы замечательно, если бы у кого-то была такая же проблема в прошлом, и она могла бы дать нам несколько советов или решение.Заранее спасибо !!

...