2017-04-20 139 views
2

我正在拾取一个使用SOAP和WSDL的旧项目,这一点我不太熟悉。我在WSDL(在本例简化)中定义的数据结构如下:将PHP数组转换为SOAP结构

<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,和其他变化,都没有成功。

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

+0

为什么不使用'XMLWriter'? http://php.net/manual/en/book.xmlwriter.php – JustOnUnderMillions

+0

因为它是一个传统的项目,在生产中我不想改变超过需要。 – SteveEdson

+0

所以你使用nusoap函数从数组中生成xml?或者一些自制功能? http://stackoverflow.com/a/6743230/4916265 – JustOnUnderMillions

回答

1

向后工作后(转换XML到例如PHP),格式为您想要的是:

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

最好的解决办法是使用WSDL的PHP​​发电机苏施作为PackageGenerator项目,你不会不知道如何构建请求