簡體   English   中英

PHP SoapClient-如何構建Soap Header

[英]PHP SoapClient - How to Structure Soap Header

在PHP 5.3.28中使用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獲得所需的標題格式嗎? 任何指針表示贊賞。

使用可以為此使用數組嗎

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

將創建這個

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

找不到任何簡單的方法來創建帶有參數作為一個節點屬性的標頭。 最終,盡管效果不是很好,但仍然可行:

$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提出的答案,如果您在__soapCall中發送參數,whitch btw可以工作,但是在創建標頭時卻不起作用。

也感謝cb提供的解決方案: http : //www.php.net/manual/zh/soapvar.soapvar.php#91961

怎么樣

$headers = 
        [ 
           "Content-Type: text/xml; charset=utf-8",
           "Accept: text/xml",
           "Cache-Control: no-cache",
           "Pragma: no-cache",
           "SOAPAction:" . '"' . $soapAction . '"',
           "Content-length: " . strlen($xml)
       ];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM