Forum Discussion
Unable to generate a QR Code with base64 encoded e-invoice string
- 1 year ago
❌ Issue Summary
While the API may successfully return a QR code image, it does not generate it using the required TLV-structured Base64 encoding and digital signing as mandated by e-invoice standards (e.g., ZATCA in Saudi Arabia or GSTN in India). This leads to validation failure when scanned using official apps.
✔️ Recommended Solution
1. Avoid Generic QR Code APIs
Standard QR code APIs (like Google Chart API, QRCode Monkey, etc.) only encode raw strings into QR codes and do not apply the proper TLV format or embed a valid digital signature required by the tax authorities.
2. Generate the QR Code Manually with TLV Encoding
You should construct the TLV string and convert it to Base64 before generating the QR code. Here's a sample in C#:
public static string GenerateTLV(string sellerName, string vatNumber, string timestamp, string invoiceTotal, string vatTotal) { List<byte> tlvBytes = new List<byte>(); tlvBytes.AddRange(EncodeTLV(1, sellerName)); tlvBytes.AddRange(EncodeTLV(2, vatNumber)); tlvBytes.AddRange(EncodeTLV(3, timestamp)); tlvBytes.AddRange(EncodeTLV(4, invoiceTotal)); tlvBytes.AddRange(EncodeTLV(5, vatTotal)); return Convert.ToBase64String(tlvBytes.ToArray()); } private static byte[] EncodeTLV(int tag, string value) { byte[] valueBytes = Encoding.UTF8.GetBytes(value); List<byte> tlv = new List<byte>(); tlv.Add((byte)tag); tlv.Add((byte)valueBytes.Length); tlv.AddRange(valueBytes); return tlv.ToArray(); }3. Render QR in Power BI Report Builder
- Use a properly formatted Base64 string.
- Bind it to an image control or a custom image generation service that can handle the format.
4. Validate with Official Tools
After implementing your own TLV + Base64 encoding logic, validate the output using the official government QR scanner (e.g., ZATCA or GSTN apps).
5. Useful Resources
In summary: do not rely on third-party QR code APIs for compliant e-invoice QR code generation. Use your own TLV encoding logic to meet the regulatory standards.
✔️ If my message helped solve your issue, please mark it as Resolved!
👍 If it was helpful, consider giving it a Kudos!
Hi Sravan_mahindra,
We wanted to kindly check in to see if everything is working as expected after trying the suggested solution. If there’s anything else we can assist with, please don’t hesitate to ask.
If the issue is resolved, we’d appreciate it if you could mark the helpful reply as Accepted Solution it helps others who might face a similar issue.
Warm regards,
Prasanna Kumar