Files
2022-06-16 03:42:15 +00:00

128 lines
5.9 KiB
JavaScript

'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;