使用API​​无法正常工作的产品数量更新的Magento销售订单发票

时间:2012-03-13 05:32:26

标签: php magento

我正在创建一个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));

我的代码有什么错误吗? 任何人都可以给我一些建议吗?

1 个答案:

答案 0 :(得分:1)

在数组变量&#34; $invoiceItems&#34;中,您提供此值: -

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

上述数组的键必须对应于订单商品ID,而不是商品SKU。这意味着无论何时下订单,每个订购商品都会获得自己唯一的订单商品ID,这与相应的SKU或相应的产品ID完全不同。

为此,您需要从订单ID加载订单集合,并按如下方式获取项目集合列表: -

$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));

现在上面的代码应该适合你。

希望它有所帮助。