我面临着DHL Soap服务的问题。
我试图用一个基本web服务(getRateRequest)创建一个测试请求,但是总是会收到一个关于身份验证的错误。
我认为问题与服务所需的Soap基本身份验证有关,我尝试过不同的方法来完成身份验证,但没有成功。
这是我的一些测试。
测试1-8月在SoapClient安装中
$options = array(
'location' => $endpoint,
'login' => $userName,
'password' => $password,
'soap_version' => SOAP_1_1,
'trace' => 1,
'encoding' => 'utf-8',
'stream_context' => stream_context_create(['header'=> "Content-Type:text/xml"]),
);
$client = new SoapClient("https://wsbexpress.dhl.com:443/sndpt/expressRateBook?WSDL", $options);并使用__soapCall发送请求,传递soap方法和具有所有params的数组。
XML请求中的测试2-8月(我不知道这是否可能使用Soap)
<soapenv:Header>
<wsse:Security soapenv:mustunderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken wsu:id="UsernameToken-5" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Username>'.$userName.'</wsse:Username>
<wsse:Password type="PasswordText">'.$password.'</wsse:Password>
<wsse:Nonce encodingtype="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">eUYebYfsjztETJ4Urt8AJw==</wsse:Nonce>
<wsu:Created>' . date('Y-m-d H:i:s') . '</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<soapenv:Header/>并在post中使用带有XML的CURL发送请求。
我认为最好的方法是Test 1,但总是会出现关于未经授权的用户的错误。当然,我的凭据很好,因为我可以使用像SoapUI这样的外部工具来测试Soap服务。我只是觉得我搞错了认证。
提前谢谢你
发布于 2021-05-07 19:06:00
我觉得你把一些事情搞混了。在开始时,您提到了基本认证,但随后您的XML示例显示了WS-安全报头。web服务使用哪一个?
login和password选项只适用于基本身份验证,正如SoapClient文档所说。但是,如果您的服务需要作为SOAP头,那么这是行不通的。
对于使用WS,您需要扩展您的SoapClient来发送它,因为SoapClient不支持WS-安全性。例如,见:
https://stackoverflow.com/questions/67437947
复制相似问题