2014-03-24 51 views
0

在PHP 28年3月5日和SoapClient想創建SOAP頭,看起來像:PHP SoapClient的 - 如何構建SOAP頭

<soap:Header> 
    <ns:RequestParams Size="Large" Color="Blue" Brand="xyz"> 
</soap:Header> 

如果你建造這樣的標題:

$params = array('RequestParams' => array('Size' => 'Large', 'Color' => 'Blue', 'Brand' => 'xyz'); 
    $header = new SoapHeader(NameSpace, 'RequestParams', $params); 
    $client = new SoapClient(NULL, array("location" => "https://endpoint-url", 
             "uri" => "http://namespace-uri", 
             "soap_version" => SOAP_1_2, "trace" => 1)); 

    $client->__setSoapHeaders($header); 
    $result = $client->__soapCall(some soap call here); 
    echo $client->__getLastRequest() . "\n"; 

我得到的標題是:

<env:Header> 
    <ns2:RequestParams> 
     <item><key>RequestParams</key><value> 
      <item><key>Size</key><value>Large</value></item> 
      <item><key>Color</key><value>Blue</value></item> 
      <item><key>LastName</key><value>xyz</value></item></value> 
     </item> 
    </ns2:RequestParams> 
</env:Header> 

,我得到來自服務器的響應告訴我這是一個無效的頭。我已經搜索過,並且似乎沒有太多關於PHP soapclient如何從數據結構創建標題的信息。任何想法如何使用SoapClient獲得標題格式? 任何指針讚賞。

+0

想我還是去與此解決方案:http://stackoverflow.com/questions/690262/how-can-i-create-a-soap-頭樣本 – user3455353

回答

0

無法找到任何簡單的方法來創建使用參數爲一個節點的屬性的標題。最終這部作品,雖然不是很漂亮:

$client = new SoapClient(NULL, 
         array('location' => $loc, 'uri' => $ns, 
           'soap_version' => SOAP_1_2, 
           'style' => SOAP_DOCUMENT)); 
$headerVar = new SoapVar('<ns1:RequestParams Size="Large" Color="Blue" Brand="xyz"/>', 
          XSD_ANYXML);     
$header = new SoapHeader($ns, 'RequestParams', $headerVar); 
$client->__setSoapHeaders($header); 
$result = $client->__soapCall('SomeFunc', array(...)); 

感謝FEROZ用於提示的答案,whitch順便說一句,如果你是在__soapCall發送參數,創建一個頭時,只是沒有工作的工作。

也感謝CB的解決方案:http://www.php.net/manual/en/soapvar.soapvar.php#91961

0

使用,你可以使用數組這個

$parm = array(
    'properties' => array(
     'Size' => 'Large', 
     'Color' => 'Blue', 
     'Brand' => 'xyz' 
    ), ); 

將創建這個

<properties Size="Large" Color="Blue" Brand="xyz"> 
+0

由於FEROZ但頭我與此得到的是: \t \t \t \t \t \t RequestParams \t \t \t \t 面積 \t \t \t \t 顏色 \t \t \t \t 名字 XYZ \t \t \t \t \t \t user3455353

+0

你能在你的問題更新您的修改後的代碼 –