AqBanking: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(362 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Überblick ==
<br>[[Bild:AqBanking-Restful-2.png]]


aqbd ist ein für Linux verfügbares Commando-Zeilen-Tool (und Dämon), das es ermöglicht ...
aqbd ist ein für Linux verfügbares Commando-Zeilen-Tool (und Dämon), das es ermöglicht ...
Zeile 6: Zeile 6:
weitere Infos über aqbd ...
weitere Infos über aqbd ...
* ... basiert 100% auf der Arbeit von Martin Preuss http://www.aquamaniac.de/ und der Bibliothek "AqBanking"
* ... basiert 100% auf der Arbeit von Martin Preuss http://www.aquamaniac.de/ und der Bibliothek "AqBanking"
* ... nutzt die neueste Generation des "AqBanking" (Version >=3.3.0)
* ... erfordert "AqBanking" (Version >=5.99.0)
* ... liegt im C-Quelltext (GPL 3.0 Lizenz) vor
* ... liegt im C-Quelltext (GPL 3.0 Lizenz) vor  
* ... bietet im Zusammenspiel mit Apache2+PHP einen RESTful Webservice an
** Cargobay: https://cargobay.orgamon.net/aqbd.html
* ... bietet ein simples Webinterface, das es ermöglich eigene Konto-Daten mit einem Browser weltweit abzurufen
** OrgaMon-Git: https://github.com/Andreas-Filsinger/OrgaMon/tree/main/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
 
__TOC__
 
== Download ==
 
* aqbd: https://cargobay.orgamon.org/aqbd.html
 
== RESTfull Webservice-Design ==
 
<center>[[Bild:Aqbanking3.png]]</center><br>
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 ...
<br>
# ... Umsätze abrufen (./umsatz)
# ... Salden abrufen (./saldo)
# ... SEPA-Basis-Sammel-Lastschriften durchführen (./lastschrift)
# ... OPTIONAL: (Termin-)Überweisungen durchführen (./ueberweisung)
<br>
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.
<br>
* 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) ==
 
=== Benötigte Software ===
 
apt install git gettext m4 automake doxygen ktoblzcheck libktoblzcheck1-dev libtool libtool-bin libgcrypt-dev libgnutls28-dev libxmlsec1-dev
 
 
#
# aktuelle Quellen herunterladen
#
git clone -b master https://git.aquamaniac.de/git/gwenhywfar
git clone -b master https://git.aquamaniac.de/git/aqbanking
 
==== Alternativen ====
#
# alternativ (github-kann etwas hinterherhinken)
#
git clone https://github.com/aqbanking/gwenhywfar
git clone https://github.com/aqbanking/aqbanking
#
# wenn man eine bestimmte Version clonen will
#
git clone -b 4.99.17rc1 --single-branch --depth 1 https://git.aquamaniac.de/git/gwenhywfar
git clone -b 5.99.34beta --single-branch --depth 1 https://git.aquamaniac.de/git/aqbanking


== Funktionsweise ==
=== Gwenhywfar installieren ===
#
# Raspberry Pi:
#
cd gwenhywfar
make -f Makefile.cvs
#
# Früher mal brach das Script ab mit der Fehlermeldung ./ltmain.sh würde fehlen ... das ist jetzt nicht mehr so 18.09.2019
#  es ist wieder so 20.11.2020
# Im Fehlerfall muss man noch 2 Befehle ausführen
#
#  ln -s ../ltmain.sh ltmain.sh
#  make -f Makefile.cvs
#
./configure --with-guis=""
make
make install
ldconfig


<br>[[Bild:AqBanking-Restful-2.png]]
=== aqbd entpacken ===


== Installations-Anleitung (aqbd) ==


=== aqbd compilieren ===
cd ~
wget https://cargobay.orgamon.org/aqbd1044.zip
mkdir aqbd
cd aqbd
unzip ../aqbd1044.zip
# Arbeitsverzeichnis für aqbd erstellen
#
mkdir /srv/aqb
cp aqbd.sh /srv/aqb
chmod 755 /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
chmod 755 ../aqbanking/src/test/mkver.sh
#
# aqb systemd
#
cp aqbd.service /etc/systemd/system
#
#
cd ..


Wir haben beide Packages in das Verzeichnis /usr/src entpackt.
* Jetzt geht es weiter mit dem Compiliervorgang aqbanking


* gwen-Lib installieren
=== AqBanking installieren ===


  tar xzfz gwenhywfar-3.2.0.tar.gz
==== Raspberry Pi ====
  cd gwenhywfar-3.2.0
#
# auf dem Raspberry Pi
#
cd aqbanking
#
#
# Sammellastschrift als einzelnen Betrag buchen
#
# Im Moment gibt es verkettete Abhängigkeiten die ich
# nicht ganz verstehe:
  # singleBookingAllowed <-> singleBookingWanted <-> batchBooking <-> BtchBookg
#
# das Resultat ist, dass jede einzelne Laszschrift des Sammlers auf dem
# Kontoauszug erscheint. Das will ich nicht, kann es aber nicht anders steuern
#
# -> Quelltext-Änderung:
#
# Man muss sicherstellen, dass der xml Exporter "true" ausgibt (oder die
# Ausgabe ganz unterdrücken, so dass die Bank "true" als default einsetzen kann)
joe src/libs/plugins/imexporters/xml/xml_sepa_exp.c
:345
>
GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "batchBooking", "true");
//                        GWEN_DB_GetIntValue(dbParams, "singleBookingWanted", 0, 1)? "false": "true");
#
# folgender Schritt nach misslungenem "make -f Makefile.cvs", musste bis 18.09.2019 durchgeführt werden
#  ln -s ../ltmain.sh ltmain.sh
  #
# früher
#  ACLOCAL_FLAGS="-I /usr/share/aclocal" make -f Makefile.cvs
#
# früher
#  ACLOCAL_FLAGS="-I /usr/local/share/aclocal" make -f Makefile.cvs
#
# früher
#  ./configure --with-backends="aqhbci"
#
make -f Makefile.cvs
  ./configure
  ./configure
make typedefs
make typefiles
  make
  make
  make install
  make install
ldconfig
#
# Binary nach /srv/aqb kopieren
#
cd src
cd test
./mkver.sh
systemctl enable aqbd


* aqbanking-Lib installieren
== Installation (REST) ==


tar xzfz aqbanking-3.3.0.tar.gz
* 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).
cd aqbanking-3.3.0
 
=== Apache2 anpassen ===


==== Pachtes ====
==== Modul "rewrite" ====


Im Moment müssen noch 3 Patches eingespielt werden:
* 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 ...


'''1/3: Vertuschung von BLANK-BLANK'''
a2enmod rewrite
systemctl restart apache2


* Verhalten ohne den Patch: 2 aufeinanderfolgende Blanks werden aus dem Buchungstext. Dadurch werden "tabellarisch" übertragene mehrzeilige Text beeinträchtigt.
==== Virtueller Host "aqb." ====
* ./src/plugins/parsers/swift.c,


<code>
* Im nächsten Schritt geht es darum REST-Anfragen aus dem Web so zu manipulieren dass PHP das alles ordentlich verstehen kann ...
int AHB_SWIFT_Condense(char *buffer) {
 
  char *src=buffer;
  char *dst=buffer;
 
  while(*src) {
      if (*src!=10) {
        *dst=*src;
        dst++;
      }
    src++;
  } /* while */
  *dst=0;
 
  return 0;
}
</code>


'''2/3 einstellige REF'''


* Verhalten ohne den Patch: Einstellige Kunden-Referenzmerkmale werden nicht übertragen, und als "" Leerstring geliefert.
* Bevor man den virtuellen Host testet sollte die korrekte Namensauflösung überprüft werden. Also muss in diesem Fall ein <code>ping aqb.orgamon.com</code> auch den orgamon.com erreichen. Dies muss durch einen Wildcard-Eintrag im Nameserver erreicht werden "*.orgamon.com", bzw. "*.raib23" usw ...
* aqbanking/src/plugins/parsers/swift/swift940.c


<code>
<u>/etc/apache2/vhosts.d/aqb.conf:</u>
  Alt:
   
  00426:  /* customer reference (M) */
  <VirtualHost *:80>
  00427:  if (bleft>1) {
  ServerName aqb.~DeinHost~
  ServerAlias aqb.localhost aqb.~DeineHomain~
  DocumentRoot /srv/www/htdocs/aqb
   
  RewriteEngine on
  RewriteRule ^/rest/(.*) /index.php?rest=$1 [PT]
   
</VirtualHost>
   
   
  Neu:
  <Directory /srv/www/htdocs/aqb>
00426:  /* customer reference (M) */
  Options None
00427:   if (bleft>0) {
  AllowOverride None
</code>
  Require all granted
   </Directory>


'''3/3 Umlaute im DTA'''


* Verhalten ohne den Patch: Lastschriften mit deutschen Umlauten können nicht verarbeitet werden
* 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.
* ./libs/aqbanking/imexporter.c


<code>
<u>/etc/apache2/vhosts.d/00-default.conf:</u>
imexporter.c:1562 (ALT)
      c=toupper(c);
  <VirtualHost *:80>
      if (!(isdigit(c) ||
    ServerName raib25.lummerland
            (c>='A' && c<='Z') ||
    ServerAlias 192.168.115.25 raib25 localhost www.orgamon.net orgamon.net
            (c>='a' && c<='z') ||
    DocumentRoot /srv/www/htdocs
            (strchr(" .,&-+*%/$", c))))
   </VirtualHost>
    
   
  imexporter.c:1562 (NEU)
  <Directory /srv/www/htdocs>
      c=toupper(c);
    Options None
      if (!(isdigit(c) ||
    AllowOverride None
            (c>='A' && c<='Z') ||
    Require all granted
            (strchr(" .,&-+*%/$[\\]~", c))))
  </Directory>
</code>


==== Kompilierung ====
=== nginx anpassen ===


./configure --disable-tutorials --disable-chipcard-client --with-frontends="" --with-backends="aqhbci"
make
make install


Danach kopieren der abtest.c-source (einfach die alte überschreiben) in das Verzeichnis /usr/src/aqbanking-3.2.1/src/test.
apt install nginx php-fpm php-xml


touch abtest.c
make abtest


Da unser Server ein 64bit-System ist, mussten wir vor dem Anlegen der Konten noch alle libaq*, alle libgwen* und die beiden gwenhywfar und aqbanking-verzeichnisse von usr/lib nach usr/lib64 kopieren.
==== /etc/nginx/sites-enabled/aqb.conf ====


=== Konto - Deklaration ===
server {
      listen 80;
      root /srv/ngx/aqb;
      index index.php;
      server_name aqb.<b>your-host.your-domain</b>;
      rewrite favicon.ico /favicon.ico last;
      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.4-fpm.sock;
      }
}


* Vorbereitung, wir brauchen ...
systemctl restart nginx


# BLZ
=== erster Test "Info" ===
# HBCI-URL (http://www.hbci-zka.de/institute/institut_auswahl.htm)
# Kontonummer
# Benutzerkennung
# PIN


==== Benutzer anlegen ====
* die Anfrage


  aqhbci-tool3 adduser -N "Benutzername" -b BLZ -u Benutzerkennung -s HBCI-URL -t pintan
  http://aqb.<b>your-host.your-domain</b>/rest/info


==== Konto anlegen ====
aqhbci-tool3 addaccount -b BLZ -c Benutzerkennung -a Kontonummer


==== Systeme miteinander bekanntmachen ====
* der Ergebnis-Header


* Ein notwendiger Schritt damit AqBanking genau speichern kann, was die Gegenstellen für Fähigkeiten und Vorlieben hat.
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


aqhbci-tool3 getsysid -b BLZ -c Benutzerkennung
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:


* kommt der Fehler "A TLS packet with unexpected length was received" muss man SSL3 (anstelle von SSL2) aktivieren.
http://aqb.~MeinServer~/rest/log/182422


==== Auf HBCI-Version 3.00 umstellen====


Da die Banken schon lange auf die HBCI-Version 3 umgestell haben, das von aqhbci nicht immer erkannt wird, muss man in der datei ~/.aqbanking/settings.conf den Wert hbciVersion mit dem höchsten angebotenen Wert bei hbciversions überschrieben werden.
* das Ergebnis


Beispiel
  Modul;Version
  int hbciVersion="220"
  aqbanking;4.1.0.0stable
  ...
  gwenhywfar;3.9.0stable-0
  int hbciverions="201", "210", "220", "300"
abtest;1.029
umschreiben zu
  aqb-REST;1.029
  int hbciVersion="300"


====iTAN bereitstellen====
== Start/Stop/Cleanup ==


aqhbci-tool3 getitanmodes -b BLZ
=== /srv/aqb/aqb-cleanup.sh ===


==== SSL3 aktivieren ====


* falls erforderlich (siehe oben) diese eine (grüne) Zeile in der Datei <code>~/.aqbanking/settings.conf</code> einfügen ...
Das Startscript aqb.sh räumt diverse Verzeichnisse auf


  users {
  #!/bin/sh
  user {
#
    char userId="~Dein-HBCI-User-Login-Name~"
# AqBanking Cleanup Script
    data {
#
      backend {
        ...
# Debug-Modus einschalten im Problemfall
        <span style="color:#009933;">char userFlags="forceSsl3"</span>
#
        char tokenType="pintan"
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!"
#


==== Sammellastschrift nutzbarmachen ====
=== Start ===


* rote Zeile in der settings.conf rauslöschen...
Zunächst gibt es ein Script, das zu alte Log-Files löscht und ein wenig Pflege betreibt:




  <span style="color:#FF2233;">char multiJobAllowed="N"</span>
* joe /srv/aqb/aqbd.sh


... auch wenn mal nur eine Lastschrift verbucht werden soll.
#!/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


das Flag "PreferSingleDebiNotes" rausmachen


<br><code>prefersingletransfer  0x00000001 : Einzelüberwisung bevorzugt, für uns unwichtig<br>prefersingledebitnote 0x00000002 : Ist default, wird einfach aus der settings.conf entfernt, SingleDebinote gibt es nicht bei VoBa!<br></code>
=== SystemD Service ===


==== Zertifikat speichern ====
Hier nun die systemd-Art wie man aqb als Dämon startet. ZUvor wird die Pfelge ausgeführt ...


*Wechsle ins Verzeichnis /srv/aqb
* joe /etc/systemd/system/aqbd.service
*Führe eine erste Saldoabfrage durch


  aqbd -S ~BLZ~ ~Konto#~ ~PIN~
  #
# (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


*Das Programm bricht mit einem Zertifikatsfehler ab
== Konto - Deklaration ==
*Umbenennen der frisch erstellten "cert.~BLZ~.~KTO~.tmp"-Datei nach "cert.~BLZ~.~KTO~.txt"


==== PIN dauerhaft speichern ====
* Information des Programmierers: https://www.aquamaniac.de/rdm/projects/aqbanking/wiki
* Vorbereitung, wir brauchen ...


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.
# <code><i><b>Name</b></i></code> des Kontoinhabers
# <code><i><b>BLZ</b></i></code>
# <code><i><b>URL</b></i></code> des HBCI-Servers
# <code><i><b>Benutzerkennung</b></i></code> für den Login
# <code><i><b>Kontonummer</b></i></code>
# <code><i><b>PIN</b></i></code> also das 5 stellige Zugangs-Passwort


=== erster Test ===
* Für Lastschriften ist noch zusätzlich nötig ...


aqbd -U ~BLZ~ ~KontoNummer~ ~StartDatum~
# <code><i><b>Gläubiger-Identifikation</b></i></code> die Ihnen von der Bundesbank zugeteilt wurden (nur für Lastschriften nötig)
# <code><i><b>Telefonbezeichnung</b></i></code> der vergebene Name für ihr SMS Handy


Die Umsätze ab ~StartDatum~ werden angezeigt.
=== Benutzer anlegen ===
== Installations-Anleitung (REST) ==


=== Apache2 anpassen ===
#
#
#
aqhbci-tool4 adduser -N "<i><b>Name</b></i>" -b <i><b>BLZ</b></i> -u <i><b>Benutzerkennung</b></i> -s <i><b>URL</b></i> -t pintan


* Damit PHP mit den [[REST]]-typischen Anfragen aus dem Web zurecht kommt, muss das "mod_rewrite" / "rewrite"-Modul zunächst aktiviert werden.
=== UserId bestimmen ===
* 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 ...
aqhbci-tool4 listusers
#
# Es wird ein "Unique Id" angezeigt, diesen in Zukunft verwenden
# und bei der Option -u <i><b>UserId</b></i> verwenden
#
#
# 2 Blanks hintereinander sollen nicht gelöscht werden
#
aqhbci-tool4 adduserflags -u <i><b>UserId</b></i> -f keepMultipleBlanks
#
# Die aktuell gültige HBCI-Version eintragen
#
aqhbci-tool4 sethbciversion -u <i><b>UserId</b></i> --hbciversion=300


==== /etc/sysconfig/apache2 ====


* In dieser Datei muss rewrite eingetragen werden!
=== 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


APACHE_MODULES="actions ... rewrite ..."
* In der Ausgabe ist der <code><b>AccountId</b></code> dann die vorletzte Ziffernfolge, im folgenden Beispiel also "6" und "5"


Account 66160724        1213209321              DE99661614241313089202  <b>6</b>      1
Account 66261734        41001123        GENODE61WGA    DE88660317243031051694  <b>5</b>      1


* Mit ...
==== Postbank ====


SuSEconfig


muss die Konfiguration scharf geschaltet werden.
* Camt wird von der Postbank nicht unterstützt. Aussage des Supports []


* Im nächsten Schritt geht es darum REST-Anfragen aus dem Web so zu manipulieren dass PHP das alles ordentlich verstehen kann ...
==== Volksbanken (FIDUCIA GAD) ====


==== /etc/apache2/mod_rewrite.conf ====


<code>
#
  <IfModule mod_rewrite.c>
# 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*<i><b>UserId</b></i>.conf
  int  httpVMajor="1"
  int httpVMinor="1"
    
    
  RewriteEngine  On
 
  RewriteRule ^/aqb(.*) /aqb/index.php?rest=$1 [QSA,L]
 
#
# Initialisierung aller Werte
#
aqhbci-tool4 getsysid -u <i><b>UserId</b></i>
aqhbci-tool4 getcert -u <i><b>UserId</b></i>
  aqhbci-tool4 getaccounts -u <i><b>UserId</b></i>
#
# Eintragen fehlender Informationen, z.B. der "bic"
#
aqhbci-tool4 getaccsepa -a <i><b>AccountId</b></i>
 
#
# 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
    
    
  </IfModule>
  #
</code>
# 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***"
<b>char bic="GENODE61WGA"</b>
char bankCode="66061724"
char accountNumber="***"
int  userId="1"
 
==== Sparkassen ====
#
# FinTS Server werden verwendet
#
aqhbci-tool4 sethbciversion -u <i><b>UserID</b></i> --hbciversion=300
#
# Es muss das zu verwendente Handy bekannt gemacht werden
#
aqhbci-tool4 setTanMediumId -u <i><b>UserID</b></i> --tanmediumid="<i><b>Telefonbezeichnung</b></i>"
# [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 <i><b>UserID</b></i>
 
* Ein möglichweise notwendiger Schritt, damit aqbanking veranlasst wird UPD- und BPD- Datenstrukturen zu aktualisieren
 
aqhbci-tool4 getitanmodes -u <i><b>UserID</b></i>
 
* Dieser Befehl gelingt nicht immer beim ersten Mal, um zu prüfen, dass alle Konten angelegt wurden:
 
aqhbci-tool4 listaccounts | grep <i><b>BLZ</b></i>
 
* 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 <i><b>BLZ</b></i> -c <i><b>Benutzerkennung</b></i> -a <i><b>Kontonummer</b></i>
 
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.<i><b>BLZ</b></i>.<i><b>Kontonummer</b></i>.txt


==== /etc/apache2/vhosts.d/aqb.conf ====
==== 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


  <VirtualHost *>
=== abschliessender Test und Diagnose ===
    ServerName aqb.orgamon.net
    ServerAlias aqb.raib91
    DocumentRoot /srv/www/htdocs/aqb
 
    RewriteEngine on
    RewriteLog /var/log/apache2/rewrite_log
    RewriteLogLevel 9
 
    RewriteRule ^/(.*) /index.php?rest=$1 [QSA,L]
 
  </VirtualHost>


=== REST Server PHP-Script ===
export AQHBCI_LOGLEVEL=debug


=== erster Test ===
=== erster Test "Saldo" ===


  http://~MeinServer~/saldo/~MeineBLZ~/~MeineKontoNr~/
  http://aqb.~MeinHost~/rest/saldo/~MeineBLZ~/~MeineKontoNr~/


Ergebnis
Ergebnis
Zeile 260: Zeile 656:
2938,23;EUR
2938,23;EUR
</code>
</code>
* 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 ==
== Anwendung als Kommandozeilen-Programm ==
Zeile 265: Zeile 664:
Ausgabe bei ./aqbd --help
Ausgabe bei ./aqbd --help


  aqbd -[U|L|B|S|D] BLZ KontoNummer PIN [Datum|"Pfad"]
aqbd Rev. 1.044 (gwenhywfar Rev. 5.11.2git-1 / aqbanking Rev. 6.5.12.0beta)
  -U Ausgabe der Umsaetze in eine Datei
  -L Durchfuehren von Lastschriften
aqbd -[U|L|B|S|D] BLZ KontoNummer PIN [Datum|"Pfad"]
  -N Ausgabe der Termin-Überweisungen
        -U Ausgabe der Umsaetze in eine Datei
  -B Durchfuehren von Terminueberweisungen(Bisher nicht implementiert!)
        -L Durchfuehren von Lastschriften
  -S Ausgabe von Salden
        -B Speichern von Terminueberweisungen
  -D werde ein Daemon
        -N Auflisten von Terminueberweisungen
 
        -S Ausgabe von Salden
        -D werde ein Daemon
        -V Gibt die aktuelle Version aus


====Umsätze====
====Umsätze====
Zeile 282: Zeile 683:
  Danach kommen die Parameter
  Danach kommen die Parameter
  BLZ KTO PIN [Datum]
  BLZ KTO PIN [Datum]
  ohne - oder / oder ähnliches, nur durch whitespace getrennt
  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 OpenOffice).
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.  
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.  




Beispiel:


http://www.orgamon.de/aqbanking/4.Umsatz.csv
{|border=1
{|border=1
  |Name
  |Name
Zeile 322: Zeile 724:
  |VorgangID
  |VorgangID
  |von der Bank gelieferte Numerische Entsprechung des VorgangsText, der intern übersetzt wird.
  |von der Bank gelieferte Numerische Entsprechung des VorgangsText, der intern übersetzt wird.
(TextKey)
(TransactionCode)
  |5
  |5
  |-
  |-
  |VorgangText
  |VorgangText
  |Vorgangsbeschreibung die sich aus der VirgangsID ergiebt.
  |Vorgangsbeschreibung die sich aus der VorgangsID ergibt. (TransactionText)
  |Lastschrift
  |Lastschrift
  |-
  |-
Zeile 349: Zeile 751:
zumal "erfundene" Schecknummern (die nicht in deinem Scheck-Büchle  
zumal "erfundene" Schecknummern (die nicht in deinem Scheck-Büchle  
(hoffentlich) aufnotiert sind ) hier sofort auffallen. (Oder  
(hoffentlich) aufnotiert sind ) hier sofort auffallen. (Oder  
Doppeleinreichungen)
Doppeleinreichungen)<br>
b) Bei Sammellastschriften steht hier die Anzahl der Buchungen, also  
b) Bei Sammellastschriften steht hier die Anzahl der Buchungen, also  
"1", "2", usw.
"1", "2", usw.<br>
c) Bei Überweisungen die über eine Homebanking-Plattform steht hier immer eine "1", naja wird scheinbar intern als eine Art Sammelüberweisung mit nur einer Überweisung verbucht oder so ...
c) Bei Überweisungen die über eine Homebanking-Plattform steht hier immer eine "1", naja wird scheinbar intern als eine Art Sammelüberweisung mit nur einer Überweisung verbucht oder so ...<br>
  |1
  |1
  |-
  |-
Zeile 368: Zeile 770:
  |-
  |-
  |}
  |}
* 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====
====Lastschrift====
Zeile 384: Zeile 791:
Jede Zeile ist ein neuer Datensatz, und wird vom Programm als jeweils einzelne Lastschrift in eine Sammellastschrift verpackt und ausgeführt.
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
  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";"";""
  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.
Nach der Jobverarbeitung wird die Lastschrift-CSV als JobName.csv In results bzw. error kopiert.
Zeile 412: Zeile 819:
'''Job-Files'''
'''Job-Files'''
   
   
Wird abtest mit -d als Parameter gestartet befindet sich die Anwendung im "Deamon-Mode".
Wird abtest mit -d als Parameter gestartet versetzt sich die Anwendung im "Deamon-Mode".
Aufträge werden mit in sogenannten JobFiles in das jobs-verzeichnis geschrieben,  
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  
und von abtest gelesen. Der Inhalt der Files ist identisch mit den in der Kommandozeile zu  
übergebenden Parameter[[AQBKommandozeile|(Benutzung)]].
übergebenden Parameter.


  -s 66091600 1234567
  -s 66091600 1234567
Zeile 422: Zeile 829:


Der Name des Jobs wird für alle Dateien, die bei der Jobverarbeitung entstehen, benutzt.  
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).
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).


'''Tan-Übergabe'''
'''Mobile SMS-Tan-Übergabe'''


Die Tan wird ab Sommer 2008 im iTan-verfahren abgefragt, und ist damit nichtmehr frei wählbar.
Die Aufforderung lautet dann in etwa: "Bitte die TAN aus der SMS von 14:12:22 h eingeben: ". Damit muss während  
Die Aufforderung lautet dann in etwa: "Bitte die 17.TAN eingeben: ". Damit muss während  
eines Lastschriftverfahrens die Gegenseite gerufen werden. Dafür wird die Anforderung  
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  
der Bank in einem File Gespeichert, und muss innerhalb von 20sec mit einem tanFile  
Zeile 434: Zeile 840:
Dazu legt aqbd nach start der Jobverarbeitung im Verzeichnis /srv/aqb/results/ eine Datei namens JobName.tan-anfrage.txt
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.
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 ==
== PHP-Rest-Server ==
Zeile 456: Zeile 861:
'''Anfrage:'''
'''Anfrage:'''


./UMSATZ/~BLZ~/~KONTO#~/2008-02-28?f=text
./umsatz/~BLZ~/~KONTO#~/~ABDATUM~
 
* ABDATUM in der Form TT.MM.JJJJ


'''Antwort:'''
'''Antwort:'''
Zeile 478: Zeile 885:
         Verwendungszweck1..7<->purpose
         Verwendungszweck1..7<->purpose


=== Sammellastschrift (./lastschrift) ===
=== Vorgemerkter Umsatz (./vorgemerkt) ===
 
./vorgemerkt/~BLZ~/~KONTO#~/~ABDATUM~
 
=== Sammellastschrift (./sammellastschrift) ===
 
==== Parameter BtchBookg ====
 
BtchBookg=true, auf dem Kontoauszug: Betrag wird als Summe in einem Posten gebucht (Default)
BtchBookg=false, auf dem Kontoauszug: für jede einzelne Lastschrift wird ein einzelner Posten gebucht
 
 
Auf dem aqbd-Server muss die Gläubiger-ID installiert werden:


'''Anfrage 1/2'''
gid.BLZ.KontoNummer.txt


  POST ./lastschrift/~BLZ~/~Konto~
==== Buchungsvolumen übertragen ====
 
  POST ./sammellastschrift/~BLZ~/~Konto~ [DTA-Attachement]


mit einem zeitgleichen http-Upload der DTA-Datei (Name spielt keine Rolle)!
mit einem zeitgleichen http-Upload der DTA-Datei (Name spielt keine Rolle)!
Zeile 489: Zeile 910:


* 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, sobald die DTA-Datei fehlt ein kleines Upload-Formular, mit dem man die Anfrage (diesmal mit Datei) wiederholen kann.
* iTAN: Ist das iTAN Verfahren gewählt, so muss vom Server vor Anzeige der Antwort zunächst die Index-Nummer der iTAN abgefragt werden
* 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:
* ansonsten ist die Antwort eine Text der Bank, die Informationen zur TAN-Eingabe enthält:


JobID: 293837
  Nun bitte die 34. TAN eingeben  
  Nun bitte die 34. TAN eingeben  


* Mit Hilfe dieser Meldungen muss man eine zweite RESTful Anfrage formulieren. Diesmal mit JobID und TAN. Dazu hat man ein Zeitfenster von 20 Sekunden.


'''Anfrage 2/2'''
==== (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~
  GET ./itan/~JobID~/~TAN~
Nun erfolgt die TAN-Übergabe an die Bank und die tatsächliche Durchführung. War die Ausführung erfolgreich, so erscheint ein einfaches "OK".


=== Kontostand (./saldo) ===
=== Kontostand (./saldo) ===
Zeile 508: Zeile 942:


-- noch kein Bedarf --
-- noch kein Bedarf --
== Pflege ==
=== Zertifikatswechsel akzeptieren ===
* Wenn man den Fehler erhält "Das Zertifikat sieht aber anders aus" gibt es unterschiede zwischen einem gespeicherten Zertifikat und einem eben erhaltenen
** Das eben erhaltene Zertifikat wird in der Datei <code>/srv/aqb/hostname.tmp</code> gespeichert
** Das gespeicherte Vergleichszertifikat (Das Soll-Zertifikat) ist in der Datei <code>/srv/aqb/hostname.txt</code> gespeichert
* Es muss immer eine Identität zwischen den beiden Dateien bestehen, ist das nicht so kann .tmp auf .txt kopiert werden, nachdem man sichergestellt hat, dass .tmp soweit akzeptabel ist
* Logge Dich in den Banking-Server als root ein
cd /srv/aqb
ls -lrt
* kopiere das aktuellste xxx.tmp nach xxx.txt, das aktuellste steht unten!, ok, also z.B.
cp hbci11.fiducia.de.tmp hbci11.fiducia.de.txt
* also "cp" dann ein Leerschritt dann den Namen der .tmp Datei, dann Leerschritt, dann nochmal den vollen Namen der .tmp aber nun mit .txt hinten.


== Historisches ==
== Historisches ==
Zeile 513: Zeile 965:
=== Erreichte Meilensteine ===
=== Erreichte Meilensteine ===


# Linux-Anwendungsebene: QBankingManager installieren (Erfolg: 21.02.2008)
==== 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)
* Linux-Anwendungsebene: QBankingManager installieren (Erfolg: 21.02.2008)
## Transaktion "Sammel-Lastschrift" (DTA) ausprobieren! (Geht nicht! Nur Einzeln)
** ein Giro-Konto abfragen um zu sehen, ob das Teil funktioniert (Erfolg: 21.02.2008)
# Linux-Programmierebene: "aqbanking 3" versuchen zu compilieren (Erfolg: 19.02.2008)
** Transaktion "Konto-Umsatz-Abfrage" ausprobieren! (Erfolg: 21.02.2008)
# Mini-Programm Konsolen-Programm erstellen das z.B. die Kontenliste auf den Schirm bringt (Erfolg: 22.02.2008)
** Transaktion "Sammel-Lastschrift" (DTA) ausprobieren! (Geht nicht! Nur Einzeln)
# AH_Job_GetBalance ("~kto~.~blz~") : double (Erfolg: 26.03.08)
* Linux-Programmierebene: "aqbanking 3" versuchen zu compilieren (Erfolg: 19.02.2008)
# AH_Job_GetTransactions ("~kto~.~blz~","20.02.2008") : (Erfolg: 28.02.2008)
* Mini-Programm Konsolen-Programm erstellen das z.B. die Kontenliste auf den Schirm bringt (Erfolg: 22.02.2008)
# AH_Job_MultiDebitNode_new (Achtung schwierig: "Multi-Job" + "TAN" notwendig + DTAUS Importer verwenden!) (07.03.2008)
* AH_Job_GetBalance ("~kto~.~blz~") : double (Erfolg: 26.03.08)
#Erfolgreiche erzeugung eines DebitNote-Auftrags aus Kommandozeilenparametern und csv-Datei (07.03.2008)
* AH_Job_GetTransactions ("~kto~.~blz~","20.02.2008") : (Erfolg: 28.02.2008)
#Erfolgreiche auftragsübertragung bis zur TAN-Abfrage über den Passwort-Callback!! (05.03.2008)
* AH_Job_MultiDebitNode_new (Achtung schwierig: "Multi-Job" + "TAN" notwendig + DTAUS Importer verwenden!) (07.03.2008)
#Erfolgreiche Lastschriften mit einer einzelnen, sowie mit 2 Lastschriften in einer Sammellastchrift. (07.03.2008)
* Erfolgreiche erzeugung eines DebitNote-Auftrags aus Kommandozeilenparametern und csv-Datei (07.03.2008)
# REST - Server in PHP verwirklicht, Technologie: mod_rewrite und "$fn();" (13.03.2008)
* Erfolgreiche auftragsübertragung bis zur TAN-Abfrage über den Passwort-Callback!! (05.03.2008)
# REST - Mappings definieren auf ein nun fertiges "aqbc"-Programm das in C programmiert ist. (13.03.2008)
* Erfolgreiche Lastschriften mit einer einzelnen, sowie mit 2 Lastschriften in einer Sammellastchrift. (07.03.2008)
# REST: Lastschriften (15.03.2008)
* REST - Server in PHP verwirklicht, Technologie: mod_rewrite und "$fn();" (13.03.2008)
# Umlaute (scheinbar durchgängig UTF-8, wär ja OK!) (19.03.2008)
* REST - Mappings definieren auf ein nun fertiges "aqbc"-Programm das in C programmiert ist. (13.03.2008)
# Integration in den OrgaMon 1/2 "Umsatz" (20.03.2008)
* REST: Lastschriften (15.03.2008)
# Integration in den OrgaMon 2/2 "Sammellastschrift" (26.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)
 
==== 2009 ====
 
* Sammellastschrift mit iTAN (Erfolg mit AqBanking 3.5.0)
* Eingang aller meiner Patches (Erfolg mit AqBanking 3.99)
* SEPA-Lastschrift
 
==== 2019 ====


=== Offen ===
* PSD2 Umstellung
* Erfolg beim Umsatzabruf, aber Zeichensatzproblme (19.09.2019)
* Erfolg beim Lastschrifteinzug (27.09.19)


# aqbd TimeOut-Problem bei den Lastschriften (Erfolg mit AqBanking 3.5.0)
==== 2020 ====
# 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)
 
# Sammellastschrift mit iTAN (Erfolg mit AqBanking 3.5.0)
* Lastschriften sind wieder einzeln
# Sammellastschrift mit 2000 Posten durchführen (Massentest!)


==== 2023 ====


===Dokumentation===
* erfolgreiche Neuinstallation auf arm 64 Bit Raspberry Pi 3 B+
** AqBanking 6.5.3.0
** Gwen 5.10.1
** aqbd 1.044


*[[AQBKommandozeile|Bedinung über Kommandozeile]]
== Offen ==
*[[AQBDeamon|Bedienung im Deamonmode]]
*[[AQBRest|Bedienung des Restservers]]
*[[AQBEntwickler|Entwickler]]


=== Design ===
# 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)


<center>[[Bild:Aqbanking3.png]]</center><br>
Runtime config data persists as long as the AB_BANKING object exists, so
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. 3.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 ...
applications should set the variables immediately after calling
<br>
AB_Banking_new() and before calling AB_Banking_Init().
# ... Umsätze abrufen (./umsatz)
# ... Salden abrufen (./saldo)
For the particular case of providing the FINTS registration number the
# ... Sammel-Lastschriften durchführen (./lastschrift)
following runtime variables are recognized by AqHBCI:
# ... OPTIONAL: (Termin-)Überweisungen durchführen (./ueberweisung)
- "fintsRegistrationKey" (char): FINTS registration number
<br>
- "fintsApplicationVersionString" (char): major/minor version of the application (e.g. "1.2")
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.
<br>
Es ist mir nicht ganz klar, ob das nicht auch in den settings eingetragen werden kann, als
* aqbd [http://orgamon.org/aqbanking/aqbd.c.html Download] - 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 [http://orgamon.org/aqbanking/index.php.html Download] - der REST Service als PHP Implementierung. Erfordert die mod_rewrite Anpassung im Apache2 (Beschreibung hier [[REST]]).
aqbanking-cli listtrans -T '$(date);$(valutaDate);$(transactionText);$(purpo
seLine[0]);$(purposeLine[1]);$(purposeLine[2]);$(purposeLine[3]);$(remoteNam
e);$(remoteBankcode);$(remoteAccountnumber);$(valueAsString);$(purposeLine[4
]);$(purposeLine[5]);$(purposeLine[6]);$(localAccountnumber)'


=== Sicherheitsüberlegungen ===
== Sicherheitsüberlegungen ==


* Während der Installtionsphase sollte der Webserver nur für den Admin sichbar sein, bis alles funktioniert
* Während der Installtionsphase sollte der Webserver nur für den Admin sichbar sein, bis alles funktioniert
Zeile 572: Zeile 1.040:
* Der (HBCI-Server-)Login-Name 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
* 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
== Download ==
http://cargobay.orgamon.de/aqbd.html


== Links ==
== Links ==
Zeile 582: Zeile 1.046:
* Developement-Snapshot-aqbanking: http://devel.aqbanking.de/viewsvn/aqbanking
* Developement-Snapshot-aqbanking: http://devel.aqbanking.de/viewsvn/aqbanking
* Mailing-List: http://sourceforge.net/mailarchive/forum.php?forum_name=aqbanking-devel
* Mailing-List: http://sourceforge.net/mailarchive/forum.php?forum_name=aqbanking-devel
* Alternative zu <b>aqbd</b>: http://openlab.radion.org/lab/Konsolenbasiertes_Online_Banking_mit_Linux (diese Implementierung basiert auf dem veralteten "aqbanking 2")

Aktuelle Version vom 16. August 2024, 09:19 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 ...

Download

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 ...

  1. ... Umsätze abrufen (./umsatz)
  2. ... Salden abrufen (./saldo)
  3. ... SEPA-Basis-Sammel-Lastschriften durchführen (./lastschrift)
  4. ... 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)

Benötigte Software

apt install git gettext m4 automake doxygen ktoblzcheck libktoblzcheck1-dev libtool libtool-bin libgcrypt-dev libgnutls28-dev libxmlsec1-dev


#
# aktuelle Quellen herunterladen
#
git clone -b master https://git.aquamaniac.de/git/gwenhywfar
git clone -b master https://git.aquamaniac.de/git/aqbanking

Alternativen

#
# alternativ (github-kann etwas hinterherhinken)
#
git clone https://github.com/aqbanking/gwenhywfar
git clone https://github.com/aqbanking/aqbanking

#
# wenn man eine bestimmte Version clonen will
#
git clone -b 4.99.17rc1 --single-branch --depth 1 https://git.aquamaniac.de/git/gwenhywfar
git clone -b 5.99.34beta --single-branch --depth 1 https://git.aquamaniac.de/git/aqbanking

Gwenhywfar installieren

#
# Raspberry Pi:
#
cd gwenhywfar
make -f Makefile.cvs
#
# Früher mal brach das Script ab mit der Fehlermeldung ./ltmain.sh würde fehlen ... das ist jetzt nicht mehr so 18.09.2019
#  es ist wieder so 20.11.2020
# Im Fehlerfall muss man noch 2 Befehle ausführen
#
#  ln -s ../ltmain.sh ltmain.sh
#  make -f Makefile.cvs
#
./configure --with-guis=""
make
make install
ldconfig

aqbd entpacken

cd ~
wget https://cargobay.orgamon.org/aqbd1044.zip

mkdir aqbd
cd aqbd
unzip ../aqbd1044.zip

# Arbeitsverzeichnis für aqbd erstellen
#
mkdir /srv/aqb
cp aqbd.sh /srv/aqb
chmod 755 /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
chmod 755 ../aqbanking/src/test/mkver.sh

#
# aqb systemd
#
cp aqbd.service /etc/systemd/system

#
#
cd ..
  • Jetzt geht es weiter mit dem Compiliervorgang aqbanking

AqBanking installieren

Raspberry Pi

#
# auf dem Raspberry Pi
#
cd aqbanking

# 
#
# Sammellastschrift als einzelnen Betrag buchen
#
# Im Moment gibt es verkettete Abhängigkeiten die ich
# nicht ganz verstehe:
# singleBookingAllowed <-> singleBookingWanted <-> batchBooking <-> BtchBookg
#
# das Resultat ist, dass jede einzelne Laszschrift des Sammlers auf dem
# Kontoauszug erscheint. Das will ich nicht, kann es aber nicht anders steuern
#
# -> Quelltext-Änderung:
#
# Man muss sicherstellen, dass der xml Exporter "true" ausgibt (oder die
# Ausgabe ganz unterdrücken, so dass die Bank "true" als default einsetzen kann)

joe src/libs/plugins/imexporters/xml/xml_sepa_exp.c
:345
> 
GWEN_DB_SetCharValue(dbPaymentGroup, GWEN_DB_FLAGS_OVERWRITE_VARS, "batchBooking", "true");
//                         GWEN_DB_GetIntValue(dbParams, "singleBookingWanted", 0, 1)? "false": "true");
#
# folgender Schritt nach misslungenem "make -f Makefile.cvs", musste bis 18.09.2019 durchgeführt werden
#   ln -s ../ltmain.sh ltmain.sh
#
# früher
#   ACLOCAL_FLAGS="-I /usr/share/aclocal" make -f Makefile.cvs
#
# früher
#   ACLOCAL_FLAGS="-I /usr/local/share/aclocal" make -f Makefile.cvs
#
# früher
#  ./configure --with-backends="aqhbci"
#
make -f Makefile.cvs
./configure
make typedefs
make typefiles
make
make install
ldconfig
#
# Binary nach /srv/aqb kopieren
#
cd src
cd test
./mkver.sh
systemctl enable aqbd

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 install nginx php-fpm php-xml


/etc/nginx/sites-enabled/aqb.conf

server {
      listen 80;

      root /srv/ngx/aqb;

      index index.php;

      server_name aqb.your-host.your-domain;

      rewrite favicon.ico /favicon.ico last;
      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.4-fpm.sock;
      }

}
systemctl restart nginx

erster Test "Info"

  • die Anfrage
http://aqb.your-host.your-domain/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://aqb.~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

  1. Name des Kontoinhabers
  2. BLZ
  3. URL des HBCI-Servers
  4. Benutzerkennung für den Login
  5. Kontonummer
  6. PIN also das 5 stellige Zugangs-Passwort
  • Für Lastschriften ist noch zusätzlich nötig ...
  1. Gläubiger-Identifikation die Ihnen von der Bundesbank zugeteilt wurden (nur für Lastschriften nötig)
  2. 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 Rev. 1.044 (gwenhywfar Rev. 5.11.2git-1 / aqbanking Rev. 6.5.12.0beta)

aqbd -[U|L|B|S|D] BLZ KontoNummer PIN [Datum|"Pfad"]
       -U Ausgabe der Umsaetze in eine Datei
       -L Durchfuehren von Lastschriften
       -B Speichern von Terminueberweisungen
       -N Auflisten von Terminueberweisungen
       -S Ausgabe von Salden
       -D werde ein Daemon
       -V Gibt die aktuelle Version aus

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)
b) Bei Sammellastschriften steht hier die Anzahl der Buchungen, also "1", "2", usw.
c) Bei Überweisungen die über eine Homebanking-Plattform steht hier immer eine "1", naja wird scheinbar intern als eine Art Sammelüberweisung mit nur einer Überweisung verbucht oder so ...

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 versetzt 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.

-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~

  • ABDATUM in der Form TT.MM.JJJJ

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)

Parameter BtchBookg

BtchBookg=true, auf dem Kontoauszug: Betrag wird als Summe in einem Posten gebucht (Default)
BtchBookg=false, auf dem Kontoauszug: für jede einzelne Lastschrift wird ein einzelner Posten gebucht


Auf dem aqbd-Server muss die Gläubiger-ID installiert werden:

gid.BLZ.KontoNummer.txt

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

Pflege

Zertifikatswechsel akzeptieren

  • Wenn man den Fehler erhält "Das Zertifikat sieht aber anders aus" gibt es unterschiede zwischen einem gespeicherten Zertifikat und einem eben erhaltenen
    • Das eben erhaltene Zertifikat wird in der Datei /srv/aqb/hostname.tmp gespeichert
    • Das gespeicherte Vergleichszertifikat (Das Soll-Zertifikat) ist in der Datei /srv/aqb/hostname.txt gespeichert
  • Es muss immer eine Identität zwischen den beiden Dateien bestehen, ist das nicht so kann .tmp auf .txt kopiert werden, nachdem man sichergestellt hat, dass .tmp soweit akzeptabel ist
  • Logge Dich in den Banking-Server als root ein
cd /srv/aqb
ls -lrt
  • kopiere das aktuellste xxx.tmp nach xxx.txt, das aktuellste steht unten!, ok, also z.B.
cp hbci11.fiducia.de.tmp hbci11.fiducia.de.txt
  • also "cp" dann ein Leerschritt dann den Namen der .tmp Datei, dann Leerschritt, dann nochmal den vollen Namen der .tmp aber nun mit .txt hinten.

Historisches

Erreichte Meilensteine

2008

  • 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)

2009

  • Sammellastschrift mit iTAN (Erfolg mit AqBanking 3.5.0)
  • Eingang aller meiner Patches (Erfolg mit AqBanking 3.99)
  • SEPA-Lastschrift

2019

  • PSD2 Umstellung
  • Erfolg beim Umsatzabruf, aber Zeichensatzproblme (19.09.2019)
  • Erfolg beim Lastschrifteinzug (27.09.19)

2020

  • Lastschriften sind wieder einzeln

2023

  • erfolgreiche Neuinstallation auf arm 64 Bit Raspberry Pi 3 B+
    • AqBanking 6.5.3.0
    • Gwen 5.10.1
    • aqbd 1.044

Offen

  1. 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)
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

aqbanking-cli listtrans -T '$(date);$(valutaDate);$(transactionText);$(purpo
seLine[0]);$(purposeLine[1]);$(purposeLine[2]);$(purposeLine[3]);$(remoteNam
e);$(remoteBankcode);$(remoteAccountnumber);$(valueAsString);$(purposeLine[4
]);$(purposeLine[5]);$(purposeLine[6]);$(localAccountnumber)'

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