Magento – one page checkout billing save event is not triggering

billingevent-observermagento-1.8onepage-checkout

I want save customer register information once billing information saved(click continue button) .for that i created one module with following files.Please direction me where i'm wrong.thanks in advance.
etc/modules

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

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
    <Exinent_Billingtax>
        <version>1.0.0</version>
    </Exinent_Billingtax>
</modules>
<global>
    <events>
              <controller_action_postdispatch_checkout_onepage_saveBilling>
            <observers>
                <auto_register_billing>
                    <type>singleton</type>
                    <class>Exinent_Billingtax_Model_Observer</class>
                    <method>autoRegisterBilling</method>
                </auto_register_billing>
            </observers>
                </controller_action_postdispatch_checkout_onepage_saveBilling>
    </events>
</global>
</config>

Observer.php

<?php
class Exinent_Billingtax_Model_Observer {
    public function autoRegisterBilling($evt){
        if(!Mage::helper('customer')->isLoggedIn()){
            $data = $evt->getEvent()->getControllerAction()->getRequest()->getPost('billing', array());
            echo "<pre>";
            print_r($data);
            $customer = Mage::getModel("customer/customer");
            $email = $data['email'];
            $websiteId = Mage::app()->getWebsite()->getId();
            $store = Mage::app()->getStore();
            $pwd = $data['customer_password'];
            $customer->setWebsiteId(Mage::app()->getStore()->getWebsiteId())->loadByEmail($email);

            if (!$customer->getId()) {
                 //Code begins here for new customer registration
                $customer->website_id = $websiteId;
                $customer->setStore($store);
                $customer->firstname = $data['firstname'];
                $customer->lastname = $data['lastname'];
                $customer->setEmail($email);
                $customer->setPassword($pwd);
                $customer->sendNewAccountEmail('confirmed');  
                $customer->save();
                   }
            Mage::getSingleton('customer/session')->loginById($customer->getId()); // to login that customer.
           }
    }

}

Best Answer

Customer has been not loggin properly... you need forcefully login and need to page refresh

<?php
class Exinent_Billingtax_Model_Observer {
    public function autoRegisterBilling($evt){
        if(!Mage::helper('customer')->isLoggedIn()){
            $data = $evt->getEvent()->getControllerAction()->getRequest()->getPost('billing', array());


            //echo "<pre>";
            //print_r($data);
            //echo "<pre>";
            Mage::log($data['lastname'],null,'amit.log');
            //return ;
            $customer = Mage::getModel("customer/customer");
            $email = $data['email'];
            $websiteId = Mage::app()->getWebsite()->getId();
            $store = Mage::app()->getStore();
            $pwd = $data['customer_password'];
            $customer->setWebsiteId(Mage::app()->getStore()->getWebsiteId())->loadByEmail($email);

            if (!$customer->getId()) {
                 //Code begins here for new customer registration
                $customer->website_id = $websiteId;
                $customer->setStore($store);
                $customer->firstname = $data['firstname'];
                $customer->lastname = $data['lastname'];
                $customer->setEmail($email);
                $customer->setPassword($pwd);
                $customer->sendNewAccountEmail('confirmed');  
                $customer->save();
                   }
           // Mage::getSingleton('customer/session')->loginById($customer->getId()); // to login that customer.
            if($customer->getId()>0){
            $userSession = Mage::getSingleton('customer/session');
            $userSession->setCustomer($customer);
            Mage::dispatchEvent('customer_login', array('customer'=>$customer));
            Mage::app()->getResponse()->setRedirect(Mage::getUrl('checkout/onepage'))->sendResponse();
exit;
            }

           }
    }

}