strapi-plugin-vnpay
Version:
A strapi plugin for easy integration of VNPay.
76 lines (69 loc) • 3.11 kB
JavaScript
function sortObject(obj) {
var sorted = {};
var str = [];
var key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
str.push(encodeURIComponent(key));
}
}
str.sort();
for (key = 0; key < str.length; key++) {
sorted[str[key]] = encodeURIComponent(obj[str[key]]).replace(/%20/g, "+");
}
return sorted;
}
function signData(params, secret) {
// strapi.debug.log(hmac)
let sign = queryString.stringify(params, { encode: false });
console.log('Sign', sign)
console.log('Secret', secret)
let hmac = crypto.createHmac('sha512', secret);
var signed = hmac.update(Buffer.from(sign, 'utf-8')).digest("hex");
params.vnp_SecureHash = signed;
return params;
}
module.exports = {
/**
* Build Checkout URL for VNPay
* @param {Object} config - Config object
* @param {Object} data
* @param {String} data.vnp_TxnRef - A unique reference for the transaction (by day), if not provided, the date string with format yyyyMMddHHmmss + Math.floor(Math.random() * 10000) will be used by default.
* @param {String} data.vnp_IpAddr - IP address of the client
* @param {String} data.vnp_OrderInfo - Order information - No vietnamese characters allowed
* @param {Number} data.vnp_Amount - Amount of the transaction
* @description: Build a checkout URL for VNPay which can then be used to redirect the user to the VNPay payment page.
* @return {String} The payment url
*/
buildCheckoutUrl: function(config, data){
let dateFormat = require("dateformat")
let date = new Date();
var createDate = dateFormat(date, 'yyyymmddHHmmss');
var orderId = dateFormat(date, 'HHmmss');
var amount = data.vnp_Amount;
var orderInfo = data.vnp_OrderInfo;
var orderType = data.vnp_OrderType;
let vnp_Params = {}
vnp_Params['vnp_Version'] = '2.1.0';
vnp_Params['vnp_Command'] = 'pay';
vnp_Params['vnp_TmnCode'] = config.vnp_TmnCode;
vnp_Params['vnp_Locale'] = config.vnp_Locale;
vnp_Params['vnp_CurrCode'] = 'VND';
vnp_Params['vnp_TxnRef'] = orderId;
vnp_Params['vnp_OrderInfo'] = orderInfo;
vnp_Params['vnp_OrderType'] = orderType;
vnp_Params['vnp_Amount'] = amount * 100;
vnp_Params['vnp_ReturnUrl'] = config.vnp_ReturnUrl;
vnp_Params['vnp_IpAddr'] = data.vnp_IpAddr;
vnp_Params['vnp_CreateDate'] = createDate;
vnp_Params = sortObject(vnp_Params);
var querystring = require('qs');
var signData = querystring.stringify(vnp_Params, { encode: false });
var crypto = require("crypto");
var hmac = crypto.createHmac("sha512", config.vnp_HashSecret);
var signed = hmac.update(new Buffer(signData, 'utf-8')).digest("hex");
vnp_Params['vnp_SecureHash'] = signed;
let vnpUrl = config.paymentGateway + '?' + querystring.stringify(vnp_Params, { encode: false });
return vnpUrl;
}
}