PHP中的SOAP标头

时间:2017-08-16 06:22:02

标签: php soap

我有一个复杂的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);

1 个答案:

答案 0 :(得分:0)

WsSecutiry标题是特殊标题,设置起来可能很棘手。它们未被声明为其他常见的肥皂标题。

您的WsSecurity标头非常基本,但它包含密码摘要,随机数和其他时间戳信息时可能更复杂。可以使用WsSecurity项目轻松添加WsSecurity标头。

您必须确定发送的内容(SoapClient::__getLastRequest()),并且如果您不希望返回错误,则必须确保它与预期匹配。如果仍有错误,请先与网络服务提供商联系。