~/home of geeks

GiroCodes mit Google Docs

· 390 Wörter · 2 Minute(n) Lesedauer

GiroCodes kennt man von Rechnungen und Überweisungsträgern: Man scannt mit seinem Handy ein QR-Code ab und schon wird in der Banking-App die Überweisung mit allen Daten befüllt. Bei der Verwendung von Google Docs zur Rechnungserstellung habe ich ein paar Skriptmethoden geschrieben, mit denen man das auch in Google Docs machen kann.

GiroCodes, auch bekannt als EPC-QR-Codes, sind einfache QR-Codes, welche die Daten für eine Überweisung enthalten. Die Daten sind in einem vordefinierten Textformat hinterlegt.

GiroCode Beispiel
GiroCode Beispiel

Das Textformat sieht vereinfacht wie folgt aus:

BCD\n     // Service Tag
001\n     // Version
1\n       // Zeichenkodierung
SCT\n     // SEPA Credit Transfer
GENODEM1GLS\n               // BIC
SOS-Kinderdörfer weltweit\n // Empfänger
DE81430609672222200005\n    // IBAN
EUR10\n                     // Betrag
\n
\n                 
Spende\n                    // Zahlungszweck

Die ersten vier Zeilen sind für unsere Zwecke konstant, dem folgen die Kontodaten, der Betrag und der Zweck der Überweisung.

Eine Hilfsmethode erstellt aus den variablen Daten den Text für den GiroCode. Als Parameter wird der Rechnungsbetrag und die Rechnungsnummer übergeben.

function generateGiroCode(paymentAmount, invoiceId){
    const template = "BCD\n" + // Service Tag
        "001\n" +              // Version
        "1\n" +                // Zeichenkodierung
        "SCT\n" +              // SEPA Credit Transfer
        "GENODEM1GLS\n" +      // BIC
        "SOS-Kinderdörfer weltweit\n" + // Empfänger
        "DE81430609672222200005\n" +    // IBAN
        "EUR{{paymentAmount}}\n\n\n" +  // Betrag
        "Rechnung {{invoiceId}}\n"      // Zahlungszweck
    ;

    const paymentAmountFormatted = paymentAmount.toLocaleString('en-US',
        { minimumFractionDigits: 2, maximumFractionDigits: 2, useGrouping: false }
    );
    return template
        .replace("{{paymentAmount}}", paymentAmountFormatted)
        .replace("{{invoiceId}}", invoiceId)
        ;
}

In einer weiteren Methode wird im übergebenen Dokument nach dem Platzhalter {{qrCode}} gesucht und an dieser Stelle der QR-Code eingefügt. Der QR-Code wird mithilfe der Google Chart API erstellt und als Inline-Image eingefügt.

Hinweis: Unter GiroCodes mit Google Docs und goQR.me habe ich die Verwendung von goQR.me beschrieben, der ein kostenloser, schneller und zuverlässiger Service zum Generieren von QR-Codes ist.

const document = DocumentApp.openById(myId);
const documentBody = document.getBody();
insertGiroCode(copyBody, invoiceTotalBrutto, invoiceId);

function insertGiroCode(documentBody, paymentAmount, invoiceId) {
  const element = documentBody.findText("{{qrCode}}").getElement();
  if (element != null) {
    const sourceImageSize = 170;
    const imageSize = 95;
    const url = "https://chart.googleapis.com/chart?" +
        "chld=" + encodeURIComponent("L|0") + 
        "&chs=" + sourceImageSize + "x" + sourceImageSize + 
        "&cht=qr" +
        "&chl=" + encodeURIComponent(generateGiroCode(paymentAmount, invoiceId));
    Logger.log("GiroCode-URL: " + url);
    try{
      const image = UrlFetchApp.fetch(url);
      const imageBlob = image.getBlob();
      var inlineImage = element.getParent().asParagraph().insertInlineImage(1, imageBlob);
      element.removeFromParent();
      inlineImage.setWidth(imageSize);
      inlineImage.setHeight(imageSize);
    }
    catch(error){
      Logger.log("Fehler beim Abruf der QR-Code-URL: " + url);
      Logger.log(error);
      documentBody.replaceText("{{qrCode}}", "");
    }
  }
}