implemented RTGS payment feature
This commit is contained in:
36
src/controllers/rtgs.controller.js
Normal file
36
src/controllers/rtgs.controller.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
const axios = require('axios');
|
||||||
|
|
||||||
|
async function send(
|
||||||
|
fromAccount,
|
||||||
|
toAccount,
|
||||||
|
amount,
|
||||||
|
ifscCode,
|
||||||
|
beneficiaryName,
|
||||||
|
remitterName
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
const response = await axios.post(
|
||||||
|
'http://localhost:8690/kccb/Rtgsfundtransfer',
|
||||||
|
{
|
||||||
|
stFromAcc: fromAccount,
|
||||||
|
stToAcc: toAccount,
|
||||||
|
stTranAmt: amount,
|
||||||
|
stCommission: 0,
|
||||||
|
stIfscCode: ifscCode,
|
||||||
|
stFullName: remitterName,
|
||||||
|
stBeneName: beneficiaryName,
|
||||||
|
stAddress1: '',
|
||||||
|
stAddress2: '',
|
||||||
|
stAddress3: '',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return response.data;
|
||||||
|
} catch (error) {
|
||||||
|
throw new Error(
|
||||||
|
'API call to CBS failed' +
|
||||||
|
(error.response?.data?.message || error.message)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { send };
|
@@ -5,7 +5,8 @@ const transactionRoute = require('./transactions.route');
|
|||||||
const authenticate = require('../middlewares/auth.middleware');
|
const authenticate = require('../middlewares/auth.middleware');
|
||||||
const transferRoute = require('./transfer.route');
|
const transferRoute = require('./transfer.route');
|
||||||
const beneficiaryRoute = require('./beneficiary.route');
|
const beneficiaryRoute = require('./beneficiary.route');
|
||||||
const neftRoute = require('./neft.route.js');
|
const neftRoute = require('./neft.route');
|
||||||
|
const rtgsRoute = require('./rtgs.route');
|
||||||
const { npciResponse } = require('../controllers/npci.controller');
|
const { npciResponse } = require('../controllers/npci.controller');
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
@@ -15,6 +16,7 @@ router.use('/customer', authenticate, detailsRoute);
|
|||||||
router.use('/transactions/account/:accountNo', authenticate, transactionRoute);
|
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('/beneficiary', authenticate, beneficiaryRoute);
|
router.use('/beneficiary', authenticate, beneficiaryRoute);
|
||||||
router.use('/npci/beneficiary-response', npciResponse);
|
router.use('/npci/beneficiary-response', npciResponse);
|
||||||
|
|
||||||
|
48
src/routes/rtgs.route.js
Normal file
48
src/routes/rtgs.route.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const rtgsController = require('../controllers/rtgs.controller');
|
||||||
|
const { logger } = require('../util/logger');
|
||||||
|
const rtgsValidator = require('../validators/rtgs.validator.js');
|
||||||
|
const paymentSecretValidator = require('../validators/payment.secret.validator');
|
||||||
|
|
||||||
|
const router = express.Router();
|
||||||
|
router.use(rtgsValidator, paymentSecretValidator);
|
||||||
|
|
||||||
|
const rtgsRoute = async (req, res) => {
|
||||||
|
const {
|
||||||
|
fromAccount,
|
||||||
|
toAccount,
|
||||||
|
ifscCode,
|
||||||
|
amount,
|
||||||
|
beneficiaryName,
|
||||||
|
remitterName,
|
||||||
|
} = req.body;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await rtgsController.send(
|
||||||
|
fromAccount,
|
||||||
|
toAccount,
|
||||||
|
amount,
|
||||||
|
ifscCode,
|
||||||
|
beneficiaryName,
|
||||||
|
remitterName
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result.status.startsWith('O.K.')) {
|
||||||
|
const utr = result.status.slice(9, 25);
|
||||||
|
return res.json({ message: 'SUCCESS', utr });
|
||||||
|
} else if (result.status.includes('INSUFFICIENT FUNDS')) {
|
||||||
|
return res.status(422).json({ error: 'INSUFFICIENT_FUNDS' });
|
||||||
|
} else if (result.status.include('INVALID CHECK DIGIT')) {
|
||||||
|
return res.status(400).json({ error: 'INVALID_ACCOUNT_NUMBER' });
|
||||||
|
} else {
|
||||||
|
return res.status(400).json({ error: 'PROBLEM_TRANSFERRING_FUNDS' });
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(error, 'error occured while doing NEFT transaction');
|
||||||
|
return res.status(500).json({ error: 'INTERNAL_SERVER_ERROR' });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
router.post('/', rtgsRoute);
|
||||||
|
|
||||||
|
module.exports = router;
|
36
src/validators/rtgs.validator.js
Normal file
36
src/validators/rtgs.validator.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
const rtgsValidator = (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 < 200000) {
|
||||||
|
return res.status(400).json({ error: 'AMOUNT_SHOULD_BE_MORE_THAN_200000' });
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = rtgsValidator;
|
Reference in New Issue
Block a user