UNPKG

ipayafrica

Version:

Integrates ipay africa payment gateway in your [node/io].js applications

179 lines (170 loc) 6.81 kB
var http=require('http'); var https=require('https'); var crypto=require('crypto'); var querystring = require('querystring'); var unirest = require('unirest'); exports.IpayAfrica=function(options){ var self=this; this.live=0; this.vid="demo"; this.hash_key="demoCHANGED"; this.transaction={ validate:function(params,callb){self.transaction_search(params,callb)} ,mobilemoney:function(params,callb){self.transaction_mobilemoney(params,callb)} ,search:function(params,callb){self.transaction_search(params,callb)} ,push_mpesa:function(params,callb){self.transaction_push_mpesa(params,callb)} ,push_airtel:function(params,callb){self.transaction_push_airtel(params,callb)} ,refund:function(params,callb){self.transaction_refund(params,callb)} }; this.init(options); } Object.assign(exports.IpayAfrica.prototype,{ init:function(options){ var _options=Object.assign({},this,options); var valid_keys=['live','vid','hash_key']; valid_keys.map((key)=>{if(options[key]!=="undefined")this[key]=_options[key];}); //////////// return this; } ,transact:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['live','oid','inv','amount','tel','eml','vid','curr','p1','p2','p3','p4','cst','cbk']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transact") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } ,transaction_search:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['oid','vid']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transaction/search") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } ,transaction_mobilemoney:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['sid','vid']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transact/mobilemoney") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } ,transaction_validate:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['account','amount','oid','sid','mpesa','paybill','airtel','airtel_paybill']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transaction/search") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } ,transaction_push_mpesa:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['phone','vid','sid']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transact/push/mpesa") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } ,transaction_push_airtel:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['phone','vid','sid']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transact/push/airtel") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } ,transaction_refund:function(data,callb){ var req={},key_order="",to_be_hashed="",hash="",_query={},_query_str=""; key_order=['code','vid']; to_be_hashed=createHashString(this,key_order,data); hash=craeteHash(this,{algo:'sha256'},to_be_hashed);//console.log(hash); _query=Object.assign({},data,{hash:hash}); _query_str=createQueryStr(this,key_order,_query); _query_str+="&hash="+hash+""; req = unirest.post("https://apis.ipayafrica.com/payments/v2/transaction/refund") .headers({ 'Content-Type': 'application/x-www-form-urlencoded' }).send(_query_str).end(res => { if (res.error)callb(res); else callb(false,res); }); //////////// return this; } }); function createHashString(_class,key_order,data){ var y=""; key_order.map((key)=>{if(typeof data[key]!=="undefined")y+=data[key];}); return y; } function craeteHash(_class,options,dataStr){ var _options=Object.assign({},{algo:"md5"},options); return crypto.createHmac(_options.algo,_class.hash_key).update(dataStr,'utf8').digest('hex'); } function createQueryStr(_class,key_order,req){//remove unwanted characters in datastr from ipay unwanted characters var datastr=""; key_order.map((key)=>{if(datastr!="")datastr+="&";datastr+=key+"="+req[key];}); return datastr; //or return querystring.stringify(req); }