react-fps-hk-qrcode
Version:
React component for displaying a Hong Kong Fast Payment System QR Code
55 lines (47 loc) • 1.9 kB
JavaScript
const pad = require('./pad')
function dataObj(id, value) {
var paddedLength = pad(String(value.length),2);
return String(id + paddedLength + value);
}
function emvEncode(obj) {
var payloadFormatIndicator = dataObj("00", "01");
var pointOfInitiationMethod = dataObj("01", (obj.amount === "") ? "11" : "12");
var guid = dataObj("00", "hk.com.hkicl");
var merchantAccountInformationTemplate = "";
switch (obj.account) {
case "02":
merchantAccountInformationTemplate = dataObj("02", obj.fps_id);
break;
case "03":
merchantAccountInformationTemplate = dataObj("01", obj.bank_code) + dataObj("03", obj.mobile);
break;
case "04":
merchantAccountInformationTemplate = dataObj("01", obj.bank_code) + dataObj("04", obj.email.toUpperCase());
break;
default:
return null;
}
var merchantAccountInformation = dataObj("26", guid + merchantAccountInformationTemplate);
var merchantCategoryCode = dataObj("52", obj.mcc);
var transactionCurrency = dataObj("53", obj.currency);
var countryCode = dataObj("58", "HK");
var merchantName = dataObj("59", "NA");
var merchantCity = dataObj("60", "HK");
var transactionAmount = (obj.amount === "") ? "" : dataObj("54", obj.amount);
var reference = (obj.reference === "") ? "" : dataObj("05", obj.reference);
var additionalDataTemplate = (reference === "") ? "" : dataObj("62", reference);
var msg = ""
msg += payloadFormatIndicator;
msg += pointOfInitiationMethod;
msg += merchantAccountInformation;
msg += merchantCategoryCode;
msg += transactionCurrency;
msg += countryCode;
msg += merchantName;
msg += merchantCity;
msg += transactionAmount;
msg += additionalDataTemplate;
msg += "6304";
return msg;
}
module.exports = emvEncode