Hello,
I created a new payment method, but it doesn't show in the frontend.
I follow this tutorial, only the first part to have a simple payment method.
But it doesn't work, in \Mage_Payment_Model_Method_Abstract::isAvailable() my method isn't active, if I harcoded it:
$isActive = 1; $checkResult->isAvailable = $isActive;
I can see the radio button but not the name. I don't know what's happend, I can see it in the backend and change the configuration successfully, I can get the method in a observer:
$method->getCode()
But still it doesn't appear in the payment step.
any idea?
My full code:
config.xml <?xml version="1.0" encoding="UTF-8"?> <config> <modules> <Namespace_ModuleName> <module>0.0.1</module> </Namespace_ModuleName> </modules> <global> <helpers> <modulename> <class>Namespace_ModuleName_Helper</class> </modulename> </helpers> <models> <modulename> <class>Namespace_ModuleName_Model</class> </modulename> </models> </global> <default> <carriers> <modulename> <active>1</active> <title>Custom Title ship</title> <model>modulename/carrier_ship</model> <sort_order>10</sort_order> </modulename> </carriers> <payment> <modulename> <active>1</active> <title>Custom Title pay</title> <model>modulename/payment_pay</model> <order_status>processing</order_status> <payment_action>sale</payment_action> <allowspecific>0</allowspecific> <sort_order>1</sort_order> </modulename> </payment> </default> <frontend> <events> <payment_method_is_active> <observers> <modulename_payment_method_is_active> <type>singleton</type> <class>modulename/observer</class> <method>paymentMethodIsActive</method> </modulename_payment_method_is_active> </observers> </payment_method_is_active> </events> </frontend> </config>
system.xml <?xml version="1.0" encoding="UTF-8"?> <config> <sections> <carriers> <groups> <modulename translate="label" module="modulename"> <label>Custom Label Carrier</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>0</show_in_store> <fields> <active translate="label"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </active> <title translate="label"> <label>Title</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>0</show_in_store> </title> <sort_order translate="label"> <label>Sort Order</label> <frontend_type>text</frontend_type> <sort_order>100</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </sort_order> <sallowspecific translate="label"> <label>Ship to Applicable Countries</label> <frontend_type>select</frontend_type> <sort_order>90</sort_order> <frontend_class>shipping-applicable-country</frontend_class> <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </sallowspecific> <specificcountry translate="label"> <label>Ship to Specific Countries</label> <frontend_type>multiselect</frontend_type> <sort_order>91</sort_order> <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>0</show_in_store> <can_be_empty>1</can_be_empty> </specificcountry> </fields> </modulename> </groups> </carriers> <payment> <groups> <modulename translate="label" module="modulename"> <label>Custom Label Payment</label> <sort_order>670</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> <fields> <active translate="label"> <label>Enabled</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_yesno</source_model> <sort_order>1</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </active> <order_status translate="label"> <label>New order status</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_order_status_processing</source_model> <sort_order>2</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </order_status> <allowspecific translate="label"> <label>Payment from applicable countries</label> <frontend_type>allowspecific</frontend_type> <sort_order>40</sort_order> <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>0</show_in_store> </allowspecific> <specificcountry translate="label"> <label>Payment from Specific countries</label> <frontend_type>multiselect</frontend_type> <sort_order>50</sort_order> <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>0</show_in_store> <can_be_empty>1</can_be_empty> </specificcountry> <title translate="label"> <label>Title</label> <frontend_type>text</frontend_type> <sort_order>3</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </title> </fields> </modulename> </groups> </payment> </sections> </config>
My model Model/Payment/Pay.php <?php class Namespace_ModuleName_Model_Payment_Pay extends Mage_Payment_Model_Method_Abstract { protected $_code = 'pay'; /* I tried with and without it protected $canUseCheckout = true; public function validate() { parent::validate(); }*/ }
I can see my custom payment method in the database:
path value
.../active 1
But in
app/code/core/Mage/Payment/Model/Method/Abstract.php public function isAvailable($quote = null) { $checkResult = new StdClass; $isActive = (bool)(int)$this->getConfigData('active', $quote ? $quote->getStoreId() : null); Here `$isActive` isn't 1, like the payment methods I can see in the frontend
Solved! Go to Solution.
Strange that it wouldn't be active, do you have this section correctly in your config.xml and have you flushed cache afterwards?
<default> <payment> <pay> <active>1</active> <model>pay/pay</model> <order_status>processing</order_status> <title>Excellence Payment Method</title> </pay> </payment> </default>
Remember that you'll need to update "pay" with whatever your extension is .
I think this part is correct, but I put all the code so you can see it
Your system.xml seems to be in the carriers section rather than the payment section, that could be it:
<sections> <carriers>
Actually, scratch that, I see the closing tag now.
It was I tried, I started again with other names and it works, so, I suppouse it was a name with something wrong or maybe the code was 'contamined' with older versions, something in the database saved wrong that doesn't change with the same names but works when I change them.
Thanks for your help
Oh glad you got it working. Sometimes starting again is the way forward when you can't spot the bug.