Дек 10

При написании собственных модулей оплаты для Magento иногда приходится программно изменять статус заказа в состояние “Complete”. Для этого создается invoice и осуществляется оплата по этому инвойсу.
Рассмотрим пример активации заказа после checkout (Place Order). Для этого создадим observer на событие checkout_type_onepage_save_order_after.
В методе обсервера пишем следующее:

<?php
        $order = $observer->getEvent()->getOrder();

        if (!$order->getId()) {
            return false;
        }
        
        if (!$order->canInvoice()) {
            return false;
        }
        
        $savedQtys = array();
        $invoice = Mage::getModel(’sales/service_order’, $order)->prepareInvoice($savedQtys);
        if (!$invoice->getTotalQty()) {
            return false;
        }
        $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE);
        $invoice->register();

        $invoice->getOrder()->setCustomerNoteNotify(false);
        $invoice->getOrder()->setIsInProcess(true);

        $transactionSave = Mage::getModel(‘core/resource_transaction’)
            ->addObject($invoice)
            ->addObject($invoice->getOrder());

        $transactionSave->save();
?>

Таким образом order будет иметь статус Complete, а также создастся проплаченный invoice.

Следите за обновлениями