0
votes

There is the possibility to choose the form of payment for each product?

For example: In my store one product is selling for "cash in game", so by the time the customer is buying this product magento enable only the payment option "in game".

As for the other products that are bought for real money, it disables the payment option "in game" and enable payment for card credit (for exemplo).

I found some modules, but tested and did not work.

Thank's

1
can you tell which module you have use ? also what if there is both products in carts but i hope yhis should do your work blog.magepsycho.com/…Rohit Goel
does solve your issueGem

1 Answers

0
votes

yes you can do it by this module. for example we want to cash on delivery for some products ->

First create a product attribute (name : 'magepal_payment_filter_by_product', type : yes/no) to identify these products.

E.g base of Magento v1.7 you could

Auto enable payment module programmatically [see][1]

Enable all applicable payment module and filter which module to show where

In /app/code/local/MagePal/PaymentFilterByProduct/etc/config.xml

<?xml version="1.0"?>
<config>
<modules>
    <MagePal_PaymentFilterByProduct>
        <version>1.0.1</version>
    </MagePal_PaymentFilterByProduct>
</modules>
<global>
    <helpers>
        <paymentfilterbyproduct>
            <class>MagePal_PaymentFilterByProduct_Helper</class>
        </paymentfilterbyproduct>
        <payment>
            <rewrite>
                <data>MagePal_PaymentFilterByProduct_Helper_Payment_Data</data>
            </rewrite>
        </payment>            
    </helpers>      
</global>
</config>

In /app/code/local/MagePal/PaymentFilterByProduct/Helper/Payment/Data.php

<?php
class MagePal_PaymentFilterByProduct_Helper_Payment_Data extends Mage_Payment_Helper_Data
{

public function getStoreMethods($store = null, $quote = null)
{   
    $methods = parent::getStoreMethods($store, $quote);

    if(!Mage::getStoreConfig('paymentfilterbyproduct/general_option/paymentfilterbyproduct_enable', Mage::app()->getStore()) || !$quote){
        return $methods;
    }

    //get a list of product in cart
    $cart = Mage::getSingleton('checkout/session');

    $specialProductInCart = array();

    foreach ($cart->getQuote()->getAllItems() as $item) {
        $specialProductInCart[] = $item->getMagepalPaymentFilterByProduct();                 
    }

    // if special product in cart 
    // need to if check $item->getMagepalPaymentFilterByProduct() return 'yes/no' or '0/1)
    if(in_array('yes', $specialProductInCart)){
       $filter_csv = Mage::getStoreConfig('paymentfilterbyproduct/filter_option/paymentfilter_special_products', Mage::app()->getStore()); 
    }
    else{
        $filter_csv = Mage::getStoreConfig('paymentfilterbyproduct/filter_option/paymentfilter_all_product', Mage::app()->getStore());
    }

    $filter_array = explode(",", $filter_csv);

    foreach ($methods as $k => $method){
        if(!in_array($method->getCode(), $filter_array))
            unset($methods[$k]);       
    }//methods

    return $methods;
}
}

In /app/code/local/MagePal/PaymentFilterByProduct/etc/system.xml

<?xml version="1.0"?>
<config>
<tabs>
    <magepal translate="label" module="paymentfilterbyproduct">
        <label>MagePal</label>
        <sort_order>900</sort_order>
    </magepal>
</tabs>
<sections>
    <paymentfilterbyproduct translate="label" module="paymentfilterbyproduct">
        <label>Payment Method Filter by Product</label>
        <tab>magepal</tab>
        <sort_order>1000</sort_order>
        <show_in_default>1</show_in_default>
        <show_in_website>1</show_in_website>
        <show_in_store>1</show_in_store>
        <groups>
            <general_option translate="label">
                <label>General Options</label>
                <frontend_type>text</frontend_type>
                <sort_order>1</sort_order>
                <show_in_default>1</show_in_default>
                <show_in_website>1</show_in_website>
                <show_in_store>1</show_in_store>
                <fields>
                    <paymentfilter_enable translate="label">
                        <label>Enable Payment Filter</label>
                        <frontend_type>select</frontend_type>
                        <source_model>adminhtml/system_config_source_yesno</source_model>
                        <sort_order>50</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </paymentfilter_enable>
                </fields>
            </general_option>
            <filter_option translate="label">
                <label>Payment Method Filter Configuration</label>
                <frontend_type>text</frontend_type>
                <sort_order>2</sort_order>
                <show_in_default>1</show_in_default>
                <show_in_website>1</show_in_website>
                <show_in_store>1</show_in_store>
                <comment>Please enable all applicable payment methods in system payment config</comment>
                <fields>
                    <paymentfilter_all_products translate="label">
                        <label>Select Default Payment option for All Products</label>
                        <frontend_type>multiselect</frontend_type>
                        <source_model>MagePal_PaymentFilterByProduct_ActivePaymentMethod</source_model>
                        <sort_order>30</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </paymentfilter_admin>
                    <paymentfilter_special_products translate="label">
                        <label>Select Payments for Cart with Special Products</label>
                        <frontend_type>multiselect</frontend_type>
                        <source_model>MagePal_PaymentFilterByProduct_ActivePaymentMethod</source_model>
                        <sort_order>40</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </paymentfilter_store>
                </fields>
            </filter_option>
        </groups>
    </paymentfilterbyproduct>
</sections>
</config>

In /app/code/local/MagePal/PaymentFilterByProduct/Helper/Data.php

<?php 
class MagePal_PaymentFilterByProduct_Helper_Data extends    Mage_Core_Block_Template
{
}

In /app/code/local/MagePal/PaymentFilterByProduct/ActivePaymentMethod.php

<?php
class MagePal_PaymentFilterByProduct_ActivePaymentMethod
{
    //get all active (enable) payment method
    public function toOptionArray()
    {
       $payments = Mage::getSingleton('payment/config')->getActiveMethods();

       foreach ($payments as $paymentCode=>$paymentModel) {
           if($paymentModel->canUseCheckout() == 1){
                $paymentTitle = Mage::getStoreConfig('payment/'.$paymentCode.'/title');
                $methods[$paymentCode] = array(
                    'label'   => $paymentTitle,
                    'value' => $paymentCode,
                );
            }
        }

        return $methods;
    }
}

In /app/etc/modules/MagePal_PaymentFilterByProduct.xml

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