将PHP数组转换为SOAP结构

时间:2017-04-20 09:35:39

标签: php web-services soap wsdl nusoap

我选择了一个使用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和其他变体的密钥,但未成功。

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

2 个答案:

答案 0 :(得分:1)

向后工作(将XML示例转换为PHP)后,您需要的格式为:

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

答案 1 :(得分:0)

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