Implemented accoutn verify
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const properties = require('../package.json')
|
const properties = require('../package.json')
|
||||||
const transfer = require('../service/transfer');
|
const transfer = require('../service/transfer');
|
||||||
|
const account = require('../service/account');
|
||||||
|
|
||||||
var controllers = {
|
var controllers = {
|
||||||
about: function(req, res) {
|
about: function(req, res) {
|
||||||
@@ -27,6 +28,14 @@ var controllers = {
|
|||||||
res.json(dist);
|
res.json(dist);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
verifyAccount: function(req, res) {
|
||||||
|
account.verify(req, res, function(err, dist) {
|
||||||
|
if (err) {
|
||||||
|
res.send(err);
|
||||||
|
}
|
||||||
|
res.json(dist);
|
||||||
|
});
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = controllers;
|
module.exports = controllers;
|
||||||
|
|||||||
@@ -3,10 +3,12 @@
|
|||||||
const controller = require('./controller');
|
const controller = require('./controller');
|
||||||
|
|
||||||
module.exports = function(app) {
|
module.exports = function(app) {
|
||||||
app.route('/about')
|
app.route('/about')
|
||||||
.get(controller.about);
|
.get(controller.about);
|
||||||
app.route('/create')
|
app.route('/create')
|
||||||
.post(controller.postTransfer);
|
.post(controller.postTransfer);
|
||||||
app.route('/status/:id')
|
app.route('/status/:id')
|
||||||
.get(controller.getStatus);
|
.get(controller.getStatus);
|
||||||
|
app.route('/verify')
|
||||||
|
.post(controller.verifyAccount);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"axios": "^0.24.0",
|
"axios": "^0.24.0",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
|
"flutterwave-node-v3": "^1.0.9",
|
||||||
"openapi-types": "^10.0.0",
|
"openapi-types": "^10.0.0",
|
||||||
"pg": "8.7.1",
|
"pg": "8.7.1",
|
||||||
"pg-pool": "^3.5.1",
|
"pg-pool": "^3.5.1",
|
||||||
|
|||||||
@@ -0,0 +1,128 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const flutterwave = require('flutterwave-node-v3');
|
||||||
|
const request = require('request');
|
||||||
|
const db = require('../app/db')
|
||||||
|
const logger = require('../app/logger');
|
||||||
|
|
||||||
|
// https://developer.flutterwave.com/reference/create-a-transfer
|
||||||
|
const flutterwaveConfigBuffer = new Buffer(process.env.FLUTTERWAVE_API, 'base64');
|
||||||
|
const flutterwaveConfig = JSON.parse(flutterwaveConfigBuffer.toString('ascii'));
|
||||||
|
/*
|
||||||
|
curl -X POST http://localhost:9086/verify \
|
||||||
|
-H 'Content-Type: application/json' \
|
||||||
|
-d '{"account_bank":"044","account_number":"0690000032"}'
|
||||||
|
*/
|
||||||
|
var account = {
|
||||||
|
verify: function(req, res, next) {
|
||||||
|
const flw = new flutterwave(flutterwaveConfig.PublicKey, flutterwaveConfig.SecretKey);
|
||||||
|
const details = {
|
||||||
|
account_number: req.body.account_number,
|
||||||
|
account_bank: req.body.account_bank
|
||||||
|
};
|
||||||
|
logger.info(details);
|
||||||
|
|
||||||
|
/*
|
||||||
|
CREATE TABLE flutterwave_account_cache (
|
||||||
|
id bigserial,
|
||||||
|
account_bank VARCHAR(3) NOT NULL,
|
||||||
|
account_number VARCHAR(20) NOT NULL,
|
||||||
|
response json,
|
||||||
|
created timestamp DEFAULT NOW(),
|
||||||
|
PRIMARY KEY(id)
|
||||||
|
);
|
||||||
|
*/
|
||||||
|
// Save request in the DB
|
||||||
|
var queryText = 'INSERT INTO flutterwave_account_cache(account_bank, account_number) VALUES($1, $2) RETURNING id'
|
||||||
|
db.query(queryText, [req.body.account_bank, req.body.account_number], function(dbErr, result) {
|
||||||
|
if (dbErr) {
|
||||||
|
logger.info('Failed to save request in the DB for account_bank = %s, account_number=%s', req.body.account_bank, req.body.account_number);
|
||||||
|
logger.info(dbErr);
|
||||||
|
res.send({
|
||||||
|
status: "failure",
|
||||||
|
message: "Failed to save request in the DB!",
|
||||||
|
details: dbErr.message,
|
||||||
|
code: null,
|
||||||
|
data: details
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var flutterwave_cache_id = result.rows[0].id;
|
||||||
|
logger.info('Request saved int the DB for flutterwave_account_cache_id =', flutterwave_cache_id);
|
||||||
|
logger.info(result.rows);
|
||||||
|
// https://developer.flutterwave.com/docs/verifications/bank-account/
|
||||||
|
flw.Misc.verify_Account(details)
|
||||||
|
.then(response => {
|
||||||
|
//res.json(response);
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"status": "success",
|
||||||
|
"message": "Account details fetched",
|
||||||
|
"data": {
|
||||||
|
"account_number": "0690000032",
|
||||||
|
"account_name": "Pastor Bright"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
logger.info('-------------------------------');
|
||||||
|
logger.info(response.data);
|
||||||
|
logger.info('-------------------------------');
|
||||||
|
var json = {
|
||||||
|
status: response.status,
|
||||||
|
statusText: response.message,
|
||||||
|
data: response.data
|
||||||
|
};
|
||||||
|
queryText = 'UPDATE flutterwave_account_cache SET response=$1 WHERE id=$2';
|
||||||
|
db.query(queryText, [json, flutterwave_cache_id], function(dbErr, result) {
|
||||||
|
if (dbErr) {
|
||||||
|
logger.info('Failed to save response in the DB for flutterwave_account_cache_id =', flutterwave_cache_id);
|
||||||
|
logger.info(dbErr);
|
||||||
|
} else {
|
||||||
|
logger.info('Response saved int the DB for flutterwave_account_cache_id =', flutterwave_cache_id);
|
||||||
|
logger.info('Updated row count:', result.rowCount);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
res.json(json);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
/*
|
||||||
|
{
|
||||||
|
"status": "error",
|
||||||
|
"message": "Sorry, that account number is invalid, please check and try again",
|
||||||
|
"data": null
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
logger.error(err.message);
|
||||||
|
//logger.error(err.stack);
|
||||||
|
//logger.error(err.response.data);
|
||||||
|
//logger.error(err.response.headers);
|
||||||
|
queryText = 'UPDATE flutterwave_account_cache SET response=$1 WHERE id=$2';
|
||||||
|
db.query(queryText, [err, flutterwave_cache_id], function(dbErr, result) {
|
||||||
|
if (dbErr) {
|
||||||
|
logger.info('Failed to save error response in the DB for flutterwave_account_cache_id =', flutterwave_cache_id);
|
||||||
|
logger.info(dbErr);
|
||||||
|
} else {
|
||||||
|
logger.info('Error response saved int the DB for flutterwave_account_cache_id =', flutterwave_cache_id);
|
||||||
|
logger.info('Updated row count:', result.rowCount);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
res.send({
|
||||||
|
status: "failure",
|
||||||
|
message: "Invalid response",
|
||||||
|
details: err.message,
|
||||||
|
code: typeof err.response !== 'undefined' ? err.response.status : null,
|
||||||
|
data: typeof err.response !== 'undefined' ? err.response.data : null
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Check DB time stamp (integrity check)
|
||||||
|
db.query('SELECT NOW()', (err, res) => {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
logger.info('time:', res.rows[0])
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = account;
|
||||||
Reference in New Issue
Block a user