flutterwave
Version:
A nodejs library for the Flutterwave API
455 lines (379 loc) • 19.2 kB
JavaScript
/**
* Flutterwave Account class
*
* @class FlutterwaveAccount
* @constructor
*/
var FlutterwaveAccount = function (FlutterwaveBase) {
/**
* Charge (for collecting payment from a bank account)
*
* @method charge
* @param {Object} paymentData {accountNumber, amountToPay, creditAccountNumber, trxref, narration, merchantid}
* @param {Function} callback
*/
this.charge = function (paymentData, callback) {
var requestParams = {};
paymentData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(paymentData, this.endpointParamSpec('/accessbank/pay'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('bank/pay', requestParams, callback);
}
/**
* Validate (For validating pending transactions from a bank account)
*
* @method charge
* @param {Object} paymentData {accountToken, amountToPay, trxref}
* @param {Function} callback
*/
this.validate = function (paymentData, callback) {
var requestParams = {};
paymentData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(paymentData, this.endpointParamSpec('/pay/validate'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('bank/pay/validate', requestParams, callback);
}
/**
* Initiate (For setting up a bank account for recurrent payment)
*
* @method pay
* @param {String} accountNumber
* @param {Function} callback
*/
this.initiateRecurrentPayment = function (accountNumber, callback) {
var requestParams = {};
var paymentData = {};
paymentData.accountNumber = accountNumber;
paymentData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(paymentData, this.endpointParamSpec('/recurrent/account'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('recurrent/account', requestParams, callback);
}
/**
* Validate (For validating a bank account been setup for recurrent payment)
*
* @method validate
* @param {Object} paymentData {accountNumber, otp, reference, billingamount, debitnarration}
* @param {Function} callback
*/
this.validateRecurrentAccount = function (paymentData, callback) {
var requestParams = {};
paymentData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(paymentData, this.endpointParamSpec('/account/validate'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('recurrent/account/validate', requestParams, callback);
}
/**
* Charge (For charging a bank account that has been setup for recurrent payment)
*
* @method charge
* @param {Object} paymentData {merchantid, accountToken, billingamount, debitnarration}
* @param {Function} callback
*/
this.chargeRecurrentAccount = function (paymentData, callback) {
var requestParams = {};
paymentData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(paymentData, this.endpointParamSpec('/account/charge'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('recurrent/account/charge', requestParams, callback);
}
/**
* Resolve an account (Get information about an account owner)
*
* @method resolveAccount
* @param {Object} accountData {destbankcode, recipientaccount, merchantid}
* @param {Function} callback
*/
this.resolveAccount = function (accountData, callback) {
var requestParams = {};
accountData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(accountData, this.endpointParamSpec('/account/resolve'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('pay/resolveaccount', requestParams, callback);
}
/**
* linkAccount (for linking a bank account)
*
* @method linkAccount
* @param {Object} accountData {accountnumber, merchantid}
* @param {Function} callback
*/
this.linkAccount = function (accountData, callback) {
var requestParams = {};
accountData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(accountData, this.endpointParamSpec('/account/link'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('pay/linkaccount', requestParams, callback);
}
/**
* validateAccountLinking (for linking a bank account)
*
* @method validateAccountLinking
* @param {Object} accountData {otp, relatedreference, otptype, merchantid}
* @param {Function} callback
*/
this.validateAccountLinking = function (accountData, callback) {
var requestParams = {};
accountData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(accountData, this.endpointParamSpec('/account/link/validate'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('pay/linkaccount/validate', requestParams, callback);
}
/**
* getLinkedAccounts (for getting all linked accounts)
*
* @method getLinkedAccounts
* @param {Object} accountData {merchantid}
* @param {Function} callback
*/
this.getLinkedAccounts = function (accountData, callback) {
var requestParams = {};
accountData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(accountData, this.endpointParamSpec('/account/link/get'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('pay/getlinkedaccounts', requestParams, callback);
}
/**
* sendPayment (for sending payment to an accountnumber)
*
* @method sendPayment
* @param {Object} paymentData {accounttoken, destbankcode, uniquereference, country, currency, transferamount, narration, recipientname, sendername, recipientaccount, merchantid}
* @param {Function} callback
*/
this.sendPayment = function (paymentData, callback) {
var requestParams = {};
paymentData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(paymentData, this.endpointParamSpec('/account/pay/send'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('pay/send', requestParams, callback);
}
/**
* Charge an (non access) account number (Method 2 Charge an account number)
*
* @method sendPayment
* @param {Object} paymentData {narration, accountnumber, bankcode, passcode, amount, currency, firstname, lastname, email, transactionreference}
* @param {Function} callback
*/
this.chargeM2 = function (chargeM2Data, callback) {
var requestParams = {};
chargeM2Data.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(chargeM2Data, this.endpointParamSpec('/account/chargeM2'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('account/pay', requestParams, callback);
}
/**
* Validate method 2 charge
*
* @method sendPayment
* @param {Object} validateChargeM2Data {otp, transactionreference, merchantid}
* @param {Function} callback
*/
this.validateChargeM2 = function (validateChargeM2Data, callback) {
var requestParams = {};
validateChargeM2Data.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(validateChargeM2Data, this.endpointParamSpec('/account/validate/chargeM2'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('account/pay/validate', requestParams, callback);
}
/*******************************************************************************/
/*******************************************************************************/
/**
* Charge an (non access) account number (Method 2 Charge an account number)
*
* @method sendPayment
* @param {Object} paymentData {narration, accountnumber, bankcode, passcode, amount, currency, firstname, lastname, email, transactionreference}
* @param {Function} callback
*/
this.chargeM3 = function (chargeM3Data, callback) {
var requestParams = {};
chargeM3Data.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(chargeM3Data, this.endpointParamSpec('/account/chargeM3'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('account/pay', requestParams, callback);
}
/**
* Validate method 3 charge
*
* @method sendPayment
* @param {Object} validateChargeM2Data {otp, transactionreference, merchantid}
* @param {Function} callback
*/
this.validateChargeM3 = function (validateChargeM3Data, callback) {
var requestParams = {};
validateChargeM3Data.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(validateChargeM3Data, this.endpointParamSpec('/account/validate/chargeM3'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('account/pay/validate', requestParams, callback);
}
/*******************************************************************************/
/*******************************************************************************/
/**
* USSD Validate
*
* @method sendPayment
* @param {Object} validateChargeM2Data {otp, transactionreference, merchantid}
* @param {Function} callback
*/
this.validateUSSD = function (USSData, callback) {
var requestParams = {};
USSData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(USSData, this.endpointParamSpec('/account/validate/ussd'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('accessbank/ussd/validate', requestParams, callback);
}
/**
* Disburse status
*
* @method transactionStatus
* @param {Object} statusData {uniquereference, country}
* @param {Function} callback
*/
this.transactionStatus = function (statusData, callback) {
var requestParams = {};
statusData.merchantid = FlutterwaveBase.getMerchantKey();
requestParams.data = FlutterwaveBase.validateAndEncryptParams(statusData, this.endpointParamSpec('/pay/status'), FlutterwaveBase.getMerchantAPIKey());
requestParams.method = 'POST';
return FlutterwaveBase.makeRequest('pay/status', requestParams, callback);
}
this.endpointParamSpec = function (path)
{
var specs = {};
specs['/pay/status'] = FlutterwaveBase.objectBuilder({})
.build('merchantid', 'required:true, encrypt:false')
.build('uniquereference', 'required:true, encrypt:true')
.build('country', 'required:false, encrypt:true')
.end();
specs['/account/chargeM2'] = FlutterwaveBase.objectBuilder({})
.build('bankcode', 'required:false, encrypt:true')
.build('narration', 'required:true, encrypt:true')
.build('accountnumber', 'required:false, encrypt:true')
.build('passcode', 'required:false, encrypt:true')
.build('validateoption', 'required:false, encrypt:true')
.build('amount', 'required:true, encrypt:true')
.build('currency', 'required:true, encrypt:true')
.build('firstname', 'required:true, encrypt:true')
.build('lastname', 'required:true, encrypt:true')
.build('email', 'required:true, encrypt:true')
.build('country', 'required:false, encrypt:true')
.build('vpcmerchant', 'required:false, encrypt:true')
.build('responseurl', 'required:false, encrypt:true')
.build('transactionreference', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/validate/chargeM2'] = FlutterwaveBase.objectBuilder({})
.build('otp', 'required:true, encrypt:true')
.build('transactionreference', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
/*******************************************************************************/
/*******************************************************************************/
specs['/account/chargeM3'] = FlutterwaveBase.objectBuilder({})
.build('bankcode', 'required:false, encrypt:true')
.build('narration', 'required:true, encrypt:true')
.build('accountnumber', 'required:false, encrypt:true')
.build('passcode', 'required:false, encrypt:true')
.build('validateoption', 'required:false, encrypt:true')
.build('amount', 'required:true, encrypt:true')
.build('currency', 'required:true, encrypt:true')
.build('firstname', 'required:true, encrypt:true')
.build('lastname', 'required:true, encrypt:true')
.build('email', 'required:true, encrypt:true')
.build('country', 'required:false, encrypt:true')
.build('responseurl', 'required:false, encrypt:true')
.build('accounttoken', 'required:false, encrypt:true')
.build('authmodel', 'required:false, encrypt:true')
.build('phonenumber', 'required:false, encrypt:true')
.build('transactionreference', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.build('vpcmerchant', 'required:false, encrypt:true')
.end();
specs['/account/validate/chargeM3'] = FlutterwaveBase.objectBuilder({})
.build('validateparameter', 'required:true, encrypt:true')
.build('validateparametervalue', 'required:true, encrypt:true')
.build('transactionreference', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
/*******************************************************************************/
/*******************************************************************************/
specs['/account/validate/ussd'] = FlutterwaveBase.objectBuilder({})
.build('otp', 'required:true, encrypt:true')
.build('phonenumber', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/resolve'] = FlutterwaveBase.objectBuilder({})
.build('destbankcode', 'required:true, encrypt:true')
.build('recipientaccount', 'required:true, encrypt:true')
.build('country', 'required:false, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/recurrent/account'] = FlutterwaveBase.objectBuilder({})
.build('accountNumber', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/validate'] = FlutterwaveBase.objectBuilder({})
.build('accountNumber', 'required:true, encrypt:true')
.build('otp', 'required:true, encrypt:true')
.build('reference', 'required:true, encrypt:true')
.build('billingamount', 'required:true, encrypt:true')
.build('debitnarration', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/charge'] = FlutterwaveBase.objectBuilder({})
.build('accountToken', 'required:true, encrypt:true')
.build('billingamount', 'required:true, encrypt:true')
.build('debitnarration', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/link'] = FlutterwaveBase.objectBuilder({})
.build('accountnumber', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/link/validate'] = FlutterwaveBase.objectBuilder({})
.build('otp', 'required:true, encrypt:true')
.build('otptype', 'required:true, encrypt:true')
.build('relatedreference', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/link/get'] = FlutterwaveBase.objectBuilder({})
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/account/pay/send'] = FlutterwaveBase.objectBuilder({})
.build('accounttoken', 'required:true, encrypt:true')
.build('destbankcode', 'required:true, encrypt:true')
.build('uniquereference', 'required:true, encrypt:true')
.build('country', 'required:true, encrypt:true')
.build('currency', 'required:true, encrypt:true')
.build('narration', 'required:true, encrypt:true')
.build('vpcmerchant', 'required:false, encrypt:true')
.build('transferamount', 'required:true, encrypt:true')
.build('sendername', 'required:true, encrypt:true')
.build('recipientname', 'required:true, encrypt:true')
.build('recipientaccount', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
//Faulty SPECS
specs['/accessbank/pay'] = FlutterwaveBase.objectBuilder({})
.build('accountNumber', 'required:true, encrypt:true')
.build('amountToPay', 'required:true, encrypt:true')
.build('creditAccountNumber', 'required:true, encrypt:true')
.build('trxref', 'required:true, encrypt:true')
.build('vpcmerchant', 'required:false, encrypt:true')
.build('narration', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/pay/validate'] = FlutterwaveBase.objectBuilder({})
.build('otp', 'required:true, encrypt:true')
.build('accountToken', 'required:true, encrypt:true')
.build('amountToPay', 'required:true, encrypt:true')
.build('trxref', 'required:true, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
specs['/pay/resendotp'] = FlutterwaveBase.objectBuilder({})
.build('validateoption', 'required:true, encrypt:true')
.build('trxref', 'required:false, encrypt:true')
.build('merchantid', 'required:true, encrypt:false')
.end();
return specs[path];
}
}
module.exports = FlutterwaveAccount