payEncode function
Encodes a PayDataModel into a Base32Hex QR string ready for embedding in a QR code image.
final qr = payEncode(
PayDataModel(
payments: [
PaymentOrder(
amount: 19.99,
currencyCode: 'EUR',
bankAccounts: [BankAccount(iban: 'SK9611000000002918599669')],
beneficiary: Beneficiary(name: 'Acme s.r.o.'),
),
],
),
);
Implementation
String payEncode(PayDataModel model,
[PayEncodeOptions options = const PayEncodeOptions()]) {
if (options.deburr) {
model = _removeDiacritics(model);
}
if (options.validate) {
validatePayDataModel(model, version: options.version);
}
final tabbed = paySerialize(model);
final checked = addChecksum(tabbed);
final compressed = lzmaCompress(checked);
// Strip the 13-byte LZMA header - bysquare stores only the body
final lzmaBody = compressed.sublist(13);
final output = Uint8List.fromList([
...buildBysquareHeader(
bySquareType: 0x00,
version: options.version,
documentType: 0x00,
),
...buildPayloadLength(checked.length),
...lzmaBody,
]);
return base32hexEncode(output, addPadding: false);
}