我正在创建一个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));
我的代码有什么错误吗? 任何人都可以给我一些建议吗?
答案 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));
现在上面的代码应该适合你。
希望它有所帮助。