How to create Magento payment module
10 Comments 6th JUL 2010 | Posted by Domagoj Potkoc in E-Commerce, Magento

Here is small example which will explain how to create a simple Magento payment module.
I hope that you know how to create magento module and I will skip this step.
First of all, you have to create in etc folder config.xml file with next content:
< ?xml version="1.0" encoding="UTF-8"?> <config> <modules> <inchoo_mycheckout> <version>1.0.0</version> </inchoo_mycheckout> </modules> <global> <models> <mycheckout> <class>Inchoo_Mycheckout_Model</class> </mycheckout> </models> <helpers> <mycheckout> <class>Inchoo_Mycheckout_Helper</class> </mycheckout> </helpers> <blocks> <mycheckout> <class>Inchoo_Mycheckout_Block</class> </mycheckout> </blocks> </global> <default> <payment> <mycheckout> <model>mycheckout/standard</model>// very important thing, here you select the model for your payment method <active>1</active> <order_status>pending</order_status> <title>CUSTOM CARD</title> <payment_action>sale</payment_action> <submit_url>https://someurl.com</submit_url> <merchant_id>Insert merchant id</merchant_id> <allowspecific>0</allowspecific> <sort_order>1</sort_order> </mycheckout> </payment> </default> <frontend> <routers> <mycheckout> <use>standard</use> <args> <module>Inchoo_Mycheckout</module> <frontname>customcard</frontname> </args> </mycheckout> </routers> </frontend> </config>
Next step: you have to create system.xml file also in etc folder with next content:
< ?xml version="1.0"?> <config> <sections> <payment> <groups> <mycheckout translate="label comment" module="paypal"> <label>Custom CARD MyCheckOut</label> <frontend_type>text</frontend_type> <sort_order>0</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</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>10</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>20</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </title> <order_status translate="label"> <label>New Order Status</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_order_status</source_model> <sort_order>50</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> <submit_url> <label>Gateway URL</label> <frontend_type>text</frontend_type> <sort_order>58</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </submit_url> <merchant_id> <label>Merchant ID</label> <frontend_type>text</frontend_type> <sort_order>59</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>0</show_in_store> </merchant_id> <allowspecific translate="label"> <label>Payment Applicable From</label> <frontend_type>select</frontend_type> <sort_order>60</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>Countries Payment Applicable From</label> <frontend_type>multiselect</frontend_type> <sort_order>70</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> <depends><allowspecific>1</allowspecific></depends> </specificcountry> <sort_order translate="label"> <label>Sort Order</label> <frontend_type>text</frontend_type> </sort_order><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> </fields> </mycheckout> </groups> </payment> </sections> </config>
In this system.xml file we create options for this payment method. These options you will see in admin section under payment method, also if you need additional options you can add them.
Last step: is creating model in folder model with file-name standard.php. This model is defined in config.xml file. Here is example:
< ?php
class Inchoo_Mycheckout_Model_Standard extends Mage_Payment_Model_Method_Abstract
{
protected $_code = 'mycheckout';
protected $_isInitializeNeeded = true;
protected $_canUseInternal = false;
protected $_canUseForMultishipping = false;
/**
* Return Order place redirect url
*
* @return string
*/
public function getOrderPlaceRedirectUrl()
{
//when you click on place order you will be redirected on this url, if you don't want this action remove this method
return Mage::getUrl('customcard/standard/redirect', array('_secure' => true));
}
}
If your method redirect when customer click on checkout button place order you have to create (customcard/standard/redirect) standard controller with method redirectAction and etc. This page will create html form which will send POST data to payment gateway. All data which you need for creating this form you can get from Magento model $session = Mage::getSingleton(‘checkout/session’); and etc.
When you finish everything you will get next option in admin section:

I hope that will be helpful
To post code in comments, place your code inside [code] and [/code] tags.


















July 11th, 2010 at 16:05
Tnx for the showcase but this will not work on its own. You also need the following:
1. CodePool XML which goes in app/etc/modules/
This is where you would have to define coodepool for magento. This would be the file that tells magento where the module is located and weather its activated or not.
2. For a processing you would also need controller, where you would need to define functions such as startAction(), cancelAction(), void etc..
July 12th, 2010 at 4:41
Nothing happens in me. I also try different instructions on books but still nothing. I’m running it in localhost. Any help? Thank you
July 12th, 2010 at 6:53
How to change the tab caption. From “PBZ Card MyCheckOut” to “MyModule”. Thank you
July 12th, 2010 at 7:53
// Nothing happens in me. I also try different instructions on books but still nothing. I’m running it in localhost. Any help? Thank you //
P.S. This is a reference to creating a module. Anyway:
You need to create a codepool xml file in your app/etc/modules/
true
community // Or local depends where you stored the module.
Also to change the title go here: Module/Mycheckout/etc/system.xml look line 6-7.
July 12th, 2010 at 8:25
Hi Nered,
I also encountered your problem but what i just did on that is I click the “Save Config” in System>Configuration>Advanced and holla! . .my module was displayed and also my payment module. Hope this will help. =)
August 5th, 2010 at 10:18
Nothing happens , my module shows in the list of modules (configuration>advanced) but not in the Payment Methods ,help ?
August 6th, 2010 at 11:28
Hey…. good tutorial. Actually successfully made a module with it, for credit cards that are authenticated using soap calls..
but am stuck on the re-direct part… could you elaborate on that please?
August 6th, 2010 at 12:24
Victor post your action controller.
August 12th, 2010 at 10:59
a good overview !
September 2nd, 2010 at 6:45
this is really helpfull. Some times Before I was created a payment but for some reason when i created a another payment module i was unable to configure that but for your help i did that back again.
Anyway thanks for the good tutorial.
Thanks