Skip to content

Project to generate QRCode in EMV specification format.

Notifications You must be signed in to change notification settings

lucasortigoso/emv-qrcps

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This library was made to help people that are using NodeJS to generate and parse EMV QRcode according with the specifications:

It is a fork of Emmanuel Kiametis library.

This version fixes the CRC generated in cases where the resulting code is less than 4 digits long.

Installing

npm install steplix-emv-qrcps

Modules

There are 2 modules in this library.

  • Merchant - To work with QRCode according with the Merchant Specification.
  • Consumer - To work with QRCode according with the Consumer Specification.

Merchant Module

You can use this Module by importing:

const { Merchant } = require('steplix-emv-qrcps');

Methods

buildTLV

const TLV = Merchant.buildTLV(tag, length, value);
Parameter Description Type
tag Payload Format Indicator string
length Point of Initiation Method number
value Merchant Account Information string
Return Type Description
TLV It means an object that stores a Tag + Lenght + Value.

buildEMVQR

const EMVQR = Merchant.buildEMVQR();

// ... OR

const EMVQR = Merchant.buildEMVQR(
    payloadFormatIndicator,
    pointOfInitiationMethod,
    merchantAccountInformation,
    merchantCategoryCode,
    transactionCurrency,
    transactionAmount,
    tipOrConvenienceIndicator,
    valueOfConvenienceFeeFixed,
    valueOfConvenienceFeePercentage,
    countryCode,
    merchantName,
    merchantCity,
    postalCode,
    additionalDataFieldTemplate,
    crc,
    merchantInformationLanguageTemplate,
    rfuForEMVCo,
    unreservedTemplates,
);
Parameter Description Type
payloadFormatIndicator Payload Format Indicator TLV
pointOfInitiationMethod Point of Initiation Method TLV
merchantAccountInformation Merchant Account Information map [ id(string) : MerchantAccountInformation ]
merchantCategoryCode Merchant Category Code TLV
transactionCurrency Transaction Currency TLV
transactionAmount Transaction Amount TLV
tipOrConvenienceIndicator Tip or Convenience Indicator TLV
valueOfConvenienceFeeFixed Value of Convenience Fee Fixed TLV
valueOfConvenienceFeePercentage Value of Convenience Fee Percentage TLV
countryCode Country Code TLV
merchantName Merchant Name TLV
merchantCity Merchant City TLV
postalCode Postal Code TLV
additionalDataFieldTemplate Additional Data Field Template AdditionalDataFieldTemplate
crc CRC TLV
merchantInformationLanguageTemplate Merchant Information - Language Template MerchantInformationLanguageTemplate
rfuForEMVCo RFU for EMVCo array [ TLV ]
unreservedTemplates Unreserved Templates map [ id(string) : UnreservedTemplate ]
Return Type Description
EMVQR It means an object that represents an EMV QRCode.

buildAdditionalDataFieldTemplate

const additionalDataFieldTemplate = Merchant.buildAdditionalDataFieldTemplate();

// ... OR

const additionalDataFieldTemplate = Merchant.buildAdditionalDataFieldTemplate(
    billNumber,
    mobileNumber,
    storeLabel,
    loyaltyNumber,
    referenceLabel,
    customerLabel,
    terminalLabel,
    purposeTransaction,
    additionalConsumerDataRequest,
    rfuForEMVCo,
    paymentSystemSpecific
);
Parameter Description Type
billNumber Bill Number TLV
mobileNumber Country Code TLV
storeLabel Store Label TLV
loyaltyNumber Loyalty Number TLV
referenceLabel Reference Label TLV
customerLabel Customer Label TLV
terminalLabel Terminal Label TLV
purposeTransaction Purpose of Transaction TLV
additionalConsumerDataRequest Additional Consumer Data Request TLV
rfuForEMVCo RFU for EMVCo array [ TLV ]
paymentSystemSpecific Payment System specific templates map [ id(string) : PaymentSystemSpecific ]
Return Type Description
AdditionalDataFieldTemplate It means an object that represents an additional data field template.

buildMerchantInformationLanguageTemplate

const merchantInformationLanguageTemplate = Merchant.buildMerchantInformationLanguageTemplate();

// ... OR

const merchantInformationLanguageTemplate = Merchant.buildMerchantInformationLanguageTemplate(
    languagePreference,
    merchantName,
    merchantCity,
    rfuForEMVCo,
);
Parameter Description Type
languagePreference Language Preference TLV
merchantName Name of the merchant TLV
merchantCity Name of the marchant city TLV
rfuForEMVCo RFU for EMVCo array [ TLV ]
Return Type Description
MerchantInformationLanguageTemplate It means an object that represents a merchant information language template.

buildMerchantAccountInformation

const merchantAccountInformation = Merchant.buildMerchantAccountInformation();

// ... OR

const merchantAccountInformation = Merchant.buildMerchantAccountInformation(
    globallyUniqueIdentifier,
    paymentNetworkSpecific,
);
Parameter Description Type
globallyUniqueIdentifier Globally unique identifier TLV
paymentNetworkSpecific Array of payment network specific array [ TLV ]
Return Type Description
MerchantAccountInformation It means an object that represents a merchant account information.

buildUnreservedTemplate

const unreservedTemplate = Merchant.buildUnreservedTemplate();

// ... OR

const unreservedTemplate = Merchant.buildUnreservedTemplate(
    globallyUniqueIdentifier,
    paymentNetworkSpecific,
);
Parameter Description Type
globallyUniqueIdentifier Globally unique identifier TLV
contextSpecificData Array of context of specific data array [ TLV ]
Return Type Description
UnreservedTemplate It means an object that represents an unreserved template.

Object Types

TLV

Represents a TAG + Length + Value.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const tag = "01";
const value = "Example";
const length = value.length;

const TLV = Merchant.buildTLV(tag, length, value);
Methods
toString
const tlvStringFormat = TLV.toString();
Return Type Description
string TLV in string format
dataWithType
const tlvBinaryFormat = TLV.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const tlvRawFormat = TLV.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string TLV in binary OR raw data format

MerchantAccountInformation

Represents a merchant account information.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const merchantAccountInformation = Merchant.buildMerchantAccountInformation();
Methods
toString
const merchantAccountInformationStringFormat = merchantAccountInformation.toString();
Return Type Description
string MerchantAccountInformation in TLV string format
dataWithType
const merchantAccountInformationBinaryFormat = merchantAccountInformation.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const merchantAccountInformationRawFormat = merchantAccountInformation.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string MerchantAccountInformation in TLV binary OR TLV raw data format
setGloballyUniqueIdentifier
const value = "15600000000";

merchantAccountInformation.setGloballyUniqueIdentifier(value);
Parameters Description Type
value Some value string
addPaymentNetworkSpecific
const id = "03";
const value = "12345678";

merchantAccountInformation.addPaymentNetworkSpecific(id, value);
Parameters Description Type
id Tag ID string
value Some value string

MerchantInformationLanguageTemplate

Represents a merchant information language template.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const merchantInformationLanguageTemplate = Merchant.buildMerchantInformationLanguageTemplate();
Methods
toString
const merchantInformationLanguageTemplateStringFormat = merchantInformationLanguageTemplate.toString();
Return Type Description
string MerchantInformationLanguageTemplate in TLV string format
dataWithType
const merchantInformationLanguageTemplateBinaryFormat = merchantInformationLanguageTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const merchantInformationLanguageTemplateRawFormat = merchantInformationLanguageTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string MerchantInformationLanguageTemplate in TLV binary OR TLV raw data format
validate
const isValid = merchantInformationLanguageTemplate.validate();
Return Type Description
boolean True if required properties is valid otherwise throw an Error
setLanguagePreference
const value = "PT";

merchantInformationLanguageTemplate.setLanguagePreference(value);
Parameters Description Type
value Some value string
setMerchantName
const value = "Merchant Organization";

merchantInformationLanguageTemplate.setMerchantName(value);
Parameters Description Type
value Some value string
setMerchantCity
const value = "Brasilia";

merchantInformationLanguageTemplate.setMerchantCity(value);
Parameters Description Type
value Some value string
addRFUforEMVCo
const id = "03";
const value = "12345678";

merchantInformationLanguageTemplate.addRFUforEMVCo(id, value);
Parameters Description Type
id Tag ID string
value Some value string

UnreservedTemplate

Represents a merchant account information.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const unreservedTemplate = Merchant.buildUnreservedTemplate();
Methods
toString
const unreservedTemplateStringFormat = unreservedTemplate.toString();
Return Type Description
string UnreservedTemplate in TLV string format
dataWithType
const unreservedTemplateBinaryFormat = unreservedTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const unreservedTemplateRawFormat = unreservedTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string UnreservedTemplate in TLV binary OR TLV raw data format
setGloballyUniqueIdentifier
const value = "15600000000";

unreservedTemplate.setGloballyUniqueIdentifier(value);
Parameters Description Type
value Some value string
addContextSpecificData
const id = "03";
const value = "12345678";

unreservedTemplate.addContextSpecificData(id, value);
Parameters Description Type
id Tag ID string
value Some value string

PaymentSystemSpecific

Represents a payment system specific.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const paymentSystemSpecific = Merchant.buildPaymentSystemSpecific();
Methods
toString
const paymentSystemSpecificStringFormat = paymentSystemSpecific.toString();
Return Type Description
string PaymentSystemSpecific in TLV string format
dataWithType
const paymentSystemSpecificBinaryFormat = paymentSystemSpecific.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const paymentSystemSpecificRawFormat = paymentSystemSpecific.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string PaymentSystemSpecific in TLV binary OR TLV raw data format
setGloballyUniqueIdentifier
const value = "15600000000";

paymentSystemSpecific.setGloballyUniqueIdentifier(value);
Parameters Description Type
value Some value string
addPaymentSystemSpecific
const id = "03";
const value = "12345678";

paymentSystemSpecific.addPaymentSystemSpecific(id, value);
Parameters Description Type
id Tag ID string
value Some value string

AdditionalDataFieldTemplate

Represents an additional data field template.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const additionalDataFieldTemplate = Merchant.buildAdditionalDataFieldTemplate();
Methods
toString
const additionalDataFieldTemplateStringFormat = additionalDataFieldTemplate.toString();
Return Type Description
string AdditionalDataFieldTemplate in TLV string format
dataWithType
const additionalDataFieldTemplateBinaryFormat = additionalDataFieldTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const additionalDataFieldTemplateRawFormat = additionalDataFieldTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string AdditionalDataFieldTemplate in TLV binary OR TLV raw data format
setBillNumber
const value = "34250";

additionalDataFieldTemplate.setBillNumber(value);
Parameters Description Type
value Some value string
setMobileNumber
const value = "+5561991112222";

additionalDataFieldTemplate.setMobileNumber(value);
Parameters Description Type
value Some value string
setStoreLabel
const value = "1234";

additionalDataFieldTemplate.setStoreLabel(value);
Parameters Description Type
value Some value string
setLoyaltyNumber
const value = "12345";

additionalDataFieldTemplate.setLoyaltyNumber(value);
Parameters Description Type
value Some value string
setReferenceLabel
const value = "example";

additionalDataFieldTemplate.setReferenceLabel(value);
Parameters Description Type
value Some value string
setCustomerLabel
const value = "***";

additionalDataFieldTemplate.setCustomerLabel(value);
Parameters Description Type
value Some value string
setTerminalLabel
const value = "A6008667";

additionalDataFieldTemplate.setTerminalLabel(value);
Parameters Description Type
value Some value string
setPurposeTransaction
const value = "Some purpose";

additionalDataFieldTemplate.setPurposeTransaction(value);
Parameters Description Type
value Some value string
setAdditionalConsumerDataRequest
const value = "ME";

additionalDataFieldTemplate.setAdditionalConsumerDataRequest(value);
Parameters Description Type
value Some value string
addRFUforEMVCo
const id = "03";
const value = "12345678";

additionalDataFieldTemplate.addRFUforEMVCo(id, value);
Parameters Description Type
id Tag ID string
value Some value string
addPaymentSystemSpecific
const id = "03";
const value = Merchant.buildPaymentSystemSpecific();
value.setGloballyUniqueIdentifier("15600000000");
value.addPaymentSystemSpecific("03", "12345678");

additionalDataFieldTemplate.addPaymentSystemSpecific(id, value);
Parameters Description Type
id Tag ID string
value Some value string

EMVQR

Represents an EMV QRCode.

const { Merchant } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const emvqr = Merchant.buildEMVQR();
Methods
generatePayload
const emvqrStringFormat = emvqr.generatePayload();
Return Type Description
string EMV QRCode payload in string format.
dataWithType
const emvqrBinaryFormat = emvqr.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const emvqrRawFormat = emvqr.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string EMV QRCode in binary OR raw data format
toBinary
const emvqrBinaryFormat = emvqr.toBinary(); // Binary Data (shown as hex bytes)
Return Type Description
string EMV QRCode in binary format
rawData
const emvqrBinaryFormat = emvqr.rawData(); // Raw Data
Return Type Description
string EMV QRCode in raw data format
validate
const isValid = emvqr.validate();
Return Type Description
boolean True if required properties is valid otherwise throw an Error
setPayloadFormatIndicator
const value = "01";

emvqr.setPayloadFormatIndicator(value);
Parameters Description Type
value Some value string
setPointOfInitiationMethod
const value = "00";

emvqr.setPointOfInitiationMethod(value);
Parameters Description Type
value Some value string
setMerchantCategoryCode
const value = "Technology";

emvqr.setMerchantCategoryCode(value);
Parameters Description Type
value Some value string
setTransactionCurrency
const value = "BRL";

emvqr.setTransactionCurrency(value);
Parameters Description Type
value Some value string
setTransactionAmount
const value = "20.5";

emvqr.setTransactionAmount(value);
Parameters Description Type
value Some value string
setTipOrConvenienceIndicator
const value = "2";

emvqr.setTipOrConvenienceIndicator(value);
Parameters Description Type
value Some value string
setValueOfConvenienceFeeFixed
const value = "2.00";

emvqr.setValueOfConvenienceFeeFixed(value);
Parameters Description Type
value Some value string
setValueOfConvenienceFeePercentage
const value = "0.90";

emvqr.setValueOfConvenienceFeePercentage(value);
Parameters Description Type
value Some value string
setCountryCode
const value = "55";

emvqr.setCountryCode(value);
Parameters Description Type
value Some value string
setMerchantName
const value = "Merchant Organization";

emvqr.setMerchantName(value);
Parameters Description Type
value Some value string
setMerchantCity
const value = "Brasilia";

emvqr.setMerchantCity(value);
Parameters Description Type
value Some value string
setPostalCode
const value = "71715-000";

emvqr.setPostalCode(value);
Parameters Description Type
value Some value string
setCRC
const value = "AF35";

emvqr.setCRC(value);
Parameters Description Type
value Some value string
setAdditionalDataFieldTemplate
const additionalDataFieldTemplate = Merchant.buildAdditionalDataFieldTemplate();
additionalDataFieldTemplate.setStoreLabel("1234");
additionalDataFieldTemplate.setCustomerLabel("***");
additionalDataFieldTemplate.setTerminalLabel("A6008667");
additionalDataFieldTemplate.setAdditionalConsumerDataRequest("ME");

emvqr.setAdditionalDataFieldTemplate(additionalDataFieldTemplate);
Parameters Description Type
additionalDataFieldTemplate Some additional data field template AdditionalDataFieldTemplate
setMerchantInformationLanguageTemplate
let merchantInformationLanguageTemplate = Merchant.buildMerchantInformationLanguageTemplate();
merchantInformationLanguageTemplate.setLanguagePreference("PT");
merchantInformationLanguageTemplate.setMerchantName("Merchant Organization");
merchantInformationLanguageTemplate.setMerchantCity("Brasilia");
emvqr.setMerchantInformationLanguageTemplate(merchantInformationLanguageTemplate);
Parameters Description Type
merchantInformationLanguageTemplate Some merchant information language template MerchantInformationLanguageTemplate
addMerchantAccountInformation
const id = "27";

const merchantAccountInformation = Merchant.buildMerchantAccountInformation();
merchantAccountInformation.setGloballyUniqueIdentifier("com.p2pqrpay");
merchantAccountInformation.addPaymentNetworkSpecific("01", "PAPHPHM1XXX");
merchantAccountInformation.addPaymentNetworkSpecific("02", "99964403");
merchantAccountInformation.addPaymentNetworkSpecific("04", "09985903943");
merchantAccountInformation.addPaymentNetworkSpecific("05", "+639985903943");

emvqr.addMerchantAccountInformation(id, merchantAccountInformation);
Parameters Description Type
id Tag ID string
value Some merchant account information string
addUnreservedTemplates
const id = "80";

const unreservedTemplate = Merchant.buildUnreservedTemplate();
unreservedTemplate.setGloballyUniqueIdentifier("A011223344998877");
unreservedTemplate.addContextSpecificData("07", "12345678");

emvqr.addUnreservedTemplates(id, unreservedTemplate);
Parameters Description Type
id Tag ID string
value Some unreserved template string
addRFUforEMVCo
const id = "03";
const value = "12345678";

emvqr.addRFUforEMVCo(id, value);
Parameters Description Type
id Tag ID string
value Some value string

Consumer Module

You can use this Module by importing:

const { Consumer } = require('steplix-emv-qrcps')

Methods

buildBERTLV

const berTLV = Consumer.buildBERTLV();

// ... OR

const berTLV = Consumer.buildBERTLV(
    dataApplicationDefinitionFileName,
    dataApplicationLabel,
    dataTrack2EquivalentData,
    dataApplicationPAN,
    dataCardholderName,
    dataLanguagePreference,
    dataIssuerURL,
    dataApplicationVersionNumber,
    dataIssuerApplicationData,
    dataTokenRequestorID,
    dataPaymentAccountReference,
    dataLast4DigitsOfPAN,
    dataApplicationCryptogram,
    dataApplicationTransactionCounter,
    dataUnpredictableNumber
);

Parameter Description Type
dataApplicationDefinitionFileName Application Definition Name string(in-hex-decimal-format)
dataApplicationLabel Application Label string
dataTrack2EquivalentData Track to equivalent data string(in-hex-decimal-format)
dataApplicationPAN Application PAN string(in-hex-decimal-format)
dataCardholderName Cardholder Name string
dataLanguagePreference Language Preference string
dataIssuerURL Issuer URL string
dataApplicationVersionNumber Application Version Number string(in-hex-decimal-format)
dataIssuerApplicationData Issuer Application Data string(in-hex-decimal-format)
dataTokenRequestorID Token Requestor ID string(in-hex-decimal-format)
dataPaymentAccountReference Payment Account Reference string(in-hex-decimal-format)
dataLast4DigitsOfPAN Last 4 digits of PAN string(in-hex-decimal-format)
dataApplicationCryptogram Application Cryptogram string(in-hex-decimal-format)
dataApplicationTransactionCounter Application Transaction Counter string(in-hex-decimal-format)
dataUnpredictableNumber Unpredictable Number string(in-hex-decimal-format)
Return Type Description
BERTLV It means the TLV Object of the consumer module.

buildApplicationSpecificTransparentTemplate

const applicationSpecificTransparentTemplate = Consumer.buildApplicationSpecificTransparentTemplate();

// ... OR

const applicationSpecificTransparentTemplate = Consumer.buildApplicationSpecificTransparentTemplate(
	berTLV = BERTLV()
);


Parameter Description Type
berTLV BERTLV Object BERTLV
Return Type Description
ApplicationSpecificTransparentTemplate It means an object that stores an application specific transparent template.

buildApplicationTemplate

const applicationTemplate = Consumer.buildApplicationTemplate();

// ... OR

const applicationTemplate = Consumer.buildApplicationTemplate(
	berTLV = BERTLV(),
	applicationSpecificTransparentTemplates = []
);


Parameter Description Type
berTLV BERTLV Object BERTLV
applicationSpecificTransparentTemplates Application specific transparent templates array (ApplicationSpecificTransparentTemplate)
Return Type Description
ApplicationTemplate It means an object that stores an application template.

buildCommonDataTransparentTemplate

const commonDataTransparentTemplate = Consumer.buildCommonDataTransparentTemplate();

// ... OR

const commonDataTransparentTemplate = Consumer.buildCommonDataTransparentTemplate(
    berTLV = BERTLV()
);

Parameter Description Type
berTLV BERTLV Object BERTLV
Return Type Description
CommonDataTransparentTemplate It means an object that stores a common data transparent template.

buildCommonDataTemplate

const commonDataTemplate = Consumer.buildCommonDataTemplate();

// ... OR

const commonDataTemplate = Consumer.buildCommonDataTemplate(
    berTLV = BERTLV(),
	commonDataTransparentTemplates = [] 
);

Parameter Description Type
berTLV BERTLV Object BERTLV
commonDataTransparentTemplates Common data transparent templates array (CommonDataTransparentTemplate)
Return Type Description
CommonDataTemplate It means an object that stores a common data template.

buildEMVQR

const EMVQR = Consumer.buildEMVQR();

// ... OR

const EMVQR = Consumer.buildEMVQR(
    dataPayloadFormatIndicator,
    applicationTemplates,
    commonDataTemplates
);
Parameter Description Type
dataPayloadFormatIndicator Payload Format Indicator string
applicationTemplates Application Templates array [ ApplicationTemplate ]
commonDataTemplates Common Data templates array [ CommonDataTemplate ]
Return Type Description
EMVQR It means an object that represents an EMV QRCode.

Object Types

BERTLV

Represents a Basic Encoding Rules TAG + Length + Value.

const { Consumer } = require('steplix-emv-qrcps');
const { Constants } = Merchant;

const berTLV = Merchant.buildBERTLV();
Methods
setDataApplicationDefinitionFileName
berTLV.setDataApplicationDefinitionFileName("A0000000555555");
Parameters Description Type
dataApplicationDefinitionFileName Application Definition File (ADF) Name string(in-hex-decimal-format)
setDataApplicationLabel
berTLV.setDataApplicationLabel("Product1");
Parameters Description Type
setDataApplicationLabel Application Label string
setDataTrack2EquivalentData
berTLV.setDataTrack2EquivalentData("AABBCCDD");
Parameters Description Type
dataTrack2EquivalentData Track 2 Equivalent Data string(in-hex-decimal-format)
setDataApplicationPAN
berTLV.setDataApplicationPAN("1234567890123458");
Parameters Description Type
dataApplicationPAN Application PAN string(in-hex-decimal-format)
setDataCardholderName
berTLV.setDataCardholderName("CARDHOLDER/EMV");
Parameters Description Type
dataCardholderName Cardholder Name string
setDataLanguagePreference
berTLV.setDataLanguagePreference("ruesdeen");
Parameters Description Type
dataLanguagePreference Language Preference string
setDataIssuerURL
berTLV.setDataIssuerURL("http://someuri.com");
Parameters Description Type
dataIssuerURL Issuer URL string
setDataApplicationVersionNumber
berTLV.setDataApplicationVersionNumber("04");
Parameters Description Type
dataApplicationVersionNumber Application Version Number string(in-hex-decimal-format)
setDataIssuerApplicationData
berTLV.setDataIssuerApplicationData("06010A03000000");
Parameters Description Type
dataIssuerApplicationData Issuer application data string(in-hex-decimal-format)
setDataTokenRequestorID
berTLV.setDataTokenRequestorID("0601AABBCC");
Parameters Description Type
dataTokenRequestorID Token Requestor ID string(in-hex-decimal-format)
setDataPaymentAccountReference
berTLV.setDataPaymentAccountReference("0708AABBCCDD");
Parameters Description Type
dataPaymentAccountReference Payment Account Reference string(in-hex-decimal-format)
setDataLast4DigitsOfPAN
berTLV.setDataLast4DigitsOfPAN("07080201");
Parameters Description Type
dataLast4DigitsOfPAN Last 4 Digits of PAN string(in-hex-decimal-format)
setDataApplicationCryptogram
berTLV.setDataApplicationCryptogram("584FD385FA234BCC");
Parameters Description Type
dataApplicationCryptogram Application Cryptogram string(in-hex-decimal-format)
setDataApplicationTransactionCounter
berTLV.setDataApplicationTransactionCounter("0001");
Parameters Description Type
dataApplicationTransactionCounter Application Transaction Counter string(in-hex-decimal-format)
setDataUnpredictableNumber
berTLV.setDataUnpredictableNumber("6D58EF13");
Parameters Description Type
dataUnpredictableNumber Unpredictable Number string(in-hex-decimal-format)
format
berTLV.format();
Return Type Description
string BERTLV in string format
dataWithType
const berTlvBinaryFormat = berTLV.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const berTlvRawFormat = berTLV.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string BERTLV in binary OR raw data format

ApplicationSpecificTransparentTemplate

Represents an application specific transparent template.

const { Consumer } = require('steplix-emv-qrcps');
const { Constants } = Consumer;

const applicationSpecificTransparentTemplate = Consumer.buildApplicationSpecificTransparentTemplate();
Methods
setBERTLV
const berTLV = Consumer.buildBERTLV();

// Setters assignments in berTLV

applicationSpecificTransparentTemplate.setBERTLV(berTLV);
Parameters Description Type
berTLV BERTLV Object BERTLV
format
applicationSpecificTransparentTemplate.format();
Return Type Description
string ApplicationSpecificTransparentTemplate in string format
dataWithType
const binaryFormat = applicationSpecificTransparentTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const rawFormat = applicationSpecificTransparentTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string Application specific transparent template in binary OR raw data format

CommonDataTransparentTemplate

Represents a common data transparent template.

const { Consumer } = require('steplix-emv-qrcps');
const { Constants } = Consumer;

const commonDataTransparentTemplate = Consumer.buildCommonDataTransparentTemplate();
Methods
setBERTLV
const berTLV = Consumer.buildBERTLV();

// Setters assignments in berTLV

commonDataTransparentTemplate.setBERTLV(berTLV);
Parameters Description Type
berTLV BERTLV Object BERTLV
format
commonDataTransparentTemplate.format();
Return Type Description
string CommonDataTransparentTemplate in string format
dataWithType
const binaryFormat = commonDataTransparentTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const rawFormat = commonDataTransparentTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string Common data transparent template in binary OR raw data format

ApplicationTemplate

Represents an application template.

const { Consumer } = require('steplix-emv-qrcps');
const { Constants } = Consumer;

const applicationTemplate = Consumer.buildApplicationTemplate();
Methods
setBERTLV
const berTLV = Consumer.buildBERTLV();

// Setters assignments in berTLV

applicationTemplate.setBERTLV(berTLV);
Parameters Description Type
berTLV BERTLV Object BERTLV
addApplicationSpecificTransparentTemplate
const applicationSpecificTransparentTemplate = Consumer.buildApplicationSpecificTransparentTemplate();

const berTLV1 = Consumer.buildBERTLV();
berTLV1.setDataApplicationDefinitionFileName("A0000000555555");
berTLV1.setDataApplicationLabel("Product1");
applicationSpecificTransparentTemplate.setBERTLV(berTLV1);

applicationTemplate.addApplicationSpecificTransparentTemplate(applicationSpecificTransparentTemplate);
Parameters Description Type
applicationSpecificTransparentTemplate An application specific transparent template ApplicationSpecificTransparentTemplate
format
applicationTemplate.format();
Return Type Description
string ApplicationTemplate in string format
dataWithType
const binaryFormat = applicationTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const rawFormat = applicationTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string Common data transparent template in binary OR raw data format

CommonDataTemplate

Represents a common data template.

const { Consumer } = require('steplix-emv-qrcps');
const { Constants } = Consumer;

const commonDataTemplate = Consumer.buildCommonDataTemplate();
Methods
setBERTLV
const berTLV = Consumer.buildBERTLV();

// Setters assignments in berTLV

commonDataTemplate.setBERTLV(berTLV);
Parameters Description Type
berTLV BERTLV Object BERTLV
addCommonDataTransparentTemplate
const commonDataTransparentTemplate = Consumer.buildCommonDataTransparentTemplate();

const berTLV = Consumer.buildBERTLV();
berTLV.setDataIssuerApplicationData("06010A03000000");
berTLV.setDataApplicationCryptogram("584FD385FA234BCC");
berTLV.setDataApplicationTransactionCounter("0001");
berTLV.setDataUnpredictableNumber("6D58EF13");
commonDataTransparentTemplate.setBERTLV(berTLV);

commonDataTemplate.addCommonDataTransparentTemplate(commonDataTransparentTemplate);
Parameters Description Type
commonDataTransparentTemplate A common data transparent template CommonDataTransparentTemplate
format
commonDataTemplate.format();
Return Type Description
string CommonDataTemplate in string format
dataWithType
const binaryFormat = commonDataTemplate.dataWithType(Constants.DATA_TYPE.BINARY, ' '); // Binary Data (shown as hex bytes)

// OR

const rawFormat = commonDataTemplate.dataWithType(Constants.DATA_TYPE.RAW, ' '); // Raw Data
Parameters Description Type
dataType Data type value Constants.DATA_TYPE.BINARY | Constants.DATA_TYPE.RAW
indent Indent character (Ex.: ' ') string
Return Type Description
string Common data transparent template in binary OR raw data format

EMVQR

Represents an EMV QRCode.

const { Consumer } = require('steplix-emv-qrcps');
const { Constants } = Consumer;

const emvqr = Consumer.buildEMVQR();
Methods
setDataPayloadFormatIndicator
emvqr.setDataPayloadFormatIndicator("CPV01");
Parameters Description Type
dataPayloadFormatIndicator Payload Format Indicator string
addApplicationTemplate
const applicationTemplate1 = Consumer.buildApplicationTemplate();
const berTLV1 = Consumer.buildBERTLV();
berTLV1.setDataApplicationDefinitionFileName("A0000000555555");
berTLV1.setDataApplicationLabel("Product1");
applicationTemplate1.setBERTLV(berTLV1);

emvqr.addApplicationTemplate(applicationTemplate1);

const applicationTemplate2 = Consumer.buildApplicationTemplate();
const berTLV2 = Consumer.buildBERTLV();
berTLV2.setDataApplicationDefinitionFileName("A0000000666666");
berTLV2.setDataApplicationLabel("Product2");
applicationTemplate2.setBERTLV(berTLV2);

emvqr.addApplicationTemplate(applicationTemplate2);
Parameters Description Type
applicationTemplate An application template ApplicationTemplate
addCommonDataTemplate
const commonDataTemplate = Consumer.buildCommonDataTemplate();

const berTLV1 = Consumer.buildBERTLV();
berTLV1.setDataApplicationPAN("1234567890123458");
berTLV1.setDataCardholderName("CARDHOLDER/EMV");
berTLV1.setDataLanguagePreference("ruesdeen");
commonDataTemplate.setBERTLV(berTLV1);

const commonDataTransparentTemplate = Consumer.buildCommonDataTransparentTemplate();

const berTLV2 = Consumer.buildBERTLV();
berTLV2.setDataIssuerApplicationData("06010A03000000");
berTLV2.setDataApplicationCryptogram("584FD385FA234BCC");
berTLV2.setDataApplicationTransactionCounter("0001");
berTLV2.setDataUnpredictableNumber("6D58EF13");
commonDataTransparentTemplate.setBERTLV(berTLV2);

commonDataTemplate.addCommonDataTransparentTemplate(commonDataTransparentTemplate);

emvqr.addCommonDataTemplate(commonDataTemplate);
Parameters Description Type
commonDataTemplate A common data template CommonDataTemplate
generatePayload
commonDataTemplate.generatePayload();
Return Type Description
string EMVQR in base64 string format
toBinary
const emvqrBinaryFormat = emvqr.toBinary(); // Binary Data (shown as hex bytes)
Return Type Description
string EMV QRCode in binary format
rawData
const emvqrBinaryFormat = emvqr.rawData(); // Raw Data
Return Type Description
string EMV QRCode in raw data format

About

Project to generate QRCode in EMV specification format.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%