AqBanking: Unterschied zwischen den Versionen
Root (Diskussion | Beiträge) |
Root (Diskussion | Beiträge) |
||
Zeile 482: | Zeile 482: | ||
* | * Camt wird von der Postbank nicht unterstützt. Aussage des Supports [] | ||
==== Volksbanken (FIDUCIA GAD) ==== | ==== Volksbanken (FIDUCIA GAD) ==== |
Version vom 13. September 2019, 11:36 Uhr
aqbd ist ein für Linux verfügbares Commando-Zeilen-Tool (und Dämon), das es ermöglicht ...
- ... Umsätze und Salden eines Kontos via AqBanking-HBCI auszulesen. Als Ausgabe erzeugt aqbd CSV-Dateien, die leicht weiterverarbeitet werden können.
- ... Laschriften, die als CSV-Datei vorliegen, via AqBanking-HBCI an die Bank zu übertragen und durchzuführen.
weitere Infos über aqbd ...
- ... basiert 100% auf der Arbeit von Martin Preuss http://www.aquamaniac.de/ und der Bibliothek "AqBanking"
- ... erfordert "AqBanking" (Version >=5.99.0)
- ... liegt im C-Quelltext (GPL 3.0 Lizenz) vor (https://github.com/Andreas-Filsinger/OrgaMon/tree/master/aqbd)
- ... bietet im Zusammenspiel mit Apache2+PHP einen RESTful Webservice an für /saldo, /umsatz, /lastschrift
- ... bietet somit ein simples Webinterface, das es ermöglich eigene Konto-Daten mit einem Browser weltweit abzurufen
Download
Release oder Beta Versionen
- Gwenhywfar: http://www.aquamaniac.de/sites/download/packages.php?package=01&showall=1
- AqBanking: http://www.aquamaniac.de/sites/download/packages.php?package=03&showall=1
- aqbd: https://cargobay.orgamon.org/aqbd.html
Entwicklerversionen
- Gwenhywfar:
git clone https://git.aquamaniac.de/git/gwenhywfar
- AqBanking:
git clone https://git.aquamaniac.de/git/aqbanking
RESTfull Webservice-Design
Um AqBanking für den OrgaMon nutzbar zu machen wird ein Linux-basierter REST-Webservice implementiert. Dabei dient das Gesamtsystem (Apache2+PHP+index.php+aqbd-Dämon) nur als Wrapper für grundlegende "AqBanking Rev. 4.x" Funktionen. REST hilft uns, auf Kontoumsätze und andere Informationen ganz primitiv über das Web zuzugreifen. Zum Informations-Abruf benötigt man auf der Client-Seite nur einen einfachen Webbrowser (Punkt!). Dadurch ist auch die Integration in andere Prozesse ein Kinderspiel. Ruby on Rails z.B. kann REST-Webservices direkt ansprechen. "AqBanking-REST" bietet dabei folgende Dienste an ...
- ... Umsätze abrufen (./umsatz)
- ... Salden abrufen (./saldo)
- ... SEPA-Basis-Sammel-Lastschriften durchführen (./lastschrift)
- ... OPTIONAL: (Termin-)Überweisungen durchführen (./ueberweisung)
Die Buchführung des OrgaMon kann "externe" Konten via Webserices (vorzugsweise REST) integrieren. Dadurch werden Giro-Konto-Buchungen direkt im OrgaMon sichtbar. Systematischer Aufbau des Server-Dienstes.
- aqbd - der aqbanking dämon. Muss notwendigerweise als Dämon programmiert werden da z.B. das Mehrstufige TAN Verfahren mehrere REST-Zyklen benötigt und die Verbindung zur Bank dazwischen nicht unterbrochen werden darf, insbesondere beim iTAN Verfahren. Die Kommunikation mit der Aussenwelt erledigt der Dämon über das Dateisystem. Ein PHP-Script legt Konto-Anfragen in Mini "Job"-Dateien im Verzeichnis /srv/aqbanking ab.
- aqREST - der REST Service als PHP Implementierung. Erfordert die mod_rewrite Anpassung im Apache2 (Beschreibung hier REST).
Installation (aqbd)
Abhängigkeiten
openSUSE
zypper install libgcrypt-devel zypper install gnutls-devel zypper install libktoblzcheck1-devel zypper install ktoblzcheck zypper install fox16-devel zypper install doxygen
Raspberry Pi
apt-get install git apt-get install doxygen apt-get install ktoblzcheck apt-get install libtool libtool-bin apt-get install libgcrypt20-dev # apt-get install libfox-1.6-dev apt-get install m4 apt-get install libgnutls28-dev apt-get install libktoblzcheck1-dev apt-get install libxmlsec1-dev apt-get install automake
git clone https://github.com/aqbanking/gwenhywfar git clone https://github.com/aqbanking/aqbanking
Gwenhywfar installieren
Wir haben beide Packages (Gwen+AqB) in das Verzeichnis /usr/src entpackt. Versionsnummern sind heute natürlich schon weiter ...
- gwen-Lib installieren
# # openSUSE # tar xzfz gwenhywfar-4.0.0.tar.gz cd gwenhywfar-4.0.0 ./configure --enable-system-certs --with-guis=fox16 make make install # # Raspberry Pi: # cd gwenhywfar make -f Makefile.cvs ln -s ../ltmain.sh ltmain.sh make -f Makefile.cvs ./configure --with-guis="" make make install
AqBanking entpacken
tar xzfz aqbanking-5.0.4.tar.gz
aqbd entpacken
cd ~ wget https://cargobay.orgamon.org/aqbd1040.zip mkdir aqbd cd aqbd unzip ../aqbd1038.zip # Arbeitsverzeichnis für aqbd erstellen # mkdir /srv/aqb cp aqbd.sh /srv/aqb chmod 777 /srv/aqb/aqbd.sh # Webschnittstellenverzeichnis für aqbd erstellen # mkdir /srv/ngx mkdir /srv/ngx/aqb # # PHP Script installieren # cp favicon.ico /srv/ngx/aqb cp index.php /srv/ngx/aqb # Ein Quelltext der aqbanking-Banking-Distribution # wird einfach durch unseren Dämon (abtest.c) ersetzt # in das Verzeichnis /usr/src/aqbanking-n.n.n/src/test. # cp abtest.c ../aqbanking/src/test cp mkver.sh ../aqbanking/src/test # # aqb systemd # cp aqbd.service /etc/systemd/system
- Jetzt geht es weiter mit dem Compiliervorgang aqbanking
AqBanking installieren
# # auf openSuSE # cd aqbanking-5.0.4 export PKG_CONFIG=`which pkg-config` ./configure --with-backends="aqhbci aqofxconnect" make make srcdoc make install # # auf dem Raspberry Pi # cd aqbanking ln -s ../ltmain.sh ltmain.sh ACLOCAL_FLAGS="-I /usr/share/aclocal" make -f Makefile.cvs ./configure --with-backends="aqhbci" make make install
Arbeitsverzeichnis /srv/aqb
- Der aqbanking Dämon arbeitet (nicht konfigurierbar) immer im Verzeichnis /srv/aqb. Dieses muss also angelegt werden
md /srv/aqb
- den eben erstellten "abtest" nun nach
/srv/aqb
kopieren cp ~/aqbanking-5.7.6beta/src/test/.libs/abtest /srv/aqb/aqb
- Weitere Unterverzeichnisse (jobs, logs, results) legt der Dämon beim ersten Start selbst an
- erster Start mit
/srv/aqb/aqb -D
Installation (REST)
- dieser Schritt kann übersprungen werden, wenn man den aqbd Dienst nicht über als REST-Webservice ansprechen will (z.B. wenn man aqbd als Kommandozeilen-Tool verwenden will).
Apache2 anpassen
Modul "rewrite"
- Damit PHP mit den REST-typischen Anfragen aus dem Web zurecht kommt, muss das "mod_rewrite" / "rewrite"-Modul zunächst aktiviert werden.
- Ob das Modul schon aktiv ist kann durch die PHP-Info-Seite deines Apache2 angezeigt werden.
- Wenn nicht hier die Anleitungs, wie man es aktiviert ...
a2enmod rewrite systemctl restart apache2
Virtueller Host "aqb."
- Im nächsten Schritt geht es darum REST-Anfragen aus dem Web so zu manipulieren dass PHP das alles ordentlich verstehen kann ...
- Bevor man den virtuellen Host testet sollte die korrekte Namensauflösung überprüft werden. Also muss in diesem Fall ein
ping aqb.orgamon.com
auch den orgamon.com erreichen. Dies muss durch einen Wildcard-Eintrag im Nameserver erreicht werden "*.orgamon.com", bzw. "*.raib23" usw ...
/etc/apache2/vhosts.d/aqb.conf: <VirtualHost *:80> ServerName aqb.~DeinHost~ ServerAlias aqb.localhost aqb.~DeineHomain~ DocumentRoot /srv/www/htdocs/aqb RewriteEngine on RewriteRule ^/rest/(.*) /index.php?rest=$1 [PT] </VirtualHost> <Directory /srv/www/htdocs/aqb> Options None AllowOverride None Require all granted </Directory>
- Hat man bisher keine weiteren Virtuelle Hosts, so muss man einen "default" Host benennen so dass "root" Dokumente weiterhin gefunden werden. Der kryptischen Name "00-default.conf" dient dazu dass sichergestellt ist, dass diese Konfiguration immer als "erste" Regel in der Regelkette geladen wird.
/etc/apache2/vhosts.d/00-default.conf: <VirtualHost *:80> ServerName raib25.lummerland ServerAlias 192.168.115.25 raib25 localhost www.orgamon.net orgamon.net DocumentRoot /srv/www/htdocs </VirtualHost> <Directory /srv/www/htdocs> Options None AllowOverride None Require all granted </Directory>
nginx anpassen
apt-get install nginx php-fpm php-xml
/etc/nginx/sites-enabled/aqb.pi3x04.lummerland
server { listen 80; root /srv/ngx/aqb; index index.php; server_name aqb.pi3x04.lummerland; rewrite ^/rest/(.*) /index.php?rest=$1 last; return 403; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; } }
erster Test "Info"
- die Anfrage
http://aqb.~MeinServer~/rest/info
- der Ergebnis-Header
Date Fri, 16 Oct 2009 16:10:13 GMT Server Apache/2.2.4 (Linux/SUSE) X-Powered-By PHP/5.2.11 Expires Mon, 26 Jul 1997 05:00:00 GMT Last-Modified Fri, 16 Oct 2009 16:10:13 GMT Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma no-cache Etag "182422" Content-Length 96 Keep-Alive timeout=15, max=100 Connection Keep-Alive Content-Type text/plain
am Ergebnis-Header ist vor allem der "ETag" interessant. Die ist die Transaktions-Nummer, die das phpREST mit dem aqbd ausgehandelt hat. Über diese TAN können auch Logs zur aktuellen Anfragen abgefragt werden:
http://~MeinServer~/rest/log/182422
- das Ergebnis
Modul;Version aqbanking;4.1.0.0stable gwenhywfar;3.9.0stable-0 abtest;1.029 aqb-REST;1.029
Start/Stop/Cleanup
/srv/aqb/aqb-cleanup.sh
Das Startscript aqb.sh räumt diverse Verzeichnisse auf
#!/bin/sh # # AqBanking Cleanup Script # # Debug-Modus einschalten im Problemfall # export AQHBCI_LOGLEVEL=debug # # Lock-Verzeichnis aufraeumen # rm /root/.aqbanking/settings/users/*.lck* # # Nicht abgearbeitete Jobs verschieben, da eh Timeout # mv /srv/aqb/jobs/* /srv/aqb/error # # Ergebnis-Verzeichnisse aufraeumen # find /srv/aqb/results/* -atime +14 -exec rm {} \; find /srv/aqb/logs/* -atime +14 -exec rm {} \; find /srv/aqb/error/* -atime +14 -exec rm {} \; # # Start Protokollieren # logger "aqbd-Cleanup-Script ausgfuehrt!" #
Start
Zunächst gibt es ein Script, das zu alte Log-Files löscht und ein wenig Pflege betreibt:
- joe /srv/aqb/aqbd.sh
#!/bin/sh # # AqBanking Pre Daemon Start Script # # Debug-Modus einschalten im Problemfall # export AQHBCI_LOGLEVEL=info export AQBANKING_LOGLEVEL=info export GWEN_LOGLEVEL=info # # stoppe ev. bisher aktive Dämonen # killproc -v /srv/aqb/aqb # # Lock-Verzeichnis aufraeumen # rm /root/.aqbanking/settings/users/*.lck* # # Nicht abgearbeitete Jobs verschieben, da eh Timeout # mv /srv/aqb/jobs/* /srv/aqb/error # # Ergebnis-Verzeichnisse aufraeumen # find /srv/aqb/results/* -atime +14 -exec rm {} \; find /srv/aqb/logs/* -atime +14 -exec rm {} \; find /srv/aqb/error/* -atime +14 -exec rm {} \; # # Start Protokollieren # logger "aqbd-Startup-Script ausgfuehrt!" # # Dämon starten # # startproc -v /root/$VERSION_AKTUELL/src/test/.libs/abtest -D # gdb /root/$VERSION_AKTUELL/src/test/.libs/abtest # run -D # bt f
SystemD Service
Hier nun die systemd-Art wie man aqb als Dämon startet. ZUvor wird die Pfelge ausgeführt ...
- joe /etc/systemd/system/aqbd.service
# # (c) Andreas Filsinger, OrgaMon.org # [Unit] Description=AqBanking Daemon After=multi-user.target [Service] StandardOutput=null StandardError=null ExecStartPre=/srv/aqb/aqbd.sh ExecStart=/srv/aqb/aqb -D [Install] WantedBy=multi-user.target
Konto - Deklaration
- Information des Programmierers: https://www.aquamaniac.de/rdm/projects/aqbanking/wiki
- Vorbereitung, wir brauchen ...
Name
des KontoinhabersBLZ
URL
des HBCI-ServersBenutzerkennung
für den LoginKontonummer
PIN
also das 5 stellige Zugangs-Passwort
- Für Lastschriften ist noch zusätzlich nötig ...
Gläubiger-Identifikation
die Ihnen von der Bundesbank zugeteilt wurden (nur für Lastschriften nötig)Telefonbezeichnung
der vergebene Name für ihr SMS Handy
Benutzer anlegen
# # # aqhbci-tool4 adduser -N "Name" -b BLZ -u Benutzerkennung -s URL -t pintan
UserId bestimmen
aqhbci-tool4 listusers # # Es wird ein "Unique Id" angezeigt, diesen in Zukunft verwenden # und bei der Option -u UserId verwenden # # # 2 Blanks hintereinander sollen nicht gelöscht werden # aqhbci-tool4 adduserflags -u UserId -f keepMultipleBlanks # # Die aktuell gültige HBCI-Version eintragen # aqhbci-tool4 sethbciversion -u UserId --hbciversion=300
AccountId bestimmen
# # Beim Nachtragen der BIC oder von Flags braucht man den "Account ID" # # * Er steht zunächst in dem entsprechenden account.conf # int uniqueId="21" # # * Alternativ ist er zu ermitteln über aqbanking-cli # er steht rechts der IBAN # aqbanking-cli listaccs
- In der Ausgabe ist der
AccountId
dann die vorletzte Ziffernfolge, im folgenden Beispiel also "6" und "5"
Account 66160724 1213209321 DE99661614241313089202 6 1 Account 66261734 41001123 GENODE61WGA DE88660317243031051694 5 1
Postbank
- Camt wird von der Postbank nicht unterstützt. Aussage des Supports []
Volksbanken (FIDUCIA GAD)
# # Es muss die HTTP/ Version auf 1.1 gehoben werden # das geht leider nur mit einer editierung der User-Config Datei # im Moment ist mir nicht bekannt, wie man das über die Kommandozeile # macht # joe ~/.aqbanking/settings6/users/000*UserId.conf int httpVMajor="1" int httpVMinor="1" #
# # Initialisierung aller Werte # aqhbci-tool4 getsysid -u UserId aqhbci-tool4 getcert -u UserId aqhbci-tool4 getaccounts -u UserId # # Eintragen fehlender Informationen, z.B. der "bic" # aqhbci-tool4 getaccsepa -a AccountId
# # Bevorzuge Camt Download # in settings6/accounts/0000000*.conf bei "char accountFlags" eine kommasperierte Liste erweitern um "preferCamtDownload" also ="flag1", "flag2" alle möglichen Flags sind: preferSingleTransfer preferSingleDebitNote ktv2 sepa sepaPreferSingleTransfer sepaPreferSingleDebitNote preferCamtDownload # # es sollte also so aussehen: # data { backend { char accountFlags="ktv2", "preferCamtDownload" } #backend } #data # # In der selben Konto-Datei # trage die BIC nach, das ist denke ich ein Bug in "getsysid" # dass dies nicht automatisch gemacht wird. # * Es gibt hinweise darauf, dass "listbal" die bic nachträgt! # int uniqueId="2" char backendName="aqhbci" char ownerName="Andreas und Susanne Filsing" char bankName="VB Weingarten-Walzbachtal eG" char accountName="Kontokorrent" char iban="DE***" char bic="GENODE61WGA" char bankCode="66061724" char accountNumber="***" int userId="1"
Sparkassen
# # FinTS Server werden verwendet # aqhbci-tool4 sethbciversion -u UserID --hbciversion=300 # # Es muss das zu verwendente Handy bekannt gemacht werden # aqhbci-tool4 setTanMediumId -u UserID --tanmediumid="Telefonbezeichnung" # [NACH DEM BEKANNTMACHEN DER SYSTEME IM NÄCHSTEN SCHRITT] # # Im Falle, das man Lastschriften einreichen will: # # In ~/.aqbanking/settings/accounts in der entsprechenden Konto-Definitions-Datei # muss sichergestellt sein, dass es ein "bic" Element gibt # char bic="diebic"
DiBa
# # # aqhbci-tool4 adduserflags --user=UUUUUU --flags=tlsIgnPrematureClose
Systeme miteinander bekanntmachen
- Ein notwendiger Schritt damit AqBanking genau speichern kann, was die Gegenstellen für Fähigkeiten und Vorlieben hat.
aqhbci-tool4 getsysid -u UserID
- Ein möglichweise notwendiger Schritt, damit aqbanking veranlasst wird UPD- und BPD- Datenstrukturen zu aktualisieren
aqhbci-tool4 getitanmodes -u UserID
- Dieser Befehl gelingt nicht immer beim ersten Mal, um zu prüfen, dass alle Konten angelegt wurden:
aqhbci-tool4 listaccounts | grep BLZ
- Ist das gewünschte Konto nicht dabei ist etwas schiefgelaufen. Man kann einfach auch ein Konto per Hand anlegen dies sollte aber gar nicht notwendig sein:
aqhbci-tool4 addaccount -b BLZ -c Benutzerkennung -a Kontonummer
ACHTUNG: Wenn was schiefging muss man in settings\account die entsprechenden Dateien löschen sonst gibt es "Ambigous account names" oder so ...
PIN dauerhaft speichern
Erstelle eine Datei "pin.~BLZ~.~KTO~.txt" in /srv/aqb. In ihr darf nur die PIN in einer Zeile enthalten sein, keine Kommentare oder Leerzeilen, oder ein Zeilenumbruch.
cd /srv/aqb joe pin.BLZ.Kontonummer.txt
neue Art die PIN zu speichern
# # Eine PIN Template Datei erstellen lassen # aqhbci-tool4 mkpinlist >pinfile # # PIN eintragen # joe pinfile # # erster Umsatzabruf auf die Konsole # aqbanking-cli -P pinfile request --account=Konto --fromdate=20190308 --transactions
abschliessender Test und Diagnose
export AQHBCI_LOGLEVEL=debug
erster Test "Saldo"
http://aqb.~MeinHost~/rest/saldo/~MeineBLZ~/~MeineKontoNr~/
Ergebnis
Betrag;Waehrung
2938,23;EUR
- Durch den Test wird das erhaltene Zertifikat des Server automatisch dauerhaft gespeichert. Ein manueller Eingriff ist dann nur noch bei Zertifikatsänderungen nötig.
- Es wurde "cert.~BLZ~.~KTO~.tmp" und "cert.~BLZ~.~KTO~.txt" erstellt.
Anwendung als Kommandozeilen-Programm
Ausgabe bei ./aqbd --help
aqbd -[U|L|B|S|D] BLZ KontoNummer PIN [Datum|"Pfad"] -U Ausgabe der Umsaetze in eine Datei -L Durchfuehren von SEPA-Basis-Lastschriften -S Ausgabe von Salden -D werde selbst zum Dämon ### folgende Schalter sind im Beta Stadium ### -N Ausgabe der nicht gebuchten Umsätze (NOCH NICHT FEHLERFREI) -T Ausgabe der Terminüberweisungen (NOCH NICHT PROGRAMMIERT) -B Durchfuehren von Terminueberweisungen (NOCH NICHT PROGRAMMIERT)
Umsätze
Bedienung: -U oder -u für umsatzabfrage Danach kommen die Parameter BLZ KTO PIN [Datum]
ohne - oder / oder ähnliches, nur durch whitespace getrennt Datum im Format YYYYMMDD
Die erfolgreich abgerufenen Umsätze werden in einer csv-Datei unter srv/aqb/results/JobName.Umsatz.csv abgelegt, und kann leicht weiterverarbeitet werden (z.B. mit LibreOffice). JobName ist bei Konsolenbedienung die niedrigste unbenutzte Zahl. Liegen die Dateien 1, 2, und 3 schon im Ordner, heißt die Datei 4.Umsatz.csv. Alle Dateien eines Jobs haben den gleichen JobNamen.
Name | Bedeutung | Beispiel |
PosNum | vortlaufende Umsatznummer der aktuellen DATEI | 1 |
Datum | Aktuelles Datum DD.MM.YYYY | 30.06.2008 |
Valuta | Datum der Wertstellung | 03.07.2008 |
Betrag | Betrag mit Dezimalkomma | 33,50 |
Waehrung | Standard-Währungskürzel | EUR |
Typ | Transaktionstyp (z.B.Scheck/Miscellaneous/Lastschrift) | NCHK/NMSC/NSTO |
VorgangID | von der Bank gelieferte Numerische Entsprechung des VorgangsText, der intern übersetzt wird.
(TransactionCode) |
5 |
VorgangText | Vorgangsbeschreibung die sich aus der VorgangsID ergibt. (TransactionText) | Lastschrift |
PrimaNota | Von der Bank übergebene PrimaNota-Nummer | 850 |
VonBLZ | Bankleitzahl des Bankinstitutes der Gegenseite | 66391600 |
VonKonto | Kontonummer der Gegenseite | 10504104 |
VonREF | Dieses Feld hat in der Bankenwelt mehrere Bedeutungen:
a) Bei Scheckeinreichungen die Dein Konto belasten wird hier die
Scheck-Nummer eingetragen, bei sehr vielen Schecks, die man mit
identischem Betrag draussen hat, ist diese Nummer sehr interessant,
zumal "erfundene" Schecknummern (die nicht in deinem Scheck-Büchle
(hoffentlich) aufnotiert sind ) hier sofort auffallen. (Oder
Doppeleinreichungen) |
1 |
VonName1 | Kontoinhaber der Gegenseite | Andreas Filsinger |
VonName2 | Selten genutzte zweite Namensspalte ebenfalls Kontoinhaber | Filsinger GmbH |
Buchungstext1-Buchungstext7 | Verwendungszweck. Maximal 27 Zeichen pro Zeile, Maximal 7 Zeilen | Ihr Einkauf bei Tante Emma |
- Beispiel
PosNo;Datum;Valuta;Betrag;Waehrung;Typ;VorgangID;VorgangText;PrimaNota;VonBLZ;VonKonto;VonREF;VonName1;VonName2;Buchungstext1;Buchungstext2;Buchungstext3;Buchungstext4;Buchungstext5;Buchungstext6;Buchungstext7 1;05.10.2009;05.10.2009;-3,00;EUR;NSTO;8;DAUERAUFTRAG;900;66061724;309xxxxx;;MUSTERMANN MAX /DA:00001;;TASCHENGELD;;;;;;; 2;05.10.2009;05.10.2009;-79,07;EUR;NMSC;5;LASTSCHRIFT;931;30060010;1xxxxx;;ALDI SUED SAGT DANKE;;EC 65213439 02.10 18.24 CE1;02 3B0001 1212 080814 EUR01;6726611412000740219 2808911;;;;;
Lastschrift
Bedienung -L oder -l für Lastschrift Danach kommen die Paramter BLZ KTO PIN "Pfad der CSV-Datei" ebenfalls ohne sonderzeichen, nur durch whitespace getrennt
Die CSV-Datei ist Semikolon getrennt, und die Zeilenumbrüche sind mit \r\n ausgeführt. RID ist eine durchlaufende beliebige Nummer(Primary Key) und wird vom Parser ignoriert, ebenso wie Ort. Diese beiden Felder dürfen jedoch nicht weggelassen werden!!! Jede Zeile ist ein neuer Datensatz, und wird vom Programm als jeweils einzelne Lastschrift in eine Sammellastschrift verpackt und ausgeführt.
RID;Name;Ort;BLZ;Konto;Betrag;VZ1;VZ2;VZ3;VZ4;VZ5;VZ6;VZ7;AusfuehrungsDatum;MandatsDatum 1;"MARTIN SCHMIDT";"";66391600;0002076616;0,25;"TESTABBUCHUNG8";"REV. 1.005";"";"";"";"";"";20141231;20140804
Nach der Jobverarbeitung wird die Lastschrift-CSV als JobName.csv In results bzw. error kopiert.
Salden
Bedienung: -S oder -s für Saldo Danach kommen die Parameter BLZ KTO PIN ohne - oder / oder ähnliches, nur durch whitespace getrennt
Das Ergebnis wird bei erfolgreicher Saldenabfrage als JobName.Saldo.csv in results gespeichert.
Betrag;Waehrung 1000000,00;EUR;
Anwendung als Dämon für den Serverbetrieb
Dämon (-D)
Es werden zwischen den verschiedenen Programmebenen Daten ausgetauscht, indem Files auf der Festplatte abgelegt werden. (Von der DBUS-Technologie sind wir abgekommen, schlicht und einfach wegen der enormen, und für unsere Zwecke zu hohen, komplexität der DBUS-Bibliothek.)
Job-Files
Wird abtest mit -d als Parameter gestartet befindet sich die Anwendung im "Deamon-Mode". Aufträge werden mit in sogenannten JobFiles in das jobs-verzeichnis geschrieben, und von abtest gelesen. Der Inhalt der Files ist identisch mit den in der Kommandozeile zu übergebenden Parameter(Benutzung).
-s 66091600 1234567 gespeichert als JobName.job im Unterverzeichnis jobs bzw. /srv/aqb/jobs
Der Name des Jobs wird für alle Dateien, die bei der Jobverarbeitung entstehen, benutzt. Sind die Jobs abgearbeitet werden sie je nach Erfolg zusammen mit den Ergebnisdaten bzw mit den Lastschrift-Daten im CSV-Format in den results-Ordner, oder in den error-Ordner verschoben. Uber jede Aktion werden Log-Dateien geschrieben (/logs/JobName.log.txt).
Mobile SMS-Tan-Übergabe
Die Aufforderung lautet dann in etwa: "Bitte die TAN aus der SMS von 14:12:22 h eingeben: ". Damit muss während eines Lastschriftverfahrens die Gegenseite gerufen werden. Dafür wird die Anforderung der Bank in einem File Gespeichert, und muss innerhalb von 20sec mit einem tanFile "beantwortet" werden.
Dazu legt aqbd nach start der Jobverarbeitung im Verzeichnis /srv/aqb/results/ eine Datei namens JobName.tan-anfrage.txt mit dem Anfragetext der Bank an, und wartet anschließend 20 Sekunden auf das Auftauchen der Datei JobName.tan unter /srv/aqb/jobs. Diese darf AUSSCHLIEßLICH die tan enthalten und wird nach Abschluss der Jobverarbeitung ebenfalls in error bzw. results kopiert.
PHP-Rest-Server
aqdb läuft im Daemon-Modus im Hintergrund, und wird sozusagen vom Restserver ferngesteuert. Das PHP-Skript erzeugt die Job-Files und prüft auf das Vorhandensein der Ergebnissdaten, und gibt diese aus.
Implementiert Anfragen an den Server http://www.orga-mon.de/rest/Funktion/BLZ/KTO/datum Funktionen: ./info/ ./umsatz/ ./saldo/ ./lastschrift/ ./itan/
Umsatz (./umsatz/)
Anfrage:
./umsatz/~BLZ~/~KONTO#~/~ABDATUM~
Antwort:
- Mapping csv<->Aqbanking
// Zuordnungen gefunden Buchungsdatum<->date Typ<->transactionKey (Beispiel: "NSTO","NMSC","NCHK") vonBLZ<->remoteBankCode vonKonto<->remoteAccountNumber vonName1..2<->remoteName ValutaDatum<->valutaDate Betrag<->value.value Waehrung<->value.currency VorgangID<->textKey VorgangText<->transactionText Primanota<->primanota Verwendungszweck1..7<->purpose
Vorgemerkter Umsatz (./vorgemerkt)
./vorgemerkt/~BLZ~/~KONTO#~/~ABDATUM~
Sammellastschrift (./sammellastschrift)
Buchungsvolumen übertragen
POST ./sammellastschrift/~BLZ~/~Konto~ [DTA-Attachement]
mit einem zeitgleichen http-Upload der DTA-Datei (Name spielt keine Rolle)!
Antwort:
- die Antwort ist, sobald die DTA-Datei fehlt ein kleines Upload-Formular, mit dem man die Anfrage (diesmal mit Datei) wiederholen kann.
- die Antwort ist der JobID, unter dem die Sammellastschrift abgearbeitet wird. Diese JobID ist zwischenzuspeichern, damit man die Folgenden Schritte "meldung" und "itan" abwickeln kann.
Fragetext der Bank
GET ./meldung/~JobID~
Antwort:
Entweder:
INFO: [NA] Bisher keine Rückmeldung der Bank.\r\n
in diesem Fall muss die Anfrage in einigen Sekunden wiederholt werden!
Oder:
- ansonsten ist die Antwort eine Text der Bank, die Informationen zur TAN-Eingabe enthält:
Nun bitte die 34. TAN eingeben
(i)TAN übertragen
Nun erfolgt die TAN-Übergabe an die Bank und die tatsächliche Durchführung. War die Ausführung erfolgreich, so erscheint ein einfaches "OK".
GET ./itan/~JobID~/~TAN~
Kontostand (./saldo)
Termin-Überweisung
-- noch kein Bedarf --
Historisches
Erreichte Meilensteine
- Linux-Anwendungsebene: QBankingManager installieren (Erfolg: 21.02.2008)
- ein Giro-Konto abfragen um zu sehen, ob das Teil funktioniert (Erfolg: 21.02.2008)
- Transaktion "Konto-Umsatz-Abfrage" ausprobieren! (Erfolg: 21.02.2008)
- Transaktion "Sammel-Lastschrift" (DTA) ausprobieren! (Geht nicht! Nur Einzeln)
- Linux-Programmierebene: "aqbanking 3" versuchen zu compilieren (Erfolg: 19.02.2008)
- Mini-Programm Konsolen-Programm erstellen das z.B. die Kontenliste auf den Schirm bringt (Erfolg: 22.02.2008)
- AH_Job_GetBalance ("~kto~.~blz~") : double (Erfolg: 26.03.08)
- AH_Job_GetTransactions ("~kto~.~blz~","20.02.2008") : (Erfolg: 28.02.2008)
- AH_Job_MultiDebitNode_new (Achtung schwierig: "Multi-Job" + "TAN" notwendig + DTAUS Importer verwenden!) (07.03.2008)
- Erfolgreiche erzeugung eines DebitNote-Auftrags aus Kommandozeilenparametern und csv-Datei (07.03.2008)
- Erfolgreiche auftragsübertragung bis zur TAN-Abfrage über den Passwort-Callback!! (05.03.2008)
- Erfolgreiche Lastschriften mit einer einzelnen, sowie mit 2 Lastschriften in einer Sammellastchrift. (07.03.2008)
- REST - Server in PHP verwirklicht, Technologie: mod_rewrite und "$fn();" (13.03.2008)
- REST - Mappings definieren auf ein nun fertiges "aqbc"-Programm das in C programmiert ist. (13.03.2008)
- REST: Lastschriften (15.03.2008)
- Umlaute (scheinbar durchgängig UTF-8, wär ja OK!) (19.03.2008)
- Integration in den OrgaMon 1/2 "Umsatz" (20.03.2008)
- Integration in den OrgaMon 2/2 "Sammellastschrift" (26.03.2008)
- aqbd TimeOut-Problem bei den Lastschriften (Erfolg mit AqBanking 3.5.0)
- Sammellastschrift mit iTAN (Erfolg mit AqBanking 3.5.0)
- Eingang aller meiner Patches (Erfolg mit AqBanking 3.99)
- SEPA-Lastschrift
Offen
- aqbd nun als richtiges / eigentständiges Linux Projekt beginnen und Know-How aus abtest übernehmen (Info: http://www.openismus.com/documents/linux/automake/automake.shtml)
- aqbd als FinTS Produkt registrieren
Runtime config data persists as long as the AB_BANKING object exists, so applications should set the variables immediately after calling AB_Banking_new() and before calling AB_Banking_Init(). For the particular case of providing the FINTS registration number the following runtime variables are recognized by AqHBCI: - "fintsRegistrationKey" (char): FINTS registration number - "fintsApplicationVersionString" (char): major/minor version of the application (e.g. "1.2") Es ist mir nicht ganz klar, ob das nicht auch in den settings eingetragen werden kann, als runtimeConfig
AB_Banking_RuntimeConfig_SetCharValue(AB_BANKING *ab, "fintsRegistrationKey", "<derKey>"); AB_Banking_RuntimeConfig_SetCharValue(AB_BANKING *ab, "fintsApplicationVersionString", "2.044");
Sicherheitsüberlegungen
- Während der Installtionsphase sollte der Webserver nur für den Admin sichbar sein, bis alles funktioniert
- Dann sollten "pin."-Dateien nur "root" sichtbar gemacht werden
- Überlegungen sollten den Rechten der Verzeichnisse ab /srv/aqb gewidmet werden
- Das Wurzelverzeichnis des REST Servers (index.php) sollte passwortgeschützt werden
- Wird der REST Server im Internet sichtbar sollte https:// (SSL-Verschlüsselung) auf das Verzeichnis gelegt werden
- Die PIN eines Kontos wird design-bedingt niemals über das Netz übertragen
- Der (HBCI-Server-)Login-Name wird design-bedingt niemals über das Netz übertragen
- Von aussen - ohne manuellen Eingriff des admin - können keine veränderte Zertifikate akzeptiert werden. Somit ist ausgeschlossen dass die Übernahme des Netzes rund um den aqbd-Host zum Stehlen von PIN / TAN führen kann
Links
- Homepage: http://www.aquamaniac.de/sites/aqbanking/index.php
- Developement-Snapshot-aqbanking: http://devel.aqbanking.de/viewsvn/aqbanking
- Mailing-List: http://sourceforge.net/mailarchive/forum.php?forum_name=aqbanking-devel