KONTOPRUEF-Logo
Sehen Sie sich auch mein anderes Produkt an:
myebilanz – die Freeware-eBilanz aus MySQL und CSV!
myebilanz

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 EUR 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:

Unterschiede zur KONTOPRUEF-OFFLINE-Vollversion

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.

Versionshinweis

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.

Klassendefinition

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);
}

Verwendung

Die Verwendung der KtoSepaSimple-Klasse geschieht wie folgt:

  1. Erzeugen einer Instanz:

    require_once('KtoSepaSimple.php');
    $myKtoSepaSimple = new KtoSepaSimple();
  2. 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.
  3. 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 für KtoSepaSimple->Add

Parameter, die "weggelassen" werden sollen, müssen Sie als NULL oder leeren String '' übergeben.

$aDatumDer 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.ä.
$aBetragDer Betrag in EURO (andere Währungen sind nicht möglich), z.B. 123.45
$aNameDer Name des Zahlungsempfängers (bei Überweisungen) bzw. des Zahlungspflichtigen (bei Lastschriften), maximal 70 Zeichen
$aIbanDie 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.
$aBicDer 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
$aCtgyPurpKategorisierung 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.
$aPurpKategorisierung 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...
$aRefEine eindeutige Referenz der Zahlung (z.B. eine Rechnungsnummer), die Sie auch bei evtl. Retouren zurückerhalten.
$aVerwendDer 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!
$aSeqTpDer 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.
$aMandatRefDie Mandatsreferenz, die Sie mit Ihrem Kunden für diese Lastschrift vereinbart haben.
$aMandatDateDas 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:
$aOldMandatRefDie alte Mandatsreferenz, falls bei dieser Lastschrift eine neue Mandatsreferenz verwendet wird
$aOldNameDer alte Name des Zahlungsempfängers, falls bei dieser Lastschrift ein neuer Name verwendet wird
$aOldCreditorIdDie alte Gläubiger-ID, falls bei dieser Lastschrift eine neue Gläubiger-ID verwendet wird
$aOldIbanDie alte IBAN des Schuldners, falls bei dieser Lastschrift eine neue IBAN verwendet wird
$aOldBicDie 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)

Parameter für KtoSepaSimple->GetXML

Parameter, die "weggelassen" werden sollen, müssen Sie als NULL oder leeren String '' übergeben.

$aTypeGeben Sie hier den Typ der Datei an:
$aTypeTypEBICS-Auftragstyp
TRFÜberweisungenCCT
COREBasislastschriftenCDD
B2BFirmenlastschriftenCDB
COR1Basislastschriften mit verkürzter Einlieferungsfrist (ab 4.11.2013)CD1
$aMsgIdDie 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
$aInitgPtyDer Einlieferer der Datei. Das kann der Auftraggeber selbst sein, oder ein externes Dienstleistungs-Rechenzentrum o.ä. Name genügt.
$aAuftraggeberDer Name des Auftraggebers (also Ihrer), maximal 70 Zeichen
$aIbanDie IBAN des Auftraggebers (also Ihre), nur GROSSbuchstaben und Ziffern, keine Zwischenräume und/oder Sonderzeichen
$aBicDer 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!
$aCreditorIdIhre Gläubiger-ID

Beispiele

Gehaltsüberweisungen (fiktive Daten)

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');

Einmallastschrift (fiktive Daten)

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');

Bezahlung dieser Software (reale Daten)

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('2018-12-14', 11.90, 'Hanft,Matthias', 'DE69760100850101116856', 'PBNKDEFF760',
        NULL, NULL, 'KtoSepaSimple', 'KtoSepaSimple');
$xml = $myKtoSepaSimple->GetXML('TRF',  'KtoSepaSimple', 'PHP-Klasse',
        'Ihr Name', 'Ihr Name', 'Ihre IBAN', 'Ihr BIC');
file_put_contents('Dateiname', $xml);

Download der Klasse

oder

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';
Sehen Sie sich auch mein anderes Produkt an:
myebilanz – die Freeware-eBilanz aus MySQL und CSV!
myebilanz