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