Search code examples
classmagentoobservers

Magento getEvent()->getOrder empty


I'm trying to get an Observer working to see if a payment has been made via check/cheque, I know the Observer is being used as I have a log record to show. However when I try to access the Order it is either empty or will not print to the log file.

app/etc/modules/Foo_Bar.xml

<?xml version="1.0"?>
    <config>
        <modules>
            <Foo_Bar>
                <active>true</active>
                <codePool>local</codePool>
            </Foo_Bar>
        </modules>
    </config>

app/code/local/Foo/Bar/etc/config.xml

<?xml version="1.0" encoding="UTF-8" ?>
    <config>
        <global>
            <models>
                <foo_bar>
                    <class>Foo_Bar_Model</class>
                </foo_bar>
            </models>

            <events>
                <sales_order_payment_place_end> <!-- event -->
                    <observers>
                        <foo_bar> <!-- unique for event -->
                                                         <!-- type: singleton | disable | model -->
                            <class>foo_bar/observer</class>
                            <method>SalesOrderPaymentPlaceEnd</method>
                        </foo_bar>
                    </observers>
                </sales_order_payment_place_end>
            </events>
        </global>
    </config>

app/code/local/Foo/Bar/Model/Observer.php

<?php
class Foo_Bar_Model_Observer
{
    public function SalesOrderPaymentPlaceEnd(Varien_Event_Observer $observer)
    {
        Mage::log('Location: SalesOrderPaymentPlaceEnd');
        $order = $observer->getEvent()->getOrder();
        Mage::log('order: '.$order);
    }
}

The first log works as expected, however I'm sure getOrder() isn't working as my second log entry just prints 'order: '.

Thanks


Solution

  • @James has already commented this..I am explaning

    The event "sales_order_payment_place_end" located in "app\code\core\Mage\Sales\Model\Order\Payment.php" .

    The event have only one parameter that is Payment. So

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

    will not work. You need to use

     $orderPayment = $observer->getEvent()->getPayment();