Die Payload, die an die jeweilige Registrierkassen-API geschickt wird, wird folgendermaßen aufgebaut:
$sPayload = '_R1-AT0'; // Zahlungsdienstleister-ID
$sPayload .= '_Kassa1'; // Kassennummer
$sPayload .= '_Beleg2'; // Belegnummer
$sPayload .= '_'.date('d.m.Y').'t'.date('H:i:s'); // Datum und Uhrzeit
$sPayload .= '_12,34'; // 20% USt
$sPayload .= '_12,34'; // 10% USt
$sPayload .= '_12,34'; // 13% USt
$sPayload .= '_12,34'; // 0% USt
$sPayload .= '_12,34'; // "besondere" USt
$sPayload .= '_udSL0zTzFaA='; // Verschlüsselter Umsatzzähler
$sPayload .= '_b869153bc32a1c9'; // Zertifikat-Seriennummer im Hex-Format
$sPayload .= '_xTfZvkBSTr4='; // Signatur des vorherigen Belegs aka Verkettungswert
Ergibt folgende Ausgabe:
_R1-AT0_Kassa1_Beleg2_25.10.2021t04:29:18_12,34_12,34_12,34_12,34_12,34_udSL0zTzFaA=_b869153bc32a1c9_xTfZvkBSTr4=
Der Wert, der als verschlüsselter Umsatzzähler übergeben wird, ist jener der im Beitrag aes256_encode() beschrieben wird. Die Zertifikat-Seriennummer im Hex-Format bekommt man vom Schnittstellenanbieter und ist möglicherweise auch über die API abrufbar. Die Signatur des vorherigen Belegs bzw der Verkettungswert wird beim Abschließen des vorigen Belegs erstellt. Siehe dazu den Beitrag zu chainvalue_hash(). Für die Erstellung des QR-Codes am Beleg wird ebenso die gegenständliche Payload verwendet. Am Ende dieser wird aber zusätzlich noch der dritte Teil des Rückgabewerts der API, welcher mit base64_decode_url() von einem base64_url in einen base64-String ungewandelt wird, angehängt:
_R1-AT0_Kassa1_Beleg2_25.10.2021t04:29:18_12,34_12,34_12,34_12,34_12,34_udSL0zTzFaA=_b869153bc32a1c9_xTfZvkBSTr4=_J7YC28zquHfHzMpx02TqElbXOTSgXQu5JAA9Xu1Xzzu5p8eUYT+sgmyhzRps5nYyEp5Yh8ATIa9130zmuiACHw==