php - 使用 PHP 使用重复键进行 SOAP 调用

标签 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'
      ]
    ]
  ]
]

这会导致“SOAP 错误:编码:对象没有‘名称’属性”。

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

这也会导致“SOAP-ERROR:编码:对象没有‘名称’属性”。

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

这也会导致“SOAP 错误:编码:对象没有‘源’属性”。我试过这个是因为我发现它是一个类似问题的答案:Multiple elements of same name in PHP SOAP Call .

最佳答案

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

$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',
    )),
  ),
))
)

关于php - 使用 PHP 使用重复键进行 SOAP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48403809/

相关文章:

java - 公开多个静态 wsdl 文件 - Spring WS

php - 插入 MYSQL 数据库 WHERE 用户名 = :username

xml - namespace URI 中尾部斜线的意义是什么?

获取 SOAP 响应时出现 javax.xml.bind.UnmarshalException

php - codeigniter 多个 OR 查询

rest - 为什么SOAP无法使用HTTP缓存机制

从 SOAPFault 中提取错误消息时出现 java.lang.ClassCastException

php连接mysql并提交数据

php - postgresql 在查询中插入空值

php - 如何使用 PHP 制作审计跟踪/事件日志