QR Rechnung mit PHP generieren

Manuel Reinhard hat für PHP eine Bibliothek erstellt, mit welcher man schnell eine QR-Code Rechnung generieren kann.

Installation von php-swiss-qr-bill

Die Installation von php-swiss-qr-bill ist einfach. Wie bei den meisten PHP-Libaries kann dies einfach via Composer installiert werden. Solltest du kein Composer installieren wollen oder können, kannst du den Service von PHP-Download verwenden: https://php-download.com/search?q=sprain%2Fswiss-qr-bill

composer require sprain/swiss-qr-bill

Beispiel Integration der QR-Rechnung mit PHP

Binde die php-swiss-qr-bill Libary ein und füge die Informationen des Rechnugsstellers ein. Die Bibliothek erlaubt zwei Styles von Adressen. CombinedAddress und StructuredAdresse. Wir verwenden im Beispiel für den Kreditor die CombinedAddress und für den Debitor die StructuredAdress. Die Informationen für die Integration des Rechnungsstellers erhältst du von deiner Bank.

<?php
use Sprain\SwissQrBill as QrBill;
require __DIR__ . '/../vendor/autoload.php';
$qrBill = QrBill\QrBill::create();

//Kreditoren Informationen eintragen (Wer erhält das Geld?)
$qrBill->setCreditor(
    QrBill\DataGroup\Element\CombinedAddress::create(
        'Robert Schneider AG',
        'Rue du Lac 1268',
        '2501 Biel',
        'CH'
    ));

$qrBill->setCreditorInformation(
    QrBill\DataGroup\Element\CreditorInformation::create(
        'CH4431999123000889012' // Hier muss die spezielle IBAN Nummer eingetragen werden
    ));

Erfasse die Informationen des Rechnungsempfängers und die Höhe des zu zahlenden Betrags:

//Debitor, Rechnungsempfänger Adresse
$qrBill->setUltimateDebtor(
    QrBill\DataGroup\Element\StructuredAddress::createWithStreet(
        'Pia-Maria Rutschmann-Schnyder',
        'Grosse Marktgasse',
        '28',
        '9400',
        'Rorschach',
        'CH'
    ));


$qrBill->setPaymentAmountInformation(
    QrBill\DataGroup\Element\PaymentAmountInformation::create(
        'CHF',
        2500.25 //Der zuzahlende Betrag in Franken
    ));

Um die Einzahlung später eindeutig einem Auftrag zuzordnen, gibt es die Referenznummer. Diese enthält einen fixen Bereich von der Bank und eine individuell definierte Zahlenfolge z.b. die Auftragsnummer.

$referenceNumber = QrBill\Reference\QrPaymentReferenceGenerator::generate(
    '210000',  // fix definierte Nummer, kann von der Bank bezogen werden
    '313947143000901' // individuelle Nummer um die Bestellung eindeutig seinen Auftragsdaten zuzuordnen z.b. AuftragsId.
);

$qrBill->setPaymentReference(
    QrBill\DataGroup\Element\PaymentReference::create(
        QrBill\DataGroup\Element\PaymentReference::TYPE_QR,
        $referenceNumber
    ));

Nun wird es Zeit, aus den Konfigurationen ein Ergebnis zu erziehlen. Es kann entweder nur der QR-Code als Bild generiert werden oder gleich das ganze Rechnungsdokument als PDF:

//Nur QR-Code als Bild
try {
    $qrBill->getQrCode()->writeFile(__DIR__ . '/qr.png');
    $qrBill->getQrCode()->writeFile(__DIR__ . '/qr.svg');
} catch (Exception $e) {
	foreach($qrBill->getViolations() as $violation) {
		print $violation->getMessage()."\n";
	}
	exit;
}

// … oder gleich das ganze Rechnungsdokument als PDF
$output = new QrBill\PaymentPart\Output\HtmlOutput\HtmlOutput($qrBill, 'en');

print $output
    ->setPrintable(false)
    ->setQrCodeImageFormat(QrBill\QrCode\QrCode::FILE_FORMAT_SVG)
    ->getPaymentPart();

Das komplette Beispiel: https://github.com/sprain/php-swiss-qr-bill/blob/master/example/example.php
Das Github Verzeichnis php-swiss-qr-bill: https://github.com/sprain/php-swiss-qr-bill

4 Gedanken zu „QR Rechnung mit PHP generieren“

  1. Hallo

    Bei mir funktionieren beide Installationsarten nicht. Eigentlich müsste doch die example.php funktionieren, wenn ich den kompletten Ordner auf den Server kopiere, oder nicht?
    HTTP ERROR 500

    Was mache ich falsch? Hat jemand eine Idee?

    Antworten
    • Hallo Armin

      Der 500er alleine lässt auf diverse Fehler schliessen. Kannst du einmal die Fehlerdarstellung aktivieren?
      Via:
      ini_set(‚display_errors‘, 1);
      ini_set(‚display_startup_errors‘, 1);
      error_reporting(E_ALL);

      LG Chris

      Antworten
  2. Hallo Chris
    Danke für Deine Bemühungen. Ich denke, das Problem gefunden zu haben. Im PHP-Download waren nicht alle Files vorhanden. Habe nun die „Composer Files“ ins richtige Verzeichnis verschoben und so klappt es!
    Sorry, bin nicht ganz PHP sattelfest.

    Nochmals danke für Deine Bemühungen.

    LG Armin

    Antworten

Hinterlassen Sie einen Kommentar