KONTOPRUEF-Navigation:
Kundencenter
KONTOPRUEF allgemein:
KONTOPRUEF-ONLINE:
KONTOPRUEF-INHOUSE ("HanftServer"):
KONTOPRUEF-OFFLINE:
Tools und Demos:
Impressum
Datenschutz
|
Simple PHP-Klasse für SEPA-XML-Dateien
Auf dieser Seite können Sie eine simple PHP-Klasse herunterladen,
mit der Sie SEPA-XML-Dateien mit Gutschriften und Lastschriften erstellen
können. Sie brauchen dazu keinerlei "PHP-Extensions" installieren;
alles funktioniert mit "PHP-Bordmitteln".
Sie können die PHP-Klasse KtoSepaSimple kostenlos von
dieser Seite herunterladen
und ausprobieren. Wenn Sie sie ernst- und dauerhaft einsetzen, kostet
die Benutzung einmalig eine Schutzgebühr in Höhe von
11,90 € inkl. 19% Mwst.
Sie können die SEPA-XML-Datei zur Überweisung dieses Betrags
gleich mit dieser Klasse erzeugen! Falls Sie
eine Quittung benötigen, können Sie sie
hier anzeigen. Vorab-Rechnungen
stellen wir für diesen geringen Betrag nicht aus.
Inhalt:
Im Unterschied zur PHP-Vollversion von
KONTOPRUEF-OFFLINE gibt es bei dieser simplen Klasse die
folgenden Einschränkungen:
- Es findet keinerlei Plausibilitätskontrolle statt: Was Sie als
Werte an die Klassenmethoden übergeben, wird 1:1 in die XML-Datei
geschrieben, auch wenn es der größte Unsinn ist. Sie können
also Muh! als IBAN übergeben und Bla@#?!
als BIC, und die Datei wird mit diesen Daten erstellt. Sie fliegt Ihnen
erst dann um die Ohren, wenn Sie sie zu Ihrer Bank übertragen...
Die Vollversion von KONTOPRUEF-OFFLINE
führt ausgiebige Plausibilitätsprüfungen durch,
kontrolliert sämtliche Prüfziffern, die Existenz und Erreichbarkeit
von BICs für Überweisungen und Lastschriften sowie den
sinnvollen Zusammenhang zwischen den verschiedenen Feldern,
so dass Sie stets eine ordnungsgemäße XML-Datei
erzeugen.
- Auch der Zeichensatz wird nicht geprüft. Sie sind selbst
dafür verantwortlich, dass Sie nur zulässige Zeichen
verwenden; im wesentlichen sind das Groß- und Kleinbuchstaben,
Ziffern und die Sonderzeichen + ? / - : ( ) . , '
(kein & – also Vorsicht mit "GmbH &
Co. KG"!), in manchen Feldern zusätzlich
auch noch Zwischenräume. Dateien mit unzulässigen Zeichen
werden von Ihrer Bank i.d.R. zurückgewiesen!
Die Vollversion von KONTOPRUEF-OFFLINE
erstellt stets XML-Dateien aus gültigen Zeichen (je nach Feld)
und ersetzt ggf. ungültige Zeichen durch zulässige
Ersatzzeichen.
- Der Buchungstag wird unverändert und
unkontrolliert übernommen. Wenn Sie das Datum auf einen
Sonntag oder auch Karfreitag oder den 25.12. legen, wird Ihr
Auftrag vielleicht am darauffolgenden Werktag, vielleicht aber
auch gar nicht ausgeführt. (Es gibt auch schon Banken,
die den Buchungstag in diesem Fall kostenpflichtig
auf den nächsten Bankarbeitstag verschieben!) Auch für
die Beachtung der korrekten Mindesteinlieferungsfristen
bei Ihrer Bank sind Sie selbst verantwortlich.
Die Vollversion von KONTOPRUEF-OFFLINE
kennt Wochenenden und Feiertage und verschiebt ungültige
Buchungstage automatisch auf den nächsten Bankarbeitstag.
Auch die Einlieferungsfristen werden auf Wunsch automatisch berechnet.
- Bei Lastschriften sind Sie selbst für die
Mandatsverwaltung verantwortlich, d.h. Sie
müssen den SequenceType korrekt setzen und – bei
Mandatsänderungen, z.B neues Konto des Schuldners –
die entsprechenden Felder in den AmendmentInfoDetails
mit den geeigneten Werten belegen.
Die Vollversion von KONTOPRUEF-OFFLINE
ermittelt anhand einer Mini-Datenbank automatisch den korrekten
SequenceType und belegt bei Mandatsänderungen ebenso automatisch
die entsprechenden Felder in den AmendmentInfoDetails.
- Sie erhalten für diese simple PHP-Klasse keinerlei
Support. Wenn Sie nähere Informationen zu den
einzelnen Datenfeldern haben wollen, müssen Sie selbst
in der Datenformatspezifikation nachlesen.
Als Kunde der Vollversion von KONTOPRUEF-OFFLINE
erhalten Sie bei allen Fragen unbegrenzten Gratis-Support per E-Mail.
Die Dokumentation auf dieser Seite bezieht sich auf die Version 1.1, die
Sie auch unten auf dieser Seite herunterladen können.
Falls Sie bereits die vorherige Version 1.0 verwenden, beachten Sie bitte die
geänderten Aufrufparameter bei beiden Funktionen und
ändern Sie Ihr PHP-Skript entsprechend.
Die Versionsangabe finden Sie in den ersten paar Zeilen des Skripts
KtoSepaSimple.php: Wenn dort "Version 1.1" enthalten ist,
handelt es sich um ebendiese Version; wenn gar keine Versionsangabe enthalten ist,
handelt es sich um die Version 1.0
Seit Version 1.1 lassen sich in eine XML-Datei mehrere PmtInf
schreiben, d.h. Sammelaufträge mit unterschiedlichem Ausführungsdatum,
SequenceType (bei Lastschriften) und CategoryPurpose.
Alle Buchungen, bei denen diese drei Angaben übereinstimmen, werden
automatisch in eine gemeinsame PmtInf (=Sammelauftrag)
zusammengefasst.
class KtoSepaSimple {
public function Add($aDatum, $aBetrag, $aName, $aIban,
$aBic=NULL, $aCtgyPurp=NULL, $aPurp=NULL, $aRef=NULL, $aVerwend=NULL,
$aSeqTp=NULL, $aMandatRef=NULL, $aMandatDate=NULL,
$aOldMandatRef=NULL, $aOldName=NULL, $aOldCreditorId=NULL, $aOldIban=NULL, $aOldBic=NULL);
public function GetXML($aType, $aMsgId, $aPmtInfId, $aInitgPty,
$aAuftraggeber, $aIban, $aBic, $aCreditorId=NULL);
}
Die Verwendung der KtoSepaSimple-Klasse geschieht wie folgt:
Erzeugen einer Instanz:
require_once('KtoSepaSimple.php');
$myKtoSepaSimple = new KtoSepaSimple();
Hinzufügen der Buchung(en) via Add:
Hier geben Sie für jede Buchung die Daten der "Gegenstelle" an,
also die des Zahlungsempfängers bei Überweisungen bzw. die des
Zahlungspflichtigen bei Lastschriften.
$myKtoSepaSimple->Add(...);
$myKtoSepaSimple->Add(...);
$myKtoSepaSimple->Add(...);
usw.
Abrufen des Dateiinhalts via GetXML:
Hier geben Sie Ihre eigenen Daten (Bankverbindung, ggf. Gläubiger-ID
etc.) an, sowie auftragsspezifische Daten (z.B. Buchungstag, ggf. SequenceType
etc.). Sie erhalten den XML-Text als String-Returnwert dieser Funktion
und können ihn z.B. in eine Datei schreiben, die Sie danach zu Ihrer
Bank übertragen.
$myXML = $myKtoSepaSimple->GetXML(...);
file_put_contents('Dateiname', $myXML); // oder anderweitige Weiterverarbeitung
Die Parameter für die Add- und GetXML-Aufrufe
werden in den folgenden Abschnitten beschrieben.
Parameter, die "weggelassen" werden sollen, müssen Sie
als NULL oder leeren String ''
übergeben.
$aDatum | Der gewünschte Buchungstag für diese
Buchung, im Format
JJJJ-MM-TT, also z.B. 2013-09-30
für den 30.9.2013. Geben Sie hier unbedingt einen Bankarbeitstag
an (also kein Wochenende und keinen Feiertag)! Beachten
Sie außerdem die Einlieferungsfristen bei Ihrer Bank, z.B.
"sechs Bankarbeitstage vor Buchungsdatum, bis 12 Uhr"
für erstmalige Lastschriften o.ä. |
$aBetrag | Der Betrag in EURO (andere Währungen sind
nicht möglich), z.B. 123.45 |
$aName | Der Name des Zahlungsempfängers (bei
Überweisungen) bzw. des Zahlungspflichtigen (bei Lastschriften),
maximal 70 Zeichen (*) |
$aIban | Die IBAN des Zahlungsempfängers (bei
Überweisungen) bzw. des Zahlungspflichtigen (bei Lastschriften),
nur GROSSbuchstaben und Ziffern, keine Zwischenräume und/oder
Sonderzeichen |
Alle restlichen Parameter sind rein technisch
– zumindest
für Überweisungen – im Prinzip wahlfrei und müssen
nicht unbedingt angegeben werden (der BIC darf allerdings erst ab dem 1.2.2014
für innerdeutsche Zahlungen und ab dem 1.2.2016 für
ausländische Zahlungen weggelassen werden). Wir empfehlen
Ihnen jedoch, den BIC, möglichst eine End-To-End-Referenz (z.B.
eine Rechnungsnummer) und auf jeden Fall den Verwendungszweck
anzugeben, damit der Zahlungsempfänger bzw. -pflichtige die
Zahlung korrekt zuordnen kann. |
$aBic | Der BIC des Zahlungsempfängers (bei
Überweisungen) bzw. des Zahlungspflichtigen (bei Lastschriften),
nur GROSSbuchstaben und Ziffern, keine Zwischenräume und/oder
Sonderzeichen, entweder acht oder
elf Zeichen lang, kann ab dem 1.2.2014 für innerdeutsche
Zahlungen und ab dem 1.2.2016 für
ausländische Zahlungen weggelassen werden |
$aCtgyPurp | Kategorisierung des resultierenden
Sammelauftrags, z.B.
SALA für Gehaltsüberweisungen. Die
vollständige Liste finden Sie
in der Tabelle CategoryPurpose. Für
"normale" Überweisungen können Sie dieses Feld i.d.R.
leer lassen. |
$aPurp | Kategorisierung dieser
Buchung; entspricht dem Textschlüssel der
bisherigen DTAUS-Dateien. Die vollständige Liste finden Sie
in der Tabelle Purpose. Für
"normale" Überweisungen können Sie dieses Feld i.d.R.
leer lassen, lediglich bei
Gehaltsüberweisungen müssen Sie
SALA angeben, bei vermögenswirksamen
Leistungen CBFF, bei Überweisungen
öffentlicher Kassen GOVT und bei
Spenden CHAR. Es gibt noch zahlreiche
erweiterte Codes (z.B. BONU oder
PENS statt SALA)
für Bonus- oder Pensionszahlungen, um den Zweck
der Überweisung feiner aufgliedern zu können.
Umgekehrt können Sie z.B., wenn Sie ein Elektrizitätswerk
sind, bei Lastschriften für die Stromrechnung hier
ELEC angeben und derlei mehr. Suchen Sie sich den besten
der (derzeit) 159 möglichen Codes aus... |
$aRef | Eine eindeutige Referenz der Zahlung
(z.B. eine Rechnungsnummer), die Sie auch bei evtl. Retouren
zurückerhalten. (*) |
$aVerwend | Der Verwendungszweck der Zahlung,
maximal 140 Zeichen Freitext. Versuchen Sie hier
keine Formatierung (Spalten, Zeilen...)
einzubauen – einen evtl. Zeilenumbruch
im Kontoauszug macht jede Bank anders. Glauben Sie also
nicht, dieses Feld bestünde aus
"4 x 35 Zeichen" o.ä.! Schreiben Sie einfach
fortlaufenden Text in dieses Feld. (*) |
Hier sind die Parameter für
Überweisungen beendet! Alle folgenden Parameter dürfen
und müssen nur bei Lastschriften
angegeben werden! |
$aSeqTp | Der SequenceType dieser
Lastschrift. Hier ist nur einer der Werte
OOFF (einmalige Lastschrift),
FRST (erste Lastschrift),
RCUR (wiederholte Lastschrift) oder
FNAL (letzte Lastschrift) möglich.
Der SequenceType einer Lastschrift bezieht sich
stets auf eine bestimmte Mandatsreferenz bei einem bestimmten
Kunden, z.B. "Fritz Meiers Abonnement des Stenkelfelder Abendblatts"
– die erste Lastschrift dafür ist FRST,
alle weiteren RCUR, und wenn Herr Meier sein
Abonnement kündigt, wird die letzte Lastschrift FNAL
(wodurch auch das Mandat erlischt). Bei Einmalkäufen
(ohne Abonnement o.ä.) wird OOFF verwendet. |
$aMandatRef | Die Mandatsreferenz, die Sie mit
Ihrem Kunden für diese Lastschrift vereinbart haben. (*) |
$aMandatDate | Das Datum, an dem Ihr Kunde das
Mandat unterzeichnet hat, im Format JJJJ-MM-TT,
also z.B. 2013-09-21 für den 21.9.2013. |
Die folgenden Parameter dürfen
und müssen nur bei wiederholten
Lastschriften angegeben werden, falls sich gegenüber den
bisherigen Lastschriften (zu diesem Mandat!) etwas geändert
hat: |
$aOldMandatRef | Die alte Mandatsreferenz, falls
bei dieser Lastschrift eine neue Mandatsreferenz verwendet wird (*) |
$aOldName | Der alte Name des Zahlungsempfängers,
falls bei dieser Lastschrift ein neuer Name verwendet wird (*) |
$aOldCreditorId | Die alte Gläubiger-ID, falls
bei dieser Lastschrift eine neue Gläubiger-ID verwendet wird |
$aOldIban | Die alte IBAN des Schuldners, falls bei
dieser Lastschrift eine neue IBAN verwendet wird |
$aOldBic | Die Textkonstante SMNDA
(nicht der alte BIC!), falls bei dieser Lastschrift ein neuer
BIC verwendet wird (in diesem Fall ist der SequenceType –
auch bei wiederholten Lastschriften! – auf FRST
zurückzusetzen, wobei die verlängerte Einlieferungsfrist
zu beachten ist) |
(*) Bitte informieren Sie sich bei allen Feldern über die
zulässige Länge und den zulässigen Zeichensatz
in der aktuellen Formatbeschreibung!
Parameter, die "weggelassen" werden sollen, müssen Sie
als NULL oder leeren String ''
übergeben.
$aType | Geben Sie hier den Typ der Datei an:
$aType | Typ | EBICS-Auftragstyp |
TRF | Überweisungen | CCT |
CORE | Basislastschriften | CDD |
B2B | Firmenlastschriften | CDB |
COR1 | Basislastschriften mit verkürzter Einlieferungsfrist
nicht mehr zulässig! | CD1 |
|
$aMsgId | Die Bezeichnung Ihrer Datei, die
auch in Ihrem Kontoauszug ausgedruckt wird. Welches der beiden Felder
wie formatiert angezeigt wird, hängt von Ihrer Bank ab –
experimentieren Sie also ein wenig herum. Füllen Sie aber
unbedingt beide Felder aus! Sie können auch
in beide Felder den gleichen Wert schreiben. (*)
KtoSepaSimple.php fügt außerdem bei
der PmtInfId noch – hinter einem Bindestrich –
den jeweiligen CategoryPurpose hinzu (falls angegeben)
sowie (bei Lastschriften) den SequenceType. Falls
Sie das nicht wüschen, können Sie die entsprechenden
Zeilen aus dem PHP-Code entfernen. (*) |
$aPmtInfId |
$aInitgPty | Der Einlieferer der Datei. Das kann der
Auftraggeber selbst sein, oder ein externes Dienstleistungs-Rechenzentrum
o.ä. Name genügt. (*) |
$aAuftraggeber | Der Name des Auftraggebers (also Ihrer),
maximal 70 Zeichen (*) |
$aIban | Die IBAN des Auftraggebers (also Ihre),
nur GROSSbuchstaben und Ziffern, keine Zwischenräume und/oder
Sonderzeichen |
$aBic | Der BIC des Auftraggebers (also Ihrer),
nur GROSSbuchstaben und Ziffern, keine Zwischenräume und/oder
Sonderzeichen, entweder acht oder
elf Zeichen lang, kann ab dem 1.2.2014 für innerdeutsche
Zahlungen und ab dem 1.2.2016 für
ausländische Zahlungen weggelassen werden |
Hier sind die Parameter für
Überweisungen beendet! Alle folgenden Parameter dürfen
und müssen nur bei Lastschriften
angegeben werden! |
$aCreditorId | Ihre Gläubiger-ID |
(*) Bitte informieren Sie sich bei allen Feldern über die
zulässige Länge und den zulässigen Zeichensatz
in der aktuellen Formatbeschreibung!
require_once('KtoSepaSimple.php');
$myKtoSepaSimple = new KtoSepaSimple();
$myKtoSepaSimple->Add('2013-09-30', 1813.29, 'Meier,Fritz', 'DE93101517390101753982', 'BANKDEFF',
'SALA', 'SALA', '1060/201309', 'Gehalt 09/2013');
$myKtoSepaSimple->Add('2013-09-30', 957.13, 'Mueller,Guenter', 'DE87102593121000089317', 'CASHDEMM417',
'SALA', 'SALA', '1070/201309', 'Gehalt 09/2013');
$xml = $myKtoSepaSimple->GetXML('TRF', 'Gehaelter.09.2013', 'Pers.-Nr.1060-1070',
'Dienstleister GmbH', 'Firma GmbH u. Co. KG', 'DE17861500000000001741', 'FIRMDELLXXX');
require_once('KtoSepaSimple.php');
$myKtoSepaSimple = new KtoSepaSimple();
$myKtoSepaSimple->Add('2013-09-30', 119.00, 'Kunde,Konrad', 'AT482015210000063789', 'BANKATWW123',
NULL, NULL, '12345678', 'Rechnung 12345678', 'OOFF', 'KUN123', '2013-09-13');
$xml = $myKtoSepaSimple->GetXML('CORE', 'Einzug.2013-09', 'Best.v.13.09.2013',
'Dienstleister GmbH', 'Firma GmbH', 'DE13799300200000054321', 'BNKADENN777',
'DE98ZZZ99999999');
Bitte ersetzen Sie vor der Erzeugung der XML-Datei die Parameter
Ihr Name (2x), Ihre IBAN, Ihr BIC
und Dateiname (dorthin wird die XML-Datei gespeichert) durch die
entsprechenden Angaben. Lassen Sie dann das PHP-Skript laufen und übertragen Sie
die erzeugte XML-Datei mit Ihrer EBICS-Software zu Ihrer Bank (Auftragstyp CCT).
Fertig (und vielen Dank)!
require_once('KtoSepaSimple.php');
$myKtoSepaSimple = new KtoSepaSimple();
$myKtoSepaSimple->Add('2024-11-05', 11.90, 'Hanft,Matthias', 'DE69760100850101116856', 'PBNKDEFFXXX',
NULL, NULL, 'KtoSepaSimple', 'KtoSepaSimple');
$xml = $myKtoSepaSimple->GetXML('TRF', 'KtoSepaSimple', 'PHP-Klasse',
'Ihr Name', 'Ihr Name', 'Ihre IBAN', 'Ihr BIC');
file_put_contents('Dateiname', $xml);
Bitte beachten Sie: Für die seit November 2016 gültige SEPA-Version
3.0 (und neuere) müssen Sie im Konstruktor den Wert 3 durch den Wert 1
ersetzen:
Alt:
public function __construct() {
$this->FVersion='3';
Neu:
public function __construct() {
$this->FVersion='1';
|