2013-09-26 22 views
2

我的SOAP請求的標題顯示爲奇怪的格式。我需要有一個頭,看起來像這樣:SOAP請求標題格式不正確(包含<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

這是一個相當古老的問題!

但是,我今天有這個同樣的問題!

我發現「標題」需要是一個對象,而不是一個數組!

但是我仍然有與命名空間的問題,所以,我的工作了子類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'))); 
相關問題