node-pix-payload
Version:
This library that aims to build the payload of pix payment, with this payload the developer can generate the qr code payable or pay informed the same in the bank's app.
157 lines (156 loc) • 6.5 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getData = exports.setCountryCode = exports.setAmount = exports.setTxid = exports.setMerchantCity = exports.setMerchantName = exports.setDescription = exports.setUrl = exports.setUniquePayment = exports.setPixKey = void 0;
const Crc_class_1 = __importDefault(require("./Crc.class"));
const QrCode_class_1 = __importDefault(require("./QrCode.class"));
// payload params
const payload_1 = __importDefault(require("../models/payload"));
/**
* Pix payload Ids
* @const string
*/
const ID_PAYLOAD_FORMAT_INDICATOR = '00';
const ID_POINT_OF_INITIATION_METHOD = '01';
const ID_MERCHANT_ACCOUNT_INFORMATION = '26';
const ID_MERCHANT_ACCOUNT_INFORMATION_GUI = '00';
const ID_MERCHANT_ACCOUNT_INFORMATION_KEY = '01';
const ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION = '02';
const ID_MERCHANT_ACCOUNT_INFORMATION_URL = '25';
const ID_MERCHANT_CATEGORY_CODE = '52';
const ID_TRANSACTION_CURRENCY = '53';
const ID_TRANSACTION_AMOUNT = '54';
const ID_COUNTRY_CODE = '58';
const ID_MERCHANT_NAME = '59';
const ID_MERCHANT_CITY = '60';
const ID_ADDITIONAL_DATA_FIELD_TEMPLATE = '62';
const ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID = '05';
const ID_CRC16 = '63';
const setPixKey = (pixKey) => {
payload_1.default.pixKey = pixKey;
};
exports.setPixKey = setPixKey;
const setUniquePayment = (uniquePayment) => {
payload_1.default.uniquePayment = uniquePayment;
};
exports.setUniquePayment = setUniquePayment;
const setUrl = (url) => {
payload_1.default.url = url;
};
exports.setUrl = setUrl;
const setDescription = (description) => {
payload_1.default.description = description;
};
exports.setDescription = setDescription;
const setMerchantName = (merchantName) => {
payload_1.default.merchantName = merchantName;
};
exports.setMerchantName = setMerchantName;
const setMerchantCity = (merchantCity) => {
payload_1.default.merchantCity = merchantCity;
};
exports.setMerchantCity = setMerchantCity;
const setTxid = (txid) => {
payload_1.default.txid = txid;
};
exports.setTxid = setTxid;
const setAmount = (amount) => {
payload_1.default.amount = amount;
};
exports.setAmount = setAmount;
const setCountryCode = (countryCode) => {
payload_1.default.country_code = countryCode;
};
exports.setCountryCode = setCountryCode;
/**
* this method is responsible for return account information complete
*/
const getMerchantAccountInformation = () => {
// bank domain
const gui = getValueFormated(ID_MERCHANT_ACCOUNT_INFORMATION_GUI, 'br.gov.bcb.pix');
// pix key
const key = payload_1.default.pixKey.length > 0
? getValueFormated(ID_MERCHANT_ACCOUNT_INFORMATION_KEY, payload_1.default.pixKey)
: '';
// pix description
const description = payload_1.default.description.length > 0
? getValueFormated(ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION, payload_1.default.description)
: '';
// url dynamic qr code pix
const url = payload_1.default.url.length > 0
? getValueFormated(ID_MERCHANT_ACCOUNT_INFORMATION_URL, payload_1.default.url.replace('/^https?:///', ''))
: '';
// value account complete
return getValueFormated(ID_MERCHANT_ACCOUNT_INFORMATION, gui + key + description + url);
};
/**
* this method is responsible for returning the value of the additional pix field
*/
const getAdditionalDataFieldTemplate = () => {
const txid = getValueFormated(ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID, payload_1.default.txid);
return getValueFormated(ID_ADDITIONAL_DATA_FIELD_TEMPLATE, txid);
};
/**
* this method is responsible for return value of the ID_POINT_OF_INITIATION_METHOD
*/
const getUniquePayment = () => {
return payload_1.default.uniquePayment ? getValueFormated(ID_POINT_OF_INITIATION_METHOD, '12') : '';
};
/**
* this method is responsible for the complete return value of the payload object
* @param id
* @param value
* @return id+size+val
*/
const getValueFormated = (id, val) => {
return id + val.length.toString().padStart(2, '0') + val;
};
/**
* this method is responsible for generate the full pix payload code
*/
const getData = () => __awaiter(void 0, void 0, void 0, function* () {
const payload = getValueFormated(ID_PAYLOAD_FORMAT_INDICATOR, '01') +
getUniquePayment() +
getMerchantAccountInformation() +
getValueFormated(ID_MERCHANT_CATEGORY_CODE, '0000') +
getValueFormated(ID_TRANSACTION_CURRENCY, '986') +
getValueFormated(ID_TRANSACTION_AMOUNT, payload_1.default.amount) +
getValueFormated(ID_COUNTRY_CODE, payload_1.default.country_code) +
getValueFormated(ID_MERCHANT_NAME, payload_1.default.merchantName) +
getValueFormated(ID_MERCHANT_CITY, payload_1.default.merchantCity) +
getAdditionalDataFieldTemplate();
const text = payload + ID_CRC16 + '04' + Crc_class_1.default.calculeCrc16(payload + ID_CRC16 + '04');
clearParams();
const qrcodePayload = yield QrCode_class_1.default.generateQrCode(text);
return {
text_payload: text,
qrcode_payload: qrcodePayload,
outPut: (path, format = 'png') => QrCode_class_1.default.outPutImage({ path, text, format }),
};
});
exports.getData = getData;
/**
* this method responsible for clear payload params
*/
const clearParams = () => {
payload_1.default.amount = '';
payload_1.default.country_code = 'BR';
payload_1.default.description = '';
payload_1.default.merchantCity = '';
payload_1.default.merchantName = '';
payload_1.default.pixKey = '';
payload_1.default.txid = '';
payload_1.default.uniquePayment = false;
payload_1.default.url = '';
};
;