Magento программная активация заказа

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

 

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

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

  • Роман такой вопрос – вот этот кусок кода разместит инвойс?
    $invoice = Mage::getModel(’sales/service_order’, $order)->prepareInvoice($savedQtys);

    Я просто для создания invoice извращаюсь немного руками добавляю item т.е.
    // Conver order to invoice
    $convertor = Mage::getModel(‘sales/convert_order’);
    $invoice = $convertor->toInvoice($order);

    /* @var $orderItem Mage_Sales_Model_Order_Item */
    foreach ($order->getAllItems() as $orderItem) {

    if (!$orderItem->isDummy() && !$orderItem->getQtyToInvoice() && $orderItem->getLockedDoInvoice()) {
    continue;
    }

    if ($order->getForcedDoShipmentWithInvoice() && $orderItem->getLockedDoShip()) {
    continue;
    }

    $item = $convertor->itemToInvoiceItem($orderItem);

    if ($orderItem->isDummy()) {
    $qty = 1;
    } else {
    $qty = $orderItem->getQtyToInvoice();
    }

    $item->setQty($qty);
    $invoice->addItem($item);
    }
    $invoice->collectTotals();

    И еще, статус разве не будет Processing, остается же еще shipping что бы был complete.

  • В моем случае – virtual products, так что статус будет Complete.

    По поводу самого prepareInvoice не уверен – нужно пробовать.