创建发票和捕获货物

bah*_*hoo 5 api invoice magento observer-pattern

我们有一些API集成,会定期为订单创建货件.

我想做的是创建一个观察员,以便在创建此货件时创建适当的发票和捕获付款.我把它绑在sales_order_shipment_save_after:

public function autoInvoice($observer){

    $shipment = $observer->getEvent()->getShipment();
    $order = $shipment->getOrder();

    $items = $shipment->getItemsCollection();

    $qty = array();

    foreach($items as $item)
        $qty[$item['order_item_id']] = $item['qty'];

    $invoice = Mage::getModel('sales/order_invoice_api');

    $invoiceId = $invoice->create($order->getIncrementId(), $qty);

    $invoice->capture($invoiceId);

}
Run Code Online (Sandbox Code Playgroud)

(实际捕获的代码有些天真,但请耐心等待.)

奇怪的是,这段代码运作正常 - 货件已创建,发票已创建并标记为"付费".但是,订单本身仍处于不确定状态,并保持"待定"状态.

进一步研究,订单上的物品本身具有订购和发货的正确数量,但没有已开票的数量清单.我认为这是造成状态挂断的原因.就好像qty_invoicedsales_order_item表上的某个表格会以某种方式被还原.

同样,发票显示正确的项目,所以我在这里很困惑.

有任何想法吗?

小智 2

这确实是一个非常有趣的@bahoo。

也许尝试:

$shipment = $observer->getEvent()->getShipment();
$order = $shipment->getOrder();

$qty = array();

$invoice = Mage::getModel('sales/order_invoice_api');
$invoiceId = $invoice->create($order->getIncrementId(), $qty);

$invoice->capture($invoiceId);
Run Code Online (Sandbox Code Playgroud)