Skip to content

saquibshaikh14/paytm-payment-integration

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Paytm payment integration (NODEJS)

Simple and illustrative Paytm payment integration example.

Installation

Download the repo. Unzip it and use npm install to install all the dependencies.

cd paytm-payment-integration

npm install

Setup envirnoment variable.

MERCHANT_KEY = YOUR_MERCHANT_KEY
MERCHANT_ID = YOUR_MERCHANT_ID

Dependencies

  • express
  • ejs
  • nodemon
  • dotenv
  • cors

Usage

cd paytm-payment-integration

npm start
  • Open http://localhost:3000 in your browser
  • Fill up the form and submit
  • It will redirect to paytm payment page
  • Fill the details and complete payment.

Use in existing project

Copy paytm folder in your project

const {initializePayment, verifyPayemntAuthenticity} = require('./paytm/managePayment');

//use uuid instead of crypto for generating orderId.
const crypto = require('crypto'); 

//payment route
app.post('/payment', async(req, res)=>{
    //get amount from req.body (or as needed).
    const {amount} = req.body;
    const orderId = crypto.randomBytes(16).toString("hex");

    //create paytmParams for generating checksumhash and txnToken.
    let paytmParams = {};
    paytmParams.body = {
        "requestType"   : "Payment",
        "mid"           : process.env.MERCHANT_ID,
        "websiteName"   : process.env.WEBSITE,
        "orderId"       : orderId,
        "callbackUrl"   : "http://localhost:3000/verify-payment",
        "txnAmount"     : {
            "value"     : amount,
            "currency"  : "INR",
        }
    };

    //initializePayment returns txnInfo containing txnToken.
    let txnInfo = await initializePayment(paytmParams);

    //create hidden inputs field from hiddenInput object
    const hiddenInput = {
        txnToken    : txnInfo.body.txnToken,
        mid         : process.env.MERCHANT_ID,
        orderId     : orderId
    }
    //see 'intermediateForm.ejs' for form example.
});

//callbackUrl.
//post data sent by paytm with payament information
app.post('/verify-payment', (req, res)=>{
    
    //req.body contains all data sent by paytm related to payment.
    //check checksumhash to verify transaction is not tampered.

    //verifyPaymentAuthenticity verifies checsumhash and return paymentObject or false(if failed to match or mismatch).
    const paymentObject = await verifyPayemntAuthenticity(req.body);
    //do otherstuff i.e. save to database verify for payment completed/aborted/failed etc.
});

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.