PHP - 使用SoapClient创建嵌套的SOAP标头

PHP - 使用SoapClient创建嵌套的SOAP标头

问题描述:

我在PHP中使用SoapClient类来发出请求。我试图创建一个嵌套的头变量来传递我的请求。PHP - 使用SoapClient创建嵌套的SOAP标头

目前我请求头看起来像这样,

<SOAP-ENV:Header> 
    <ns2:type>request</ns2:type> 
    ... 
</SOAP-ENV:Header> 

我希望它看起来像这样,

<SOAP-ENV:Header> 
    <ns2:ei> 
     <ns2:type>request</ns2:type> 
     ... 
    </ns2:ei> 
</SOAP-ENV:Header> 

目前我正在创造这样的标题,

$headers[] = new SoapHeader(
     $nsp1, 
     "type", 
     "request" 
    ); 
$headers[] = new SoapHeader(...) 

我已尝试过各种方法来嵌套标头,包括

$headers[] = new SoapHeader(
    $nsp1, 
    "ei", 
    new SoapHeader(
     $nsp1, 
     "type", 
     "request" 
    ) 
); 

但这会引发致命错误。

您可以尝试使用一个对象或数组作为$数据参数

对象:

<?php 
class MySoapHeader 
{ 
    public $type = 123; 
    public $value = 'UNKNOWN'; 
} 

$headers1[] = new SoapHeader(
     'n1', 
     'ei', 
     new MySoapHeader() 
    ); 

print_r ($headers1); 
?> 

给出

Array ([0] => SoapHeader Object ([namespace] => n1 [name] => ei 
    [data] => MySoapHeader Object ([type] => 123 [value] => UNKNOWN) 
    [mustUnderstand] =>)) 

阵列:

<?php 
    $headers2[] = new SoapHeader(
     'n1', 
     'ei', 
     array ('type'=>123,'value'=>'UNKNOWN') 
    ); 

    print_r ($headers2); 
?> 

给出

Array ([0] => SoapHeader Object ([namespace] => n1 [name] => ei 
    [data] => Array ([type] => 123 [value] => UNKNOWN) [mustUnderstand] 
    =>)) 

不能创建嵌套的情况下,你可以尝试像这些

//Untested 
$strHeaderComponent_Ei = "<ei><type>$strType</type></ei>"; 

$objVar_Ei_Inside = new SoapVar($strHeaderComponent_Ei, XSD_ANYXML, null, null, null); 
$objHeader_Ei_Outside = new SoapHeader($nsp1, 'ei', $objVar_Ei_Inside); 
+0

使用Re0sless的方法似乎是为我工作。我想避免写出XML。感谢另一种解决方法。 – sissonb