I am using ccavenue npm module to integrate payment gateway in my website.
The problem with that modules is that it uses res.write
and res.writehead
while the res
variable passed to the module is generated by hapi and thus generating a error. So, what is the hapi equivalent of res.writehead
and res.write
.
Here is my hapi code:
var ccavenue = require('ccavenue');
ccavenue.setMerchant("******");
ccavenue.setWorkingKey("*******************");
ccavenue.setRedirectUrl("/redirect-url");
module.exports = function(plugin, options, next) {
plugin.route({
method: 'GET',
path: '/checkout',
handler: function(request, reply) {
var param = {
billing_cust_address: 'Bangalore',
billing_cust_name: 'Nitish Kumar'
};
ccavenue.setOrderId("8981455644");
ccavenue.setOrderAmount("1000");
ccavenue.setOtherParams(param);
ccavenue.makePayment(reply);
}
});
}
This is the module function:
function makePayment(res) {
var errors = helper.checkRequiredField(config);
if(errors.length > 0) {
throw new Error(errors);
}
var Checksum = helper.getCheckSum(config.merchantId, config.orderAmount, config.orderId, config.redirectUrl, config.workingKey); //This function is to verify
var body = "<form method='post' name='checkout' id='checkout' action='https://www.ccavenue.com/shopzone/cc_details.jsp'>" +
"<input type=hidden name='Merchant_Id' value='" + config.merchantId + "'>" +
"<input type=hidden name='Amount' value='" + config.orderAmount + "'>" +
"<input type=hidden name='Order_Id' value='" + config.orderId + "'>" +
"<input type=hidden name='Redirect_Url' value='" + config.redirectUrl +"'>" +
"<input type=hidden name='Checksum' value='" + Checksum + "'>" +
"<input type=hidden name='TxnType' value='A'>" +
"<input type=hidden name='ActionID' value='TXN'>";
for(var key in otherParams) {
body += "<input type=hidden name='"+ key +"' value='" + otherParams[key] + "'>";
}
body += "</form><script type='text/javascript'>" +
"document.getElementById('checkout').submit();" +
"</script>";
res.writeHead(200, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'text/html'
});
res.write(body);
res.end();
}
This is the error:
Debug: internal, implementation, error
TypeError: Uncaught error: res.writeHead is not a function
at Object.makePayment (/home/satnam-sandhu/Workstation/cuboid.io/servers/web/node_modules/ccavenue/index.js:59:8)
at Object.plugin.route.handler (/home/satnam-sandhu/Workstation/cuboid.io/servers/web/ccavenue/index.js:21:15)
at Object.exports.execute.internals.prerequisites.internals.handler.finalize [as handler] (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/handler.js:101:51)
at /home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/handler.js:32:23
at internals.Protect.run.finish [as run] (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/protect.js:60:12)
at exports.execute.finalize (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/handler.js:26:22)
at each (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/request.js:401:16)
at iterate (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/node_modules/items/lib/index.js:36:13)
at done (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/node_modules/items/lib/index.js:28:25)
at internals.Auth.test.internals.Auth._authenticate (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/auth.js:222:16)
at internals.Auth.test.internals.Auth.authenticate (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/auth.js:197:17)
at each (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/request.js:401:16)
at iterate (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/node_modules/items/lib/index.js:36:13)
at done (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/node_modules/items/lib/index.js:28:25)
at /home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/lib/protect.js:50:16
at wrapped (/home/satnam-sandhu/Workstation/cuboid.io/node_modules/hapi/node_modules/hoek/lib/index.js:875:20)
I assume you are using an older version of hapi 17.0.0, in order to to reply with html use https://github.com/hapijs/vision. Also this example tutorial should help https://futurestud.io/tutorials/hapi-how-to-render-views. Hapi will do most of the work for you. If you want to use node's res and req http server objects you need to expose the raw request and response objects from hapi's internals as documented here https://hapijs.com/api/16.5.2#request-properties under raw property.