2013-09-26 4 views
2

Заголовок моего запроса SOAP отображается в странном формате. Мне нужно, чтобы иметь заголовок, который выглядит следующим образом:SOAP Request Header не хорошо отформатирован (содержит <item>, <key> и <value>)

<soap-env:header> 
    <wsse:security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:usernametoken wsu:id="UsernameToken-45"> 
      <wsse:username>817221</wsse:username> 
      <wsse:password type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234</wsse:password> 
     </wsse:usernametoken> 
    </wsse:security> 
    </soap-env:header> 

Прямо сейчас, заголовок выглядит следующим образом:

<SOAP-ENV:Header> 
    <ns8:Security SOAP-ENV:mustUnderstand="1"> 
     <item> 
      <key>UsernameToken</key> 
      <value> 
       <item> 
        <key>Username</key> 
        <value>817221</value> 
       </item> 
       <item> 
        <key>Password</key> 
        <value> 
         <item> 
          <key>_</key> 
          <value>1234</value> 
         </item> 
         <item> 
          <key>Type</key> 
          <value>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText</value> 
         </item> 
        </value> 
       </item> 
      </value> 
     </item> 
    </ns8:Security> 
</SOAP-ENV:Header> 

Это так неправильно. Он содержит и теги. Я прочитал, что SOAP_ENC_OBJECT должен использоваться для отображения его в правильном формате, поэтому я попробовал его в своем коде, но все еще не работает. См. Код ниже:

$header = array(
      'UsernameToken' => array(
       'Username' => 817221, 
       'Password' => array(
         '_' => 1234, 
         'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'))); 

$headerSoapVar = new SoapVar($header,SOAP_ENC_OBJECT); 
$soapheader = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', "Security" , $header, true); 
$client->__setSoapHeaders($soapheader); 

Любая помощь была бы принята с благодарностью. Благодаря!

ответ

2

Это довольно старый вопрос!

Однако у меня была эта же проблема сегодня!

Я узнал, что «header» должен быть объектом, а не массивом!

Однако я до сих пор были проблемы с пространствами имен ... так что я работал его Sub-причислять SoapClient класс

class MySoapClient extends SoapClient { 

    public function __doRequest($request, $location, $action, $version, $one_way=0) { 
     // manipulate $request var using XML parse tools or whatever !! 
     return parent::__doRequest($request, $location, $action, $version, $one_way); 
    } 
} 

Я все еще работаю на это, но я надеюсь, что это помогает кто-то!

0

Попробуйте это, вы должны установить его как объект.

$header = (object) array(
      'UsernameToken' => array(
       'Username' => 817221, 
       'Password' => array(
         '_' => 1234, 
         'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'))); 

 Смежные вопросы

  • Нет связанных вопросов^_^