1

我扩展了 Magento V2 API,因此创建了一个 wsdl.xml。我的网络服务返回一个关联多数组。我google了一下,发现了两个复杂类型的定义:

<complexType name="associativeMultiArray">
    <all>
        <element name="associativeArray" type="typens:associativeArray" minOccurs="0" />
    </all>
</complexType>
<complexType name="stringArray">
    <all>
        <element name="multi_data" type="typens:associativeMultiArray" minOccurs="0" />
    </all>
</complexType>

<message name="methodResponse">
    <part name="result" type="typens:stringArray" />
</message>

另一个:

<complexType name="associativeMultiArray">
    <complexContent>
        <restriction base="soapenc:Array">
            <attribute ref="soapenc:arrayType" wsdl:arrayType="typens:associativeMultiEntity[]"/>
        </restriction>
    </complexContent>
</complexType>

<complexType name="associativeMultiEntity">
    <all>
        <element name="key" type="xsd:string"/>
        <element name="value" type="typens:ArrayOfString"/>
    </all>
</complexType>

<complexType name="ArrayOfString">
    <complexContent>
        <restriction base="soapenc:Array">
            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
        </restriction>
    </complexContent>
</complexType>

<message name="methodResponse">
    <part name="result" type="typens:associativeMultiArray" />
</message>

问题是,这两个都不起作用。如果我在查询后输出结果,我得到:

Array
(
    [0] => stdClass Object
    (
    )
)

array('test)我返回or没关系array('key'=>'value'),它总是相同的输出。基本上我有两个问题:

  • ArrayOfString,associativeArrayassociativeMultiArray以下声明:<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/" schemaLocation="http://schemas.xmlsoap.org/soap/encoding/"/>?
  • 如果我有非常复杂的数组结构,例如 10 维关联数组,是否必须在 wsdl.xml 中声明每个维度?我该如何处理?它是如何工作的?为什么上述声明不起作用?
4

1 回答 1

2

这不是该问题的确切解决方案,但我找到了另一种解决方法:只需将数组序列化为 JSONjson_encode并使用json_decode. 有了这个,数组可以是任何复杂的。Returntype 然后xsd:string在 wsdl 中。

于 2013-03-06T16:55:14.580 回答