Magento 1.7 – Customer Save Before Checkout Button Click

checkoutmagento-1.7onepage-checkout

Hello I want to save new customer on checkout page after filling their information but before process to checkout button clicked. Is their any possibility to save new customer using this method?

Best Answer

write an observer to get triggered on save billing or save shipping events and save the customer.

for example:

create Yournamespace_Yourmodulename.xml in app/etc/modules/

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

in app/code/local/Yournamespace/Yourmodulename/etc/config.xml

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

in app/code/local/Yournamespace/Yourmodulename/Model/Observer.php

<?php
class Yournamespace_Yourmodulename_Model_Observer {

    public function autoRegisterBilling($evt){
        if(!Mage::helper('customer')->isLoggedIn()){
            $data = $evt->getEvent()->getControllerAction()->getRequest()->getPost('billing', array());
            $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();
                   }
           }
    }
}

note :

  1. this will save a customer immediately after they click continue in billing information tab.

  2. you can do this on save shipping or save payment method steps.

  3. if you wanna automatically login that customer, add the following in Observer.php after

    $customer->save();
    }
    
    Mage::getSingleton('customer/session')->loginById($customer->getId()); // to login that customer.