【发布时间】: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->client->call('Payment', $params) -
接下来看看数组是怎么转换的,属性和值是怎么处理的,需要什么样的名字等等。
标签: php web-services soap wsdl nusoap