【问题标题】:Converting a PHP array to a SOAP structure将 PHP 数组转换为 SOAP 结构
【发布时间】:2017-04-20 09:35:39
【问题描述】:

我正在挑选一个使用 SOAP 和 WSDL 的旧项目,我不太熟悉。我在 WSDL 中定义了以下数据结构(在此示例中进行了简化):

<s:complexType name="RequestPayment">
    <s:sequence>
        <s:element minOccurs="0" name="ProviderData" type="s0:ArrayOfFieldPairOfNameString"/>
    </s:sequence>
    <s:attribute name="CancelURL" type="s:string"/>
    <s:attribute name="ReturnURL" type="s:string"/>
</s:complexType>
<s:complexType name="ArrayOfFieldPairOfNameString">
    <s:sequence>
        <s:element maxOccurs="unbounded" minOccurs="0" name="Field" nillable="true" type="s0:PairOfNameString"/>
    </s:sequence>
</s:complexType>
<s:complexType name="PairOfNameString">
    <s:simpleContent>
        <s:extension base="s:string">
            <s:attribute name="Name" type="s:string" use="required"/>
        </s:extension>
    </s:simpleContent>
</s:complexType>

该项目使用的是 nusoap,我的 PHP 的一部分看起来像:

$payment['ProviderData'] = array(
    'Field' => array(
        'Name' => 'Foo',
    ),
);

它能够产生以下内容(再次,在这里简化):

<payment>
    <ProviderData>
        <Field Name="Foo" />
    </ProviderData>
</payment>

我不确定我的 PHP 数组应该采用什么格式,才能生成如下所示的 XML:

<payment>
    <ProviderData>
        <Field Name="name 1">value 1</Field>
        <Field Name="name 10">value 10</Field>
        <Field Name="name 2">value 2</Field>
    </ProviderData>
</payment>

我尝试设置一个名为 Value、!Value 和其他变体的密钥,但没有成功。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 为什么不使用 XMLWriter ? php.net/manual/en/book.xmlwriter.php
  • 因为它是一个遗留项目,在生产中,我不想进行不必要的更改。
  • 那么您使用的是 nusoap 函数从数组生成 xml 吗?还是一些自制功能? stackoverflow.com/a/6743230/4916265
  • 是的,我使用 nusoap 调用 WSDL 方法,它会生成 XML,例如$this-&gt;client-&gt;call('Payment', $params)
  • 接下来看看数组是怎么转换的,属性和值是怎么处理的,需要什么样的名字等等。

标签: php web-services soap wsdl nusoap


【解决方案1】:

后退(将XML示例转换为PHP),你想要的格式是:

$payment['ProviderData'] = array(
   'Field' => array (
     0 =>
     array (
       '!Name' => 'Foo',
       '!' => 'Bar',
     ),
     1 =>
     array (
       '!Name' => 'Amount',
       '!' => '98',
     ),
   )
);

【讨论】:

    【解决方案2】:

    最好的解决方案是使用 WSDL 到 php 生成器 susch 作为 PackageGenerator 项目,因为您不会想知道如何构造请求

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2017-06-24
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2014-10-13
      • 2023-04-08
      • 2014-11-13
      相关资源
      最近更新 更多