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
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?
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
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
Danke für den Beitrag!
Kleiner Hinweis: Dein Codebeispiel gibt „nur“ HTML aus und nicht direkt ein PDF. Man kann entweder die HTML-Ausgabe ausdrucken oder diese via einen Konverter (wie wkhtmltopdf oder PrinceXML) in ein PDF umwandeln.
Seit der v2.11 kann man nun aber auch direkt aus der Library ein PDF ausgeben.
https://github.com/sprain/php-swiss-qr-bill/releases