当我尝试连接到网络服务时,我总是会遇到下一个错误
SoapFault异常:[s:Sender]验证消息的安全性时发生错误
我还必须使用安全标头,发送完整的肥皂请求:
<env:Envelope>
<env:Header>
<ns2:Action env:mustUnderstand="1">
http://ws.agiv.be/crabtools/ICRABTools/GetAddressLocation
</ns2:Action>
<ns2:MessageID>urn:uuid:10000001blsd-ghfs</ns2:MessageID>
<ns2:ReplyTo>
<ns2:Address>
http://www.w3.org/2005/08/addressing/anonymous
</ns2:Address>
</ns2:ReplyTo>
<ns2:To>https://grab.beta.agiv.be/Tools/CRABTools.svc</ns2:To>
<o:Security env:mustUnderstand="1">
<wsu:Timestamp env:mustUnderstand="1">
<wsu:Created>2010-06-09T13:44:19Z</wsu:Created>
<wsu:Expires>2010-06-09T13:49:19Z</wsu:Expires>
</wsu:Timestamp>
<o:UsernameToken>
<o:Username>myUsername</o:Username>
<o:Password>myPassword</o:Password>
</o:UsernameToken>
</o:Security>
</env:Header>
<env:Body>
<ns1:GetAddressLocation>
<ns1:houseNumberId>2306852</ns1:houseNumberId>
</ns1:GetAddressLocation>
</env:Body>
</env:Envelope>
我的用户名和密码是正确的,我已经尝试过更改过期日期,但这并没有解决它。
还有什么可能是造成这种错误的原因?
也许我必须在我的php代码中配置更多东西。
我创建了一个覆盖Zend_Soap_Client
的类public function __soapCall($function_name, $arguments, $options=null, $input_headers=null, $output_headers=null) {
$inputheaders = array($this->wsactionheader(),$this->unencryptedSecurityHeader());
$result = parent::__soapCall($this->functionname, $arguments, $options, $inputheaders);
return $result;
}
答案 0 :(得分:0)
如果您告诉我们您尝试连接的服务器类型,可能会有所帮助。 另请在此处提供请求标题。使用这样的代码
echo "REQUEST HEADERS:\n" . $client->getLastRequestHeaders() . "\n";
echo "REQUEST:\n" . $client->getLastRequest() . "\n";
你能做的是:
1)确保在soap客户端中指定了wsdl。
2)这可能是“命名空间”问题。确保您的SOAP请求使用与服务器相同的“信封”格式(在WSDL中指定),即检查命名空间属性,如
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:env="http://www.w3.org/2003/05/soap-envelope"
如果命名空间与wsdl中的命名空间不同,请尽量避免在Zend_Soap_Client中包含的内置PHP SoapClient中显式指定“soap_version”。前者总是指定'soap_version',这导致xmlns:env="http://www.w3.org/2003/05/soap-envelope"
3)询问工作请求XML示例和/或完整HTTP跟踪,并与您的比较(差异)。