对于XSD导入,PHP SoapClient Digest-Auth错误

时间:2019-02-22 09:39:15

标签: php xml soap xsd wsdl

我们当前正在构建具有通过HTTPS进行摘要式身份验证的PHP SoapClient。一切都对主wsdl文件起作用,但是wsdl文件在另一个URL上导入了xsd模式。问题在于,摘要头对于SoapClient首次调用以加载主wsdl文件是正确的,因为其结尾为/DispatcherWS?wsdl,并且生成了Digest-Response属性,其中包括uri /DispatcherWS?wsdl。现在,SoapClient尝试从/DispatcherWS?xsd=1导入模式,这是行不通的,因为它是另一个uri,并且Digest-Auth-Header应该用Schema-Import的uri重新生成。如何使用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);

(是的,摘要身份验证的用户名,密码和生成的哈希是正确的,我们用邮递员对其进行了测试。)

顺便说一下,一切都在邮递员中工作,因此邮递员必须实现另一种逻辑以重新生成auth标头。

我们用Google搜索了很多,并在此主题上花了整整两天的时间。如果任何人在过去遇到过同样的问题,并且可以向我们提供一些提示或解决方案,那将是很好的。在此先感谢!

0 个答案:

没有答案