UNPKG

vnbankqr

Version:

Generate QR data for QR payment method in Viet Nam

101 lines (100 loc) 6.58 kB
import { FieldID, ProviderFieldID, ConsumerFieldID, AdditionDataFieldID } from './constants/Fields.js'; import { addField, checksum, padStart } from './utils/Utils.js'; import Country from './constants/Country.js'; import Currency from './constants/Currency.js'; class VNBankQR { constructor(configs) { this.version = (configs === null || configs === void 0 ? void 0 : configs.version) || "01"; this.initMethod = (configs === null || configs === void 0 ? void 0 : configs.initMethod) || "11"; this.country = (configs === null || configs === void 0 ? void 0 : configs.country) || Country.VIET_NAM; this.currency = (configs === null || configs === void 0 ? void 0 : configs.currency) || Currency.VND; } generate(transaction) { let qrData = ""; this.transaction = transaction; qrData = addField(qrData, FieldID.VERSION, this.version); qrData = addField(qrData, FieldID.INIT_METHOD, this.initMethod); qrData = this.addMerchantFields(qrData, transaction); qrData = this.addTransactionFields(qrData, transaction); qrData = this.addProviderFields(qrData, transaction); qrData = this.addAdditionDataFields(qrData, transaction); qrData = this.addChecksumFields(qrData); return qrData; } addAdditionDataFields(qrData, transaction) { let additionObj = transaction === null || transaction === void 0 ? void 0 : transaction.additionData; let consumer = transaction === null || transaction === void 0 ? void 0 : transaction.consumer; if (additionObj) { let newValue = ""; let additionData = ""; if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.billNumber) { additionData = addField(additionData, AdditionDataFieldID.BILL_NUMBER, additionObj === null || additionObj === void 0 ? void 0 : additionObj.billNumber); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.mobileNumber) { additionData = addField(additionData, AdditionDataFieldID.MOBILE_NUMBER, additionObj === null || additionObj === void 0 ? void 0 : additionObj.mobileNumber); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.storeLabel) { additionData = addField(additionData, AdditionDataFieldID.STORE_LABEL, additionObj === null || additionObj === void 0 ? void 0 : additionObj.storeLabel); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.loyalNumber) { additionData = addField(additionData, AdditionDataFieldID.LOYALTY_NUMBER, additionObj === null || additionObj === void 0 ? void 0 : additionObj.loyalNumber); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.referenceLabel) { additionData = addField(additionData, AdditionDataFieldID.REFERENCE_LABEL, additionObj === null || additionObj === void 0 ? void 0 : additionObj.referenceLabel); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.customerLabel) { additionData = addField(additionData, AdditionDataFieldID.CUSTOMER_LABEL, additionObj === null || additionObj === void 0 ? void 0 : additionObj.customerLabel); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.terminalLabel) { additionData = addField(additionData, AdditionDataFieldID.TERMINAL_LABEL, additionObj === null || additionObj === void 0 ? void 0 : additionObj.terminalLabel); } if ((additionObj === null || additionObj === void 0 ? void 0 : additionObj.transactionPurpose) || (consumer === null || consumer === void 0 ? void 0 : consumer.message)) { additionData = addField(additionData, AdditionDataFieldID.TRANSACTION_PURPOSE, (additionObj === null || additionObj === void 0 ? void 0 : additionObj.transactionPurpose) || (consumer === null || consumer === void 0 ? void 0 : consumer.message)); } if (additionObj === null || additionObj === void 0 ? void 0 : additionObj.additionDataRequest) { additionData = addField(additionData, AdditionDataFieldID.ADDITION_CONSUMER_DATA_REQUEST, additionObj === null || additionObj === void 0 ? void 0 : additionObj.additionDataRequest); } if (additionData.length > 0) { newValue = addField(qrData, FieldID.ADDITION_DATA, additionData); return newValue; } } return qrData; } addTransactionFields(qrData, transaction) { let consumer = transaction.consumer; let currency = (consumer === null || consumer === void 0 ? void 0 : consumer.currency) || this.currency; let amount = consumer.amount; let newValue = addField(qrData, FieldID.CURRENCY, currency); newValue = addField(newValue, FieldID.TRANSACTION_AMOUNT, amount + ""); return newValue; } addProviderFields(qrData, transaction) { let provider = transaction.provider; let newValue = addField(qrData, FieldID.COUNTRY_CODE, provider.country); newValue = addField(newValue, FieldID.PROVIDER_NAME, provider.name); newValue = addField(newValue, FieldID.PROVIDER_CITY, provider.city); return newValue; } addMerchantFields(qrData, transaction) { let consumer = transaction.consumer; let provider = transaction.provider; let receiverInfo = ""; let providerInfo = ""; receiverInfo = addField(receiverInfo, ConsumerFieldID.BANK_BIN, consumer.merchantBankBin); receiverInfo = addField(receiverInfo, ConsumerFieldID.BANK_NUMBER, consumer.merchantBankNumber); providerInfo = addField(providerInfo, ProviderFieldID.GUID, provider.guid); providerInfo = addField(providerInfo, ProviderFieldID.DATA, receiverInfo); providerInfo = addField(providerInfo, ProviderFieldID.SERVICE, provider.service); let newValue = addField(qrData, provider.id, providerInfo); newValue = addField(newValue, FieldID.PROVIDER_CATEGORY_CODE, provider.category); return newValue; } addChecksumFields(qrData) { let crcChecksum = checksum(qrData + FieldID.CRC + "04"); crcChecksum = padStart(crcChecksum, 4); let newValue = addField(qrData, FieldID.CRC, crcChecksum); return newValue; } } export default VNBankQR;