Magento Order Order Invoice с обновлением количества товаров с использованием API, который не работает должным образом

Я создаю приложение Magento, и я планирую создать счет заказа клиента с помощью Magento API.

Вот мой псевдокод для моего создания счета. Проблема заключается в том, что он создает счет-фактуру, но этот счет всегда пуст (не показывая товары и количество)

<?php $proxy = new SoapClient('http://myurl/api/soap?wsdl'); $sessionId = $proxy->login('apiuser', 'apikey'); // item array with sku and quantity $invoiceItems = array( '002' => '1', '003' => '1', '004' => '1', '005' => '1' ); // Create new invoice $newInvoiceId = $proxy->call($sessionId, 'sales_order_invoice.create', array($saleorderno, $invoiceItems, 'Invoice Created', true, true)); ?> 

Но когда я создаю счет-фактуру заказа на продажу (это не изменяется в количестве от заказа клиента), он работает правильно

 $newInvoiceId = $proxy->call($sessionId, 'sales_order_invoice.create', array($saleorderno, array(), 'Invoice Created', true, true)); 

Есть ли ошибки с моим кодом? Может ли кто-нибудь дать мне совет?

Solutions Collecting From Web of "Magento Order Order Invoice с обновлением количества товаров с использованием API, который не работает должным образом"

В переменной массива « $invoiceItems » вы предоставляете это значение:

 $invoiceItems = array( '002' => '1', '003' => '1', '004' => '1', '005' => '1' ); 

Ключи для вышеупомянутого массива должны соответствовать идентификатору Item Item, а не SKU элемента. Это означает, что всякий раз, когда размещается заказ, каждый упорядоченный элемент получает свой уникальный уникальный идентификатор позиции, который совсем не совпадает с идентификатором соответствующего SKU или соответствующего идентификатора продукта.

Чтобы получить это, вам нужно загрузить коллекцию заказов из идентификатора заказа и получить список коллекции предметов, как показано ниже:

 $saleorderno = 'SOME VALID ORDER INCREMENT ID'; $order = Mage::getModel('sales/order')->loadByIncrementId($saleorderno); $orderItems = $order->getAllItems(); $invoiceItems = array(); foreach ($orderItems as $_eachItem) { $invoiceItems[$_eachItem->getItemId()] = $_eachItem->getQtyOrdered(); } $newInvoiceId = $proxy->call($sessionId, 'sales_order_invoice.create', array($saleorderno, $invoiceItems, 'Invoice Created', true, true)); 

Теперь этот код должен работать для вас.

Надеюсь, поможет.