Initial Version
This commit is contained in:
141
server/controllers/paymentController.js
Normal file
141
server/controllers/paymentController.js
Normal file
@@ -0,0 +1,141 @@
|
||||
const asyncErrorHandler = require('../middlewares/helpers/asyncErrorHandler');
|
||||
// const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
|
||||
const paytm = require('paytmchecksum');
|
||||
const https = require('https');
|
||||
const Payment = require('../models/paymentModel');
|
||||
const ErrorHandler = require('../utils/errorHandler');
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
exports.processPayment = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const { amount, email, phoneNo } = req.body;
|
||||
|
||||
var params = {};
|
||||
|
||||
/* initialize an array */
|
||||
params["MID"] = process.env.PAYTM_MID;
|
||||
params["WEBSITE"] = process.env.PAYTM_WEBSITE;
|
||||
params["CHANNEL_ID"] = process.env.PAYTM_CHANNEL_ID;
|
||||
params["INDUSTRY_TYPE_ID"] = process.env.PAYTM_INDUSTRY_TYPE;
|
||||
params["ORDER_ID"] = "oid" + uuidv4();
|
||||
params["CUST_ID"] = process.env.PAYTM_CUST_ID;
|
||||
params["TXN_AMOUNT"] = JSON.stringify(amount);
|
||||
// params["CALLBACK_URL"] = `${req.protocol}://${req.get("host")}/api/v1/callback`;
|
||||
params["CALLBACK_URL"] = `https://${req.get("host")}/api/v1/callback`;
|
||||
params["EMAIL"] = email;
|
||||
params["MOBILE_NO"] = phoneNo;
|
||||
|
||||
let paytmChecksum = paytm.generateSignature(params, process.env.PAYTM_MERCHANT_KEY);
|
||||
paytmChecksum.then(function (checksum) {
|
||||
|
||||
let paytmParams = {
|
||||
...params,
|
||||
"CHECKSUMHASH": checksum,
|
||||
};
|
||||
|
||||
res.status(200).json({
|
||||
paytmParams
|
||||
});
|
||||
|
||||
}).catch(function (error) {
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
|
||||
// Paytm Callback
|
||||
exports.paytmResponse = (req, res, next) => {
|
||||
|
||||
// console.log(req.body);
|
||||
|
||||
let paytmChecksum = req.body.CHECKSUMHASH;
|
||||
delete req.body.CHECKSUMHASH;
|
||||
|
||||
let isVerifySignature = paytm.verifySignature(req.body, process.env.PAYTM_MERCHANT_KEY, paytmChecksum);
|
||||
if (isVerifySignature) {
|
||||
// console.log("Checksum Matched");
|
||||
|
||||
var paytmParams = {};
|
||||
|
||||
paytmParams.body = {
|
||||
"mid": req.body.MID,
|
||||
"orderId": req.body.ORDERID,
|
||||
};
|
||||
|
||||
paytm.generateSignature(JSON.stringify(paytmParams.body), process.env.PAYTM_MERCHANT_KEY).then(function (checksum) {
|
||||
|
||||
paytmParams.head = {
|
||||
"signature": checksum
|
||||
};
|
||||
|
||||
/* prepare JSON string for request */
|
||||
var post_data = JSON.stringify(paytmParams);
|
||||
|
||||
var options = {
|
||||
/* for Staging */
|
||||
hostname: 'securegw-stage.paytm.in',
|
||||
/* for Production */
|
||||
// hostname: 'securegw.paytm.in',
|
||||
port: 443,
|
||||
path: '/v3/order/status',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Content-Length': post_data.length
|
||||
}
|
||||
};
|
||||
|
||||
// Set up the request
|
||||
var response = "";
|
||||
var post_req = https.request(options, function (post_res) {
|
||||
post_res.on('data', function (chunk) {
|
||||
response += chunk;
|
||||
});
|
||||
|
||||
post_res.on('end', function () {
|
||||
let { body } = JSON.parse(response);
|
||||
// let status = body.resultInfo.resultStatus;
|
||||
// res.json(body);
|
||||
addPayment(body);
|
||||
// res.redirect(`${req.protocol}://${req.get("host")}/order/${body.orderId}`)
|
||||
res.redirect(`https://${req.get("host")}/order/${body.orderId}`)
|
||||
});
|
||||
});
|
||||
|
||||
// post the data
|
||||
post_req.write(post_data);
|
||||
post_req.end();
|
||||
});
|
||||
|
||||
} else {
|
||||
console.log("Checksum Mismatched");
|
||||
}
|
||||
}
|
||||
|
||||
const addPayment = async (data) => {
|
||||
try {
|
||||
await Payment.create(data);
|
||||
} catch (error) {
|
||||
console.log("Payment Failed!");
|
||||
}
|
||||
}
|
||||
|
||||
exports.getPaymentStatus = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const payment = await Payment.findOne({ orderId: req.params.id });
|
||||
|
||||
if (!payment) {
|
||||
return next(new ErrorHandler("Payment Details Not Found", 404));
|
||||
}
|
||||
|
||||
const txn = {
|
||||
id: payment.txnId,
|
||||
status: payment.resultInfo.resultStatus,
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
txn,
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user