Pages

Sunday, July 7, 2013

How to filter payment method in one page checkout

There are several way to filter payment method in one page checkout:

     By overriding template: app/design/frontend/[interface]/[theme]/template/checkout/onepage /payment/methods.phtml

     By overriding method: Mage_Checkout_Block_Onepage_Payment_Methods::_canUseMethod()
     By overriding method: Mage_Payment_Model_Method_Abstract::isAvailable()
     By overriding method: Mage_Checkout_Block_Onepage_Payment_Methods::getMethods()
     By observing event: payment_method_is_active

Among above methods obviously using event-observer technique is the best way to go.
And here I will be discussing about how to enable the PayPal (Website Standard) method only when current currency is USD.
Suppose a skeleton module(MagePsycho_Paymentfilter) has already been created.

Step 1:

Register the event: ‘payment_method_is_active’ in config.xml.
Add the following xml code in app/code/local/MagePsycho/Paymentfilter/etc/config.xml:

    …
    <frontend>
        …
        <events>
            <payment_method_is_active>
                <observers>
                    <paymentfilter_payment_method_is
    _active>
                        <type>singleton</type>
                        <class>paymentfilter/observer</class>
                        <method>paymentMethodIsActive</method>
                    </paymentfilter_payment_method_is_active>
                </observers>
            </payment_method_is_active>
        </events>
        …
    </frontend>
    …

Step 2: Implement the observer model

Create observer file: app/code/local/MagePsycho/Paymentfilter/Model/Observer.php and paste the following code:

    <?php
    /**
     * @category   MagePsycho
     * @package    MagePsycho_Paymentfilter
     * @author     magepsycho@gmail.com
     * @website    http://www.magepsycho.com
     * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
        */
    class MagePsycho_Paymentfilter_Model_Observer {
    
        public function paymentMethodIsActive(Varien_Event_Observer $observer) {
            $event           = $observer->getEvent();
            $method          = $event->getMethodInstance();
            $result          = $event->getResult();
            $currencyCode    = Mage::app()->getStore()->getCurrentCurrencyCode();
    
            if( $currencyCode == ‘USD’){
                if($method->getCode() == ‘paypal_standard’ ){
                    $result->isAvailable = true;
                }else{
                    $result->isAvailable = false;
                }
            }
        }
    
    }


Step 3:
Go ahead for testing.

No comments:

Post a Comment