PHP> SOAP在标题中创建了属性"正确的方式"

时间:2016-11-16 14:51:08

标签: php xml soap

我在PHP中遇到SOAP Header问题

我的代码应该生成类似这样的内容

  <soapenv:Header>
    <ns1:RequestHeader xmlns:ns1="xxxxxxx">
        <ns1:auth xmlns:ns1="yyyy">
           <ns1:user>xxx</ns1:user>
           <ns1:pass>false</ns1:pass>
       </ns1:auth>
    </ns1:RequestHeader>
  </soapenv:Header>

这个问题,我无法弄清楚如何正确地做到这一点,我发现了很多技巧,但是大多数技巧都会迫使我改变发送主XML的方式或改变我的整个代码。< / p>

我当前的代码打印以下内容

  <soapenv:Header>
    <ns1:RequestHeader>
        <ns1:auth>
           <ns1:user>xxx</ns1:user>
           <ns1:pass>false</ns1:pass>
       </ns1:auth>
    </ns1:RequestHeader>
  </soapenv:Header>

我的代码是

$Auth = new stdClass();
$Auth->auth->user = "user";
$Auth->auth->pass = "pass";     

$header = new SoapHeader(true,'RequestHeader',$Auth,false); 

$client->__setSoapHeaders($header);

您如何看待这一点,如何将属性更正地添加到RequestHeader

谢谢

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,

$header_part = '
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2003/06/secext" SOAP-ENV:mustUnderstand="1">
        <wsse:UsernameToken>
            <wsse:Username>'."USERNAME".'</wsse:Username>
            <wsse:Password>'."PASSWORD".'</wsse:Password>
        </wsse:UsernameToken>
    </wsse:Security>
';
$soap_var_header = new SoapVar( $header_part, XSD_ANYXML, null, null, null );
$soap_header = new SoapHeader( 'http://your-target-service.com', 'wsse', $soap_var_header );
$soap_client->__setSoapHeaders($soap_header);

您需要使用原始肥皂请求发送此内容。