UNPKG

qrcode-pix

Version:

<p align="center"> <img src="https://user-images.githubusercontent.com/22475804/114474255-346b1a00-9bcc-11eb-877f-0095c6fd5dba.jpg" height="200px" /> <h1 align="center">QR Code PIX - NodeJS and Browser</h1> </p> <br />

71 lines (70 loc) 2.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.QrCodePix = void 0; const qrcode_1 = __importDefault(require("qrcode")); const crc_1 = require("crc"); const yup_1 = require("yup"); function QrCodePix({ version, key, city, name, value, message, cep, transactionId = '***', currency = 986, countryCode = 'BR', }) { yup_1.string().equals(['01'], 'Version not supported').validateSync(version); yup_1.string() .min(2, 'countryCode: 2 characters') .max(2, 'countryCode: 2 characters') .nullable() .validateSync(countryCode); yup_1.string().min(8, 'cep: 8 characters').max(8, 'cep: 8 characters').nullable().validateSync(cep); if (String(value) === '0') { value = undefined; } yup_1.number().nullable().positive('Value must be a positive number').validateSync(value); yup_1.string().max(25, 'transactionId: max 25 characters').nullable().validateSync(transactionId); const payloadKeyString = generateKey(key, message); const payload = [ genEMV('00', version), genEMV('26', payloadKeyString), genEMV('52', '0000'), genEMV('53', String(currency)), ]; if (value) { payload.push(genEMV('54', value.toFixed(2))); } name = String(name) .substring(0, 25) .toUpperCase() .normalize('NFD') .replace(/[\u0300-\u036f]/g, ''); city = String(city) .substring(0, 15) .toUpperCase() .normalize('NFD') .replace(/[\u0300-\u036f]/g, ''); payload.push(genEMV('58', countryCode.toUpperCase())); payload.push(genEMV('59', name)); payload.push(genEMV('60', city)); if (cep) { payload.push(genEMV('61', cep)); } payload.push(genEMV('62', genEMV('05', transactionId))); payload.push('6304'); const stringPayload = payload.join(''); const crcResult = crc_1.crc16ccitt(stringPayload).toString(16).toUpperCase().padStart(4, '0'); const payloadPIX = `${stringPayload}${crcResult}`; return { payload: () => payloadPIX, base64: (options) => qrcode_1.default.toDataURL(payloadPIX, options), }; } exports.QrCodePix = QrCodePix; function generateKey(key, message) { const payload = [genEMV('00', 'BR.GOV.BCB.PIX'), genEMV('01', key)]; if (message) { payload.push(genEMV('02', message)); } return payload.join(''); } function genEMV(id, parameter) { const len = parameter.length.toString().padStart(2, '0'); return `${id}${len}${parameter}`; }