cancel
Showing results for 
Search instead for 
Did you mean: 

Custom payment method doesn't show up on checkout

SOLVED

Custom payment method doesn't show up on checkout

Hi there! I'm working on Magento CE 1.9.3.2, and I'm trying to set up a custom payment method. The module is enabled in the admin panel, and the payment method is enabled in the settings. The back-end works well, but it doesn't show up in the front-end. I literally copied the files from this guide (changing all the names, obviously):

https://code.tutsplus.com/tutorials/create-a-custom-payment-method-module-in-magento-part-two--cms-2...

 

But, even then, it doesn't work. Where's the error? I've tried like three different times but I don't know where I'm making mistakes.

 

Here are the files:

DNAFactory
- Custompaymentmethod
--Block
---Form
----Custompaymentmethod.php
---Info
----Custompaymentmethod.php
--Helper
---Data.php
--Model
---Paymentmethod.php
--etc
---config.xml
---system.xml
--sql
---custompaymentmethod_setup
----install-1.0.0.0.php

 

config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <DNAFactory_Custompaymentmethod>
            <version>1.0.0.0</version>
        </DNAFactory_Custompaymentmethod>
    </modules>

    <global>
        <fieldsets>
            <sales_convert_quote_payment>
                <custom_field_one>
                    <to_order_payment>*</to_order_payment>
                </custom_field_one>
                <custom_field_two>
                    <to_order_payment>*</to_order_payment>
                </custom_field_two>
            </sales_convert_quote_payment>
        </fieldsets>

        <helpers>
            <custompaymentmethod>
                <class>DNAFactory_Custompaymentmethod_Helper</class>
            </custompaymentmethod>
        </helpers>

        <blocks>
            <custompaymentmethod>
                <class>DNAFactory_Custompaymentmethod_Block</class>
            </custompaymentmethod>
        </blocks>

        <models>
            <custompaymentmethod>
                <class>DNAFactory_Custompaymentmethod_Model</class>
            </custompaymentmethod>
        </models>

        <resources>
            <custompaymentmethod_setup>
                <setup>
                    <module>DNAFactory_Custompaymentmethod</module>
                </setup>
            </custompaymentmethod_setup>
        </resources>
    </global>

    <default>
        <payment>
            <custompaymentmethod>
                <active>1</active>
                <model>custompaymentmethod/paymentmethod</model>
                <order_status>pending</order_status>
                <title>CustomPaymentMethod</title>
                <allowspecific>0</allowspecific>
                <payment_action>sale</payment_action>
            </custompaymentmethod>
        </payment>
    </default>

    <frontend>
        <routers>
            <custompaymentmethod>
                <use>standard</use>
                <args>
                    <module>DNAFactory_Custompaymentmethod</module>
                    <frontName>custompaymentmethod</frontName>
                </args>
            </custompaymentmethod>
        </routers>
    </frontend>
</config>

system.xml:

<?xml version="1.0"?>

<config>
    <sections>
        <payment>
            <groups>
                <custompaymentmethod translate="label" module="custompaymentmethod">
                    <label>CustomPaymentMethod Module</label>
                    <sort_order>1000</sort_order>
                    <show_in_default>1</show_in_default>
                    <show_in_website>1</show_in_website>
                    <show_in_store>0</show_in_store>
                    <fields>
                        <title translate="label">
                            <label>Title</label>
                            <frontend_type>text</frontend_type>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                            <sort_order>1</sort_order>
                        </title>
                        <active translate="label">
                            <label>Enabled</label>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_yesno</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                            <sort_order>2</sort_order>
                        </active>
                        <order_status translate="label">
                            <label>New order status</label>
                            <frontend_type>select</frontend_type>
                            <source_model>adminhtml/system_config_source_order_status</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>0</show_in_store>
                            <sort_order>3</sort_order>
                        </order_status>
                        <allowspecific translate="label">
                            <label>Payment from applicable countries</label>
                            <frontend_type>allowspecific</frontend_type>
                            <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                            <sort_order>4</sort_order>
                        </allowspecific>
                        <specificcountry translate="label">
                            <label>Payment from Specific countries</label>
                            <frontend_type>multiselect</frontend_type>
                            <source_model>adminhtml/system_config_source_country</source_model>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                            <sort_order>5</sort_order>
                        </specificcountry>
                    </fields>
                </custompaymentmethod>
            </groups>
        </payment>
    </sections>
</config>

install-1.0.0.0.php:

<?php

$installer = $this;
$installer->startSetup();
$installer->run("
ALTER TABLE `{$installer->getTable('sales/quote_payment')}` 
ADD `custom_field_one` VARCHAR( 255 ) NOT NULL,
ADD `custom_field_two` VARCHAR( 255 ) NOT NULL;
  
ALTER TABLE `{$installer->getTable('sales/order_payment')}` 
ADD `custom_field_one` VARCHAR( 255 ) NOT NULL,
ADD `custom_field_two` VARCHAR( 255 ) NOT NULL;
");
$installer->endSetup();

Model/Paymentmethod.php:

<?php

/**
 * Created by PhpStorm.
 * User: miche
 * Date: 20/02/2017
 * Time: 13:34
 */
class Envato_Custompaymentmethod_Model_Paymentmethod extends Mage_Payment_Model_Method_Abstract {
    protected $_code  = 'custompaymentmethod';
    protected $_formBlockType = 'custompaymentmethod/form_custompaymentmethod';
    protected $_infoBlockType = 'custompaymentmethod/info_custompaymentmethod';

    public function assignData($data)
    {
        $info = $this->getInfoInstance();

        if ($data->getCustomFieldOne())
        {
            $info->setCustomFieldOne($data->getCustomFieldOne());
        }

        if ($data->getCustomFieldTwo())
        {
            $info->setCustomFieldTwo($data->getCustomFieldTwo());
        }

        return $this;
    }

    public function validate()
    {
        parent::validate();
        $info = $this->getInfoInstance();

        if (!$info->getCustomFieldOne())
        {
            $errorCode = 'invalid_data';
            $errorMsg = $this->_getHelper()->__("CustomFieldOne is a required field.\n");
        }

        if (!$info->getCustomFieldTwo())
        {
            $errorCode = 'invalid_data';
            $errorMsg .= $this->_getHelper()->__('CustomFieldTwo is a required field.');
        }

        if ($errorMsg)
        {
            Mage::throwException($errorMsg);
        }

        return $this;
    }

    public function getOrderPlaceRedirectUrl()
    {
        return Mage::getUrl('custompaymentmethod/payment/redirect', array('_secure' => false));
    }
}

Block/Form/Custompaymentmethod.php:

<?php

class DNAFactory_Custompaymentmethod_Block_Form_Custompaymentmethod extends Mage_Payment_Block_Form
{
    protected function _construct()
    {
        parent::_construct();
        $this->setTemplate('custompaymentmethod/form/custompaymentmethod.phtml');
    }
}

Block/Info/Custompaymentmethod.php:

<?php

class DNAFactory_Custompaymentmethod_Block_Info_Custompaymentmethod extends Mage_Payment_Block_Info
{
    protected function _prepareSpecificInformation($transport = null)
    {
        if (null !== $this->_paymentSpecificInformation)
        {
            return $this->_paymentSpecificInformation;
        }

        $data = array();
        if ($this->getInfo()->getCustomFieldOne())
        {
            $data[Mage::helper('payment')->__('Custom Field One')] = $this->getInfo()->getCustomFieldOne();
        }

        if ($this->getInfo()->getCustomFieldTwo())
        {
            $data[Mage::helper('payment')->__('Custom Field Two')] = $this->getInfo()->getCustomFieldTwo();
        }

        $transport = parent::_prepareSpecificInformation($transport);

        return $transport->setData(array_merge($data, $transport->getData()));
    }
}

 

Helper/Data.php:

<?php

class DNAFactory_Custompaymentmethod_Helper_Data extends Mage_Core_Helper_Abstract
{

}

design/frontend/base/default/template/custompaymentmethod/form/custompaymentmethod.phtml:

<div class="form-list" id="payment_form_<?php echo $this->getMethodCode() ?>" style="display:none;">
    <div>
        <label><?php echo $this->__('Custom Field One') ?>*</label>
        <span>
      <input type="text" title="<?php echo $this->__('Custom Field One') ?>" name="payment[custom_field_one]" value="<?php echo $this->htmlEscape($this->getInfoData('custom_field_one')) ?>" />
    </span>
    </div>
    <div>
        <label><?php echo $this->__('Custom Field Two') ?>*</label>
        <span>
      <input type="text" title="<?php echo $this->__('Custom Field Two') ?>" name="payment[custom_field_two]" value="<?php echo $this->htmlEscape($this->getInfoData('custom_field_two')) ?>" />
    </span>
    </div>
</div>
<div>
    <?php echo $this->getMethod()->getConfigData('message');?>
</div>

etc/modules/DNAFactory_Custompaymentmethod.xml:

<?xml version="1.0"?>

<config>
    <modules>
        <DNAFactory_Custompaymentmethod>
            <active>true</active>
            <codePool>local</codePool>

            <depends>
                <Mage_Payment />
            </depends>
        </DNAFactory_Custompaymentmethod>
    </modules>
</config>

 

Thank you in advice for your precious help! Smiley Very Happy

Tags (3)
1 REPLY

Re: Custom payment method doesn't show up on checkout

I just found the error, a stupid one if you ask me!

I just put:

class Envato_Custompaymentmethod_Model_Paymentmethod extends Mage_Payment_Model_Method_Abstract

Instead of:

class DNAFactory_Custompaymentmethod_Model_Paymentmethod extends Mage_Payment_Model_Method_Abstract

For the model. Now it works!