GiroCode Lösung für InvoicePlane (getestet mit 1.5.9)

Hallo in die Runde,

in Deutschland macht sich der GiroCode oder Bezahlcode ja immer breiter und beliebter. Ich habe nach einer Lösung gesucht um diesen auch in InvoicePlane einbauen und nutzen zu können.

Für alle die, die es interessiert, hier der Weg:
zuerst habe ich von hier https://github.com/fellwell5/bezahlcode die bezahlcode.class.php in den Ordner /application/views/invoice_templates/pdf gepackt.

In der Template Datei (z.B.: /applications/views/invoice_templates/InvoicePlane.php)habe ich folgendes ergänzt:
Direkt vor dem </body> Tag einfügen:

<div style="text-align: right;"><br>
<?php
  require "bezahlcode.class.php";
	
	$bezahlcode = new Bezahlcode("Deine IBAN", "Dein BIC", "Dein Name");
	$bezahlcode->generatePayload("$invoice->invoice_number", "$invoice->invoice_balance");
	
	/*	get Bezahlcode as base64-string
	----------------------------------- */
	$base64 = $bezahlcode->generateBase64();
	echo "<img src='$base64' alt='Bezahlcode' width='110' height='110' />";
	    	
?>
</div>

Mit dieser Erweiterung wird automatisch der GiroCode in Deine Rechnung eingefügt, Empfängername, IBAN und BIC sind vorgegeben, als Verwendungszweck wird automatisch die Rechnungsnummer genutzt, auch der Betrag wird automatisch vom offenen Rechnungssaldo übernommen.

Viel Spaß für die, die den GiroCode in Deutschland auch mit InvoicePlane nutzen wollen!

Viele Grüße Alex

1 Like

Ich weiß zwar nicht wie genau der GiroCode funktioniert, aber es scheint ja ne sehr simple Lösung zu sein. Bietet sich sicher auch für die dauerhafte Implementierung an. Danke für die Infos!

1 Like

Hallo,

mehr Infos findet man hier
https://www.girocode.de/rechnungsempfaenger/

Das schöne ist, dass der Empfänger wenn er eine Banking App nutzt den GiroCode scannen kann und alle Daten direkt übernommen werden. Keine Tippfehler etc bei der IBAN, Verwendungszweck oder Betrag…

VG Alex

in der schweiz wurde auch ein solcher zahlcode eingeführt…

in der schweiz war es so, dass von der Funktion her nach einem gewissen schema alle Informationen wie IBAN, BIC, Verwendungszweck innerhalb des QR Codes gespeichert ist. etc.pp. denke ein QR in DE ist ähnlich, wenn nicht gar identisch zusammengesetzt nach einem festgelegten Standart, welcher dann von Apps usw. ausgelesen/interpretiert wird.

Für viele leider noch “zu Neu” um es effektiv einzusetzen. Ich persönlich kann mir vorstellen, dass sobald der Standart aber angelaufen ist, für Dienstleister, sowie Privatkunden ein zeitlicher Vorteil ist, da z.b. auf dem Bankschalter der QR Code gescannt wird, und alle Eingaben bereits in der Eingabenmaske voreingestellt sind.

Genau so könnte es beim Privatkunden sein, dass er die Rechnung z.b. per Handy scannt und das Banking App dann alle Werte wie Betrag, Verwendungszweck und Kontodaten ausgefüllt hat. Dann würde es nur noch heißen Bestätigen, TAN und fertig.

Recht herzlichen Dank für die Informationen.
Ich habe versucht das QR code ein zu binden in meine Rechnungen und das funktioniert.
Meine Bank-app (KNAB in Holland) übernimmt die Kontonummer und den betrag aber nicht die Rechnungsnummer.
Wenn ich die QR code lese mit ein decodier app scheint die Rechnungsnummer aufgenommen zu sein in die QR-code.
Kann jemand bestätigen das bei andere banken die Rechnungsnummer gut übertragen wird?
Vielleicht hat es mit standardisierung zu tun…

Bestimmt ein Grund. Bei jeder Bank heißt das doch anders. “Verwendungszwekck”, “Betreff”, “Überweisungsdetails”…

Ich habe das problem bei meiner Bank vorgelegt. Die haben getestet mit den Android bank-app und mit den Apple bank-app. Mit Apple iphone wird die Rechnungsnummer gut übertragen. Mit Android aber nicht. Also nur die Bank kann und hat auch versprochen das ‘Problem’ zu lösen. Überigens gibt es in Holland erst zwei oder drei Banken die diese scan möglichkeit bis jetzt in ihre apps eingebaut haben.

ich hatte für ein projekt ein shop selbst programmiert wo ich in die Rechnungen auch den QR Rechnungs-Code aus der Schweiz integriert habe, wie bereits erwähnt haben die dort einen gewissen standart, und um nur einmal zu Illustrieren wie dieser aussieht wie folgt:

		$qrCode = new QrCode(
							'SPC'.PHP_EOL. // SPC war wohl eine Definition (Zeile1 des Codes)
							'0100'.PHP_EOL. // 0100 auch eine Definierung (Zeile2)
							'1'.PHP_EOL. // (... Zeile3)
							page('shop')->iban()->value().PHP_EOL. // IBAN Zeile4
							page('shop')->receiver()->value().PHP_EOL.// Empfänger Zeile 5
							page('shop')->receiverstreet()->value().PHP_EOL. // Empfänger Adresse Zeile 6
							page('shop')->receiverstreetno()->value().PHP_EOL. // ETCpp.
							page('shop')->receiverstreetplz()->value().PHP_EOL.
							page('shop')->receivercity()->value().PHP_EOL.
							page('shop')->receivercountry()->value().PHP_EOL.
							''.PHP_EOL.// Manche Zeilen wie diese hier waren nicht relevant für die Zahlungen die ich tätigen möchte, deshalb bleibt diese leer
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							sprintf('%.2f',calcTotal($page->cart()->yaml())-$page->discount()->value()).PHP_EOL.
							page('shop')->currency()->value().PHP_EOL.
							date('Y-m-d', strtotime($page->date())+strtotime("+30 days")).PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							''.PHP_EOL.
							'NON'.PHP_EOL.
							''.PHP_EOL.
							$page->firstname(). ' '.$page->lastname().' - '. $page->token().PHP_EOL // Hier kommen Kundeninformationen wie Name und Referenz-ID (Token) damit man daran manuell die Zahlung verbuchen kann
						);
		$qrCode->setSize(350); // Größe des Codes
		$qrCode->setWriterByName('png'); // Dateiformat des Codes
	    $qrCode->setEncoding('UTF-8');
		$qrCode->setMargin(30);
		$qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::MEDIUM);
		$qrCode->setLogoPath('assets/images/chkreuz.png'); // Der Schweizer Code hat mittig eine Schweizer Kreuz abgebildet
		$qrCode->setLogoWidth(50);
		$qrCode->setValidateResult(false);

Um es nochmal ausdrücklich zu sagen, laut Schweizer Standart war es ganz klar definitiert, in welcher Zeile welche Information stehen muss. Bzw. in der Dokumentation, die man von der Bank erhält wurden alle gültigen Werte und Optionen beschrieben.

Andere Europäische Standards habe ich mir leider nicht angeschaut, wollte jetzt auch nur meinen Input zur Fehlerbehebung beitragen.

@carstengrimm du hast nicht zufälligerweise den “Zahlteil QR-Code” bzw. den CH-Standard in IP implementiert oder? Suche nämlich nach einer Lösung dafür… :slight_smile:

@helix nein, das nicht. der code basiert aber aus einem einfachen QR Code, der eben auf mehrere Zeilen (siehe Code oben) nach einem Standart diverse Informationen ausliefert. Dazu kommt dann nur noch das Schweizer Wappen/Logo mittig auf dem QR Code…

die Umsetzung bei IP wäre, dass du z.b. via Composer eine QR Code Klasse/Bibliothek inkludierst, diese dann im Output/Template abrufst und die genannten Informationen (als Referenz wieder den Code oben), die verschiedenen Daten wie, Preis, IBAN, Kundenname, Verwendungszweck über die IP Variablen ausgibst.

Einen fertigen Standard, konnte ich damals nicht finden…
Was ich mich auch immer bei der Implementation gefragt habe, zwar hatte ich seit dem QR Code ca. 300 Bankbestellungen, die getätigt worden sind, allerdings, ob da wirklich jemand mit dem Smartphone, oder mit dem Ausdrucken und zur Bank gehen das Verfahren genutzt hat…

Ich hatte damals echt viel Zeit für die Recherche genutzt… Kannst du einen Eindruck geben, wie gefragt das Verfahren in der Schweiz ist? Im Endeffekt würde ich Zahlungen wie Paypal oder Kreditkartenanbieter immer der Manuellen Überweisung vorziehen… Die Schweizer sind da leider sowieso um welten Hinterher… … Saferpay… Was für eine Katastrophe…

@carstengrimm

Sowas in diese Richtung habe ich mir gedacht, mir fehlt aber effektiv die Zeit dafür - Wäre aber sicherlich bereit dafür einige CHF zu bezahlen.

Der “Zahlteil QR-Code” was für ein Name… -.- / Ist sehr gefragt. Viele Zahlungen von Privatpersonen werden noch immer “manuell” über das E-Banking abgewickelt - Bei Firmen so oder so, zumindest “grössere Beträge” ab CHF 1000.- .