Magento – Multidimensional Arrays in Magento WSDL file (WSI compliant)

apiwsdl

Have been working to get an API call working to edit an order via API, and remove items or quantity from a current order and save as a new order.

My issue is with passed an array of items & qty's to my api method "amend"

$result = $proxy->salesOrderAmend(
    array(
        "sessionId" => $sessionId,
        "orderId" => $id,
        "amendData" => array(
            array(
                'order_item_id' => 46,
                'qty'   => 1
            )
        ),
        "comment" => 'comment here',
        "notifyCustomer" => 1,
        "includeComment" => 1
        )
    );

The amendData uses the existing wsdl complexType orderItemIdQtyArray. Everytime i try to access this array of data in my method I get a blank stdClass returned.

Here is my WSI.xml file

<wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Magento">
    <xsd:complexType name="salesOrderAmendData">
            <xsd:sequence>
                <xsd:element name="qtys" type="typens:orderItemIdQtyArray" minOccurs="0" maxOccurs="unbounded"></xsd:element>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:element name="salesOrderAmendRequestParam">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element minOccurs="1" maxOccurs="1" name="sessionId" type="xsd:string"></xsd:element>
                    <xsd:element minOccurs="1" maxOccurs="1" name="orderId" type="xsd:string"></xsd:element>
                    <xsd:element minOccurs="0" maxOccurs="1" name="amendData" type="typens:salesOrderAmendData"></xsd:element>
                    <xsd:element minOccurs="0" maxOccurs="1" name="comment" type="xsd:string"></xsd:element>
                    <xsd:element minOccurs="0" maxOccurs="1" name="notifyCustomer" type="xsd:int"></xsd:element>
                    <xsd:element minOccurs="0" maxOccurs="1" name="includeComment" type="xsd:int"></xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
        <xsd:element name="salesOrderAmendResponseParam">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element minOccurs="1" maxOccurs="1" name="result" type="xsd:string"></xsd:element>
                </xsd:sequence>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
</wsdl:types>

And here is the existing elements I am using:

    <xsd:complexType name="orderItemIdQty">
        <xsd:sequence>
<xsd:element name="order_item_id" type="xsd:int"></xsd:element>
<xsd:element name="qty" type="xsd:double"></xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="orderItemIdQtyArray">
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="unbounded" name="complexObjectArray" type="typens:orderItemIdQty"></xsd:element>
</xsd:sequence>
</xsd:complexType>

Can anyone see what I am doing wrong? I am literally Mage::log the $amendData param in my method: –

public function amend($orderId, $amendData, $comment = '', $notifyCustomer = 0, $includeComment = 0)

But getting no data.

Best Answer

The correct request format according to your description in WSDL is:

...
"amendData" => array(
    'qtys' => array(
        array(
            'order_item_id' => 46,
            'qty' => 1
        )
    )
)
...
Related Topic