diff --git a/flutterwave-transfer-micro/README.md b/flutterwave-transfer-micro/README.md index a4c92d4..989d2cd 100644 --- a/flutterwave-transfer-micro/README.md +++ b/flutterwave-transfer-micro/README.md @@ -45,3 +45,25 @@ echo '{ --- +## Test Create Transfer + +``` +curl -X POST -H 'Content-Type: application/json' -d '{ + "account_bank": "044", + "account_number": "0690000031", + "amount": 1337, + "narration": "This is a test", + "currency": "NGN", + "reference": "202308051237", + "debit_currency": "NGN", + "money_transfer_id": 67 +}' http://localhost:3000/create +``` + +## Test Get Transfer + +http://localhost:3000/status/415801 + +## Test Verify Transaction + +http://localhost:3000/verifyTransaction/4499305 diff --git a/flutterwave-transfer-micro/api/controller.js b/flutterwave-transfer-micro/api/controller.js index a6381b9..976d0d2 100644 --- a/flutterwave-transfer-micro/api/controller.js +++ b/flutterwave-transfer-micro/api/controller.js @@ -1,6 +1,7 @@ 'use strict'; const properties = require('../package.json') +const transaction = require('../service/transaction'); const transfer = require('../service/transfer'); const account = require('../service/account'); @@ -21,13 +22,21 @@ var controllers = { }); }, getStatus: function(req, res) { - transfer.get(req, res, function(err, dist) { - if (err) { - res.send(err); - } - res.json(dist); - }); + transfer.get(req, res, function(err, dist) { + if (err) { + res.send(err); + } + res.json(dist); + }); }, + verifyTransaction: function(req, res) { + transaction.verify(req, res, function(err, dist) { + if (err) { + res.send(err); + } + res.json(dist); + }); + }, verifyAccount: function(req, res) { account.verify(req, res, function(err, dist) { if (err) { diff --git a/flutterwave-transfer-micro/api/routes.js b/flutterwave-transfer-micro/api/routes.js index 659426e..cdbc583 100644 --- a/flutterwave-transfer-micro/api/routes.js +++ b/flutterwave-transfer-micro/api/routes.js @@ -9,6 +9,8 @@ module.exports = function(app) { .post(controller.postTransfer); app.route('/status/:id') .get(controller.getStatus); + app.route('/verifyTransaction/:id') + .get(controller.verifyTransaction); app.route('/verify') .post(controller.verifyAccount); }; diff --git a/flutterwave-transfer-micro/service/transaction.js b/flutterwave-transfer-micro/service/transaction.js new file mode 100644 index 0000000..ef654e0 --- /dev/null +++ b/flutterwave-transfer-micro/service/transaction.js @@ -0,0 +1,59 @@ +'use strict'; + +const axios = require('axios'); +const request = require('request'); +const db = require('../app/db') +const logger = require('../app/logger'); + +const flutterwaveConfigBuffer = new Buffer(process.env.FLUTTERWAVE_API, 'base64'); +const flutterwaveConfig = JSON.parse(flutterwaveConfigBuffer.toString('ascii')); + +var transaction = { + verify: function(req, res, next) { + // https://developer.flutterwave.com/reference/endpoints/transactions/#verify-a-transaction + var url = flutterwaveConfig.BaseApiUrl + '/v3/transactions/' + req.params.id + '/verify'; + var headersOpt = { + "Authorization": "Bearer " + flutterwaveConfig.SecretKey, + }; + var options = { + headers: headersOpt + }; + logger.info(url); + axios.get(url, options) + .then(response => { + //res.json(response); + logger.info('-------------------------------'); + logger.info(response.data); + logger.info('-------------------------------'); + var json = { + status: response.status, + statusText: response.statusText, + data: response.data + }; + res.json(json); + }) + .catch(err => { + logger.error(err.message); + //logger.error(err.stack); + logger.error(err.response.data); + //logger.error(err.response.headers); + res.send({ + status: "failure", + message: "Invalid response", + details: err.message, + code: err.response.status, + data: err.response.data + }); + }); + // TODO: Do we save the response in the DB? I assume: YES + db.query('SELECT NOW()', (err, res) => { + if (err) { + throw err; + } + logger.info('time:', res.rows[0]) + }); + } +}; + +module.exports = transaction; +