How to create Magento payment module

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 🙂
85 comments
To see payment in front, be sure the payment code is the same name as the config node.
Example : `protected $_code = ‘my_payment’;`
And config structure in your XML:
`config > sections > payment > groups > my_payment`
This code not working for me so please share the code …
thank you
It not show on frontend how to show that on frontend side? Can you please help me about this.
In your custom model class use:
protected $_canUseCheckout = true;
Class name always start with capital letter, so make sure that it is Standard.php
Hello, nice work 🙂 Do you maybe have complete source code?
hello sir
my payment policy is 40% online payment and 60% cash on delivery
plece sir help how to create in magento
Hi I also want same, did you get any solution on this
Hello
Thank you for your nice tutorial , I done this its working for me fine, But i could not see payment method name in magento admin panel sales order , Please guide me
Thanks
Hello,
could you please share the knowlege that how magento processing the right payment gateway details from the radio selection. What are the rest process for that?
how to create magento module for payment gateway i am new in magento
I am new in magento so can you please tell me where i can find model folder which is mentioned in your last step
Thanks
My payment module is not visible on front end. and why did u leave this aspect in your tutorial. what is the use of a service when one cannot use it. means module won’t appear on front end this way. and even no tutorial like this is on your blog. why is that so? it must be a tutorial series. its in complete sorry. Please help me urgently with this.
Hello everyone, Can any one tell me that how can i add a field of payment method logo just like title, when we write any thing in title its displayed in frontend on checkout and i want to add a field of logo so i can add a image and it should displayed in checkout page.
thank in adv.
Sir can we add all active payment method in registration page also in magento ?
Greetings follow this tutorial and I have created the payment method, now I need to show in the checkout, how can I do this part? Magento 1.8.1
screenshot:
http://blog.digi-solution.com/wp-content/uploads/2014/10/Configuration-System-Magento-Admin.png
Someone knows how to do to show this new payment method in the checkout? please!
Great help, thanks. Tested it with Magento 1.9.
Hi men, you test in magento 1.9? How you did to display this new payment method in the checkout? thank you
Hi Domagoj! i want a paypal popup window right after i click in the order button in onpage checkout page but it so hard with me can you show me how to do that T___T thanks
I need your support friends!
I have a payment method extension. This generate a Token URL for finally redirect at shopper at gateway.
But now I need create into my system.xml, Two groups;
The system.xml file content:
Payment Methods
sales
text
501
1
1
0
MyGateway Express
text
5
1
1
0
Enabled
select
payment/mygateway_express/active
adminhtml/system_config_source_yesno
0
1
1
0
Title
text
20
required-entry
1
1
0
API Key
text
30
required-entry
1
1
0
Signature Key
text
40
required-entry
1
1
0
Environment
select
mygateway/config::getEnvironment
50
1
1
0
Shopper Email
Optional. Send automatically payment instructions at Shopper’s email.
select
payment/mygateway_express/shopper_email
adminhtml/system_config_source_yesno
120
1
1
0
Advanced Settings
config-advanced
text
1
1
0
150
Payment Action
select
mygateway/config::getPaymentAction
20
1
1
0
New order status
select
adminhtml/system_config_source_order_status_processing
30
1
1
0
Payment from applicable countries
allowspecific
40
adminhtml/system_config_source_payment_allspecificcountries
1
1
1
Payment from Specific countries
multiselect
50
adminhtml/system_config_source_country
1
1
1
1
Sort order
text
60
1
1
0
validate-not-negative-number
* The first group for keep general configuration fields (credentials p.e.) and active the original service;
* The second group for basics fields and enable a new service using the credentials of first group.
As you see friends, I need this extension shown at Shopper finally two payment options. I’m trying of replicate as work of the Paypal extension but yet aren’t me work. Or otherwise can give me tips or tutorial on how to work with more two groups of this way it…
Thanks very much!!!!
please help me i want to make credit card payment through user account in magento frontend after place order
A very big unnoticeable bug exists here.
frontname, here N should be capital
Hello, This is a grate Tutorial. There is Authorize.net module in Magento. I want to Create my module and call method of Authorize.net for payment from my module. Is it possible?
Hi Sir
First, I appreciate you and thank you to for writing such brilliant tutorials.
This solution is not working with magento 1.7 in my case. Will you please give me any guideline for implementing it in magento 1.7.
Thanks
Hello Everyone,
please am new to magento can any one show me in details how to get this payment gateway to work i cant really get it right.
I have my model configured. When I place any of the payment action method which are capture, initialize or authorize. I get error on Payment gateway selection page.
Note: I do not have Payment Action option available in my configuration section. Is that required?
Hello Domagoj Potkoc can u tell me is magento store order in databse before payment or after payment.
I am newbie in magento
We like to integrate a payment module for creating admin orders which uses third party transfer.
When we try to create the order, it gets placed without redirecting.
Is it possible to make this in magento ?
If so please guide us to move forward.
Thanks to all.
Is it possible to create a magento module in ASP.Net using C#? If yes how?
Aren’t there some parts missing here – like for example where do I put HTML which shows up when user selects my new module in checkout?
hi, Im half way though using your invaluable tutorial.
My payment gateway sends back the response to a URL which I can specify. Can you show me how to capture that and update the order status using this module please ?
many thanks
Amila
@ Karthik – You have a Foreign Key Constraint, you can set a flag in your MySQL script…
SET FOREIGN_KEY_CHECKS = 0;
Put this at top, this will prevent a FK from preventing your script completing. I would bare in mind this is a quick and dirty fix, there maybe be something wrong with your Magento install.
\”SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`magento_database`.`sales_flat_quote_payment`, CONSTRAINT `FK_SALES_FLAT_QUOTE_PAYMENT_QUOTE_ID_SALES_FLAT_QUOTE_ENTITY_ID` FOREIGN KEY (`quote_id`) REFERENCES `sales_flat_quote` (`entity_id`))\”
Please guide me to solve this.
Thanks.
Many kudus for very informative blog entry.
How can I add online and offline refund options from admin for a particular payment gateway? If you could provide any type of help I would be highly grateful.