added imps transactions payment feature

This commit is contained in:
2025-08-22 15:31:13 +05:30
parent 1e32b4a5a6
commit 0d2cea8902
4 changed files with 117 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
const axios = require('axios');
const { logger } = require('../util/logger');
async function send(
fromAccount,
toAccount,
amount,
ifscCode,
beneficiaryName,
beneficiaryAcctType = 'SAVING',
remarks = ''
) {
try {
const reqData = {
stBenAccNo: toAccount,
stBeneName: beneficiaryName,
stBenAccType: beneficiaryAcctType,
stBenIFSC: ifscCode,
stFromAccDetails: fromAccount,
stTransferAmount: amount,
stRemarks: remarks,
};
logger.info(reqData, 'request data to be sent to IMPS server');
const response = await axios.post(
'http://localhost:6768/kccb/api/IMPS/Producer',
reqData,
{
headers: {
'Content-Type': 'application/json',
},
}
);
logger.info(response, 'response from IMPS');
return response.data;
} catch (error) {
logger.error(error, 'error from IMPS');
throw new Error(
'API call failed: ' + (error.response?.data?.message || error.message)
);
}
}
module.exports = { send };

36
src/routes/imps.route.js Normal file
View File

@@ -0,0 +1,36 @@
const express = require('express');
const impsController = require('../controllers/imps.controller');
const { logger } = require('../util/logger');
const impsValidator = require('../validators/imps.validator');
const paymentSecretValidator = require('../validators/payment.secret.validator');
const router = express.Router();
router.use(impsValidator, paymentSecretValidator);
const impsRoute = async (req, res) => {
const { fromAccount, toAccount, ifscCode, amount, beneficiaryName } =
req.body;
try {
const result = await impsController.send(
fromAccount,
toAccount,
amount,
ifscCode,
beneficiaryName,
'SAVING',
'check'
);
if (result.startsWith('Message produced successfully')) {
return res.json({ message: 'SUCCESS' });
} else {
return res.json({ error: 'INVALID_REQUEST' });
}
} catch (error) {
logger.error(error, 'error occured while doing IMPS');
return res.json({ error: 'INTERVAL_SERVER_ERROR' });
}
};
module.exports = impsRoute;

View File

@@ -7,6 +7,7 @@ const transferRoute = require('./transfer.route');
const beneficiaryRoute = require('./beneficiary.route'); const beneficiaryRoute = require('./beneficiary.route');
const neftRoute = require('./neft.route'); const neftRoute = require('./neft.route');
const rtgsRoute = require('./rtgs.route'); const rtgsRoute = require('./rtgs.route');
const impsRoute = require('./imps.route');
const { npciResponse } = require('../controllers/npci.controller'); const { npciResponse } = require('../controllers/npci.controller');
const router = express.Router(); const router = express.Router();
@@ -17,6 +18,7 @@ router.use('/transactions/account/:accountNo', authenticate, transactionRoute);
router.use('/payment/transfer', authenticate, transferRoute); router.use('/payment/transfer', authenticate, transferRoute);
router.use('/payment/neft', authenticate, neftRoute); router.use('/payment/neft', authenticate, neftRoute);
router.use('/payment/rtgs', authenticate, rtgsRoute); router.use('/payment/rtgs', authenticate, rtgsRoute);
router.use('/payment/imps', authenticate, impsRoute);
router.use('/beneficiary', authenticate, beneficiaryRoute); router.use('/beneficiary', authenticate, beneficiaryRoute);
router.use('/npci/beneficiary-response', npciResponse); router.use('/npci/beneficiary-response', npciResponse);

View File

@@ -0,0 +1,36 @@
const impsValidator = (req, res, next) => {
const {
fromAccount,
toAccount,
amount,
remitterName,
beneficiaryName,
ifscCode,
} = req.body;
if (!isAccountNumbersValid(fromAccount, toAccount)) {
return res.status(400).json({ error: 'INVALID_ACCOUNT_NUMBER_FORMAT' });
}
if (amount < 1) {
return res.status(400).json({ error: 'INVALID_AMOUNT' });
}
if (!remitterName || !beneficiaryName) {
return res
.status(400)
.json({ error: 'REMITTER_NAME AND BENEFICIARY_NAME REQUIRED' });
}
if (!ifscCode || !/^[A-Z]{4}0[0-9]{6}$/.test(ifscCode)) {
return res.status(400).json({ error: 'INVALID_IFSC_CODE' });
}
next();
};
const isAccountNumbersValid = (fromAcct, toAcct) => {
return !(!fromAcct || !toAcct || fromAcct.length != 11 || toAcct.length < 7);
};
module.exports = impsValidator;