我有一个复杂的SOAP标头,无法在Web服务上传递安全性:
以下是必需的XML:
<soapenv:Header>
<sec:Customer>
<sec:Name>Name</sec:Name>
</sec:Customer>
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<UsernameToken>
<Username>User</Username>
<Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</Password>
</UsernameToken>
</Security>
</soapenv:Header>';
这是我试过的PHP:
$client = new SoapClient($wsdl, array( 'trace' => 1,'exceptions' => 1));
$cust = array('Name' => "Name");
$token = array('UsernameToken' => array('Username' => "User",'Password' => "Password" ));
$headers = array();
$headers[] = new SoapHeader($ns1,'Customer',$cust);
$headers[] = new SoapHeader($ns2,'Security',$token);
$client->__setSoapHeaders($headers);
答案 0 :(得分:0)
WsSecutiry标题是特殊标题,设置起来可能很棘手。它们未被声明为其他常见的肥皂标题。
您的WsSecurity标头非常基本,但它包含密码摘要,随机数和其他时间戳信息时可能更复杂。可以使用WsSecurity项目轻松添加WsSecurity标头。
您必须确定发送的内容(SoapClient::__getLastRequest()),并且如果您不希望返回错误,则必须确保它与预期匹配。如果仍有错误,请先与网络服务提供商联系。