Implemented accoutn verify

This commit is contained in:
ChiefSoft works
2022-06-16 03:42:15 +00:00
parent 64c5f5f90a
commit 8dea39f0d3
4 changed files with 146 additions and 6 deletions
@@ -2,6 +2,7 @@
const properties = require('../package.json')
const transfer = require('../service/transfer');
const account = require('../service/account');
var controllers = {
about: function(req, res) {
@@ -27,6 +28,14 @@ var controllers = {
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;
+8 -6
View File
@@ -3,10 +3,12 @@
const controller = require('./controller');
module.exports = function(app) {
app.route('/about')
.get(controller.about);
app.route('/create')
.post(controller.postTransfer);
app.route('/status/:id')
.get(controller.getStatus);
app.route('/about')
.get(controller.about);
app.route('/create')
.post(controller.postTransfer);
app.route('/status/:id')
.get(controller.getStatus);
app.route('/verify')
.post(controller.verifyAccount);
};
+1
View File
@@ -15,6 +15,7 @@
"axios": "^0.24.0",
"body-parser": "^1.19.0",
"express": "^4.17.1",
"flutterwave-node-v3": "^1.0.9",
"openapi-types": "^10.0.0",
"pg": "8.7.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;