KHQR is the centralized QRCode for Cambodia, where every mobile banking app in Cambodia can scan and pay. KHQR ~ Scan.Pay.Done.
- decode caching
npm run test
npm install bakong-khqr
Link the script src to html
<script src="https://github.com/davidhuotkeo/bakong-khqr/releases/download/bakong-khqr-1.0.6/khqr-1.0.6.min.js"></script>
const {BakongKHQR, khqrData, IndividualInfo, MerchantInfo, SourceInfo} = require("bakong-khqr");
or
import {BakongKHQR, khqrData, IndividualInfo, MerchantInfo, SourceInfo} from "bakong-khqr";
In your script file/tag
var {BakongKHQR, khqrData, IndividualInfo, MerchantInfo, SourceInfo} = BakongKHQR;
There are 2 way of generating KHQR: Individual and Merchant
const {BakongKHQR, khqrData} = require("bakong-khqr");
const optionalData = {
currency: khqrData.currency.khr,
amount: 100000,
billNumber: "#0001",
mobileNumber: "85587575857",
storeLabel: "Devit Huotkeo",
terminalLabel: "Devit I",
expirationTimestamp: Date.now() + (1 * 60 * 1000), // required if amount is not null or zero (eg. expired in 1 minutes)
merchantCategoryCode: "5999", // optional: default value 5999
};
const merchantInfo = new MerchantInfo(
"devit@abaa",
"devit",
"Battambang",
1243546472,
"DEVBKKHPXXX",
optionalData
);
const khqr = new BakongKHQR();
const response = khqr.generateMerchant(merchantInfo);
console.log(response);
const {BakongKHQR, khqrData} = require("bakong-khqr");
const optionalData = {
currency: khqrData.currency.khr,
amount: 100000,
billNumber: "#0001",
mobileNumber: "85587575857",
storeLabel: "Devit Huotkeo",
terminalLabel: "Devit I",
expirationTimestamp: Date.now() + (2 * 60 * 1000), // required if dynamic KHQR (eg. expired in 2 minutes)
merchantCategoryCode: "5999", // optional: default value 5999
};
const individualInfo = new IndividualInfo(
"devit@abaa",
khqrData.currency.khr,
"devit",
"Battambang",
optionalData
);
const khqr = new BakongKHQR();
const response = khqr.generateIndividual(individualInfo);
console.log(response);
const {BakongKHQR} = require("bakong-khqr");
const KHQRString =
"00020101021230190015john_smith@devb5204599953038405405500.05802KH5910John Smith6010Phnom Penh62640111Invoice#0690314Coffee Khlaing0727Cooooooooooooooooooounter 299340013172734056490701131727340624907630458D8";
const isKHQR = BakongKHQR.verify(KHQRString).isValid;
console.log(isKHQR);
const {BakongKHQR, khqrData} = require("bakong-khqr");
const KHQRString =
"00020101021230190015john_smith@devb5204599953038405405500.05802KH5910John Smith6010Phnom Penh62640111Invoice#0690314Coffee Khlaing0727Cooooooooooooooooooounter 299340013172734056490701131727340624907630458D8";
const decodeResult = BakongKHQR.decode(KHQRString);
console.log(decodeResult);
const {BakongKHQR} = require("bakong-khqr");
const KHQRString =
"00020101021230190015john_smith@devb5204599953038405405500.05802KH5910John Smith6010Phnom Penh62640111Invoice#0690314Coffee Khlaing0727Cooooooooooooooooooounter 299340013172734056490701131727340624907630458D8";
const decodeResult = BakongKHQR.decodeNonKhqr(KHQRString);
console.log(decodeResult);
const {BakongKHQR, khqrData, SourceInfo} = require("bakong-khqr");
const khqr = new BakongKHQR();
// Source Info is optional but if you include it
// all fields appIconUrl, appName, appDeepLinkCallback must not be null
const sourceInfo = new SourceInfo(yourAppIconUrl, yourAppName, yourAppDeepLinkCallback);
const url = "generate deep link url provided by us";
const KHQRString =
"00020101021230190015john_smith@devb5204599953038405405500.05802KH5910John Smith6010Phnom Penh62640111Invoice#0690314Coffee Khlaing0727Cooooooooooooooooooounter 299340013172734056490701131727340624907630458D8";
const deepLinkURL = khqr.generateDeepLink(url, KHQRString, sourceInfo);
deepLinkURL.then(url => console.log(url))
const {BakongKHQR} = require("bakong-khqr");
BakongKHQR.checkBakongAccount(
"open API URL",
"dave@devb"
).then((data) => console.log(data));