使用PHP

时间:2018-01-23 14:12:41

标签: php soap

我试图在PHP 5中使用重复的对象进行SOAP调用:

<sources>
  <source>
    <name>somename</name>
    <id>someid</id>
  </source>
 <source>
    <name>somename</name>
    <id>someid</id>
  </source>
</sources>

以下代码适用于1个来源:

$data = [
  'sources' => [
    'source' => [
      'name' => 'somename',
      'id' => 'someid'
    ]
  ]
]

如何使用__soapCall函数对此数据进行SOAP调用,因为它需要一个数组,并且数组在PHP中不能有重复键。

到目前为止我已尝试过:

$data = [
  'sources' => [
    'source' => [
      [
        'name' => 'somename',
        'id' => 'someid'
      ],
      [
        'name' => 'somename',
        'id' => 'someid'
      ]
    ]
  ]
]

这会导致&#34; SOAP-ERROR:编码:对象没有&#39;名称&#39;属性&#34;

$data = [
  'sources' => [
    'source' => [
      (object) [
        'name' => 'somename',
        'id' => 'someid'
      ],
      (object) [
        'name' => 'somename',
        'id' => 'someid'
      ]
    ]
  ]
]

这也导致了一个&#34; SOAP-ERROR:编码:对象没有&#39;名称&#39;属性&#34;

$data = [
  'sources' => [
    [
      'name' => 'somename',
      'id' => 'someid'
    ],
    [
      'name' => 'somename',
      'id' => 'someid'
    ]
  ]
]

这也导致了一个&#34; SOAP-ERROR:编码:对象没有&#39;源&#39;属性&#34 ;.我试过这个是因为我发现它是对类似问题的回答:Multiple elements of same name in PHP SOAP Call

1 个答案:

答案 0 :(得分:0)

我有found the solution myself。我已将XML消息编写为xml-string,我现在以编程方式将其转换为数组:

$sourcesAsXml = "<root><source><name>a</name></source><source><name>b</name></source></root>"
$dataArray = ['sources' => json_decode(json_encode(simplexml_load_string($sourcesAsXml)))]

这输出以下内容:

array ('sources' =>
stdClass::__set_state(array(
   'source' =>
  array (
    0 =>
    stdClass::__set_state(array(
       'name' => 'a',
    )),
    1 =>
    stdClass::__set_state(array(
       'name' => 'b',
    )),
  ),
))
)