AqBanking: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Zeile 294: Zeile 294:




==== Zertifikat speichern ====
=== Zertifikat speichern ===


*Erstelle der Unterverzeichnisse /error, /logs, /results und /jobs im Hauptverzeichnis  
*Erstelle der Unterverzeichnisse /error, /logs, /results und /jobs im Hauptverzeichnis  

Version vom 21. März 2008, 12:28 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 HBCI auszulesen. Als Ausgabe erzeugt aqbd CSV-Dateien, die leicht weiterverarbeitet werden können.
  • ... Laschriften, die als CSV-Datei vorliegen, via 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/
  • ... nutzt die neueste Generation des "AqBanking" (Version >=3.2.2)
  • ... liegt im C-Quelltext (GPL 3.0 Lizenz) vor


Überblick

Um AqBanking für den OrgaMon nutzbar zu machen wird ein Linux-basierter REST-Webservice implementiert. Dabei dient das Gesamtsystem (aqbd+PHP+Apache2) nur als Wrapper für grundlegende "AqBanking Rev. 3.x" Funktionen. REST hilft uns, auf Kontoumsätze und andere Informationen 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. ... 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.

Implementierungen

  • aqbd 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 Download - der REST Service als PHP Implementierung. Erfordert die mod_rewrite Anpassung im Apache2 (Beschreibung hier REST).

Projektstatus

Erreichte Meilensteine

  1. Linux-Anwendungsebene: QBankingManager installieren (Erfolg: 21.02.2008)
    1. ein Giro-Konto abfragen um zu sehen, ob das Teil funktioniert (Erfolg: 21.02.2008)
    2. Transaktion "Konto-Umsatz-Abfrage" ausprobieren! (Erfolg: 21.02.2008)
    3. Transaktion "Sammel-Lastschrift" (DTA) ausprobieren! (Geht nicht! Nur Einzeln)
  2. Linux-Programmierebene: "aqbanking 3" versuchen zu compilieren (Erfolg: 19.02.2008)
  3. Mini-Programm Konsolen-Programm erstellen das z.B. die Kontenliste auf den Schirm bringt (Erfolg: 22.02.2008)
  4. AH_Job_GetBalance ("~kto~.~blz~") : double (aufgegeben, wir können das ergebnis nicht parsen)
  5. AH_Job_GetTransactions ("~kto~.~blz~","20.02.2008") : (Erfolg: 28.02.2008)
  6. AH_Job_MultiDebitNode_new (Achtung schwierig: "Multi-Job" + "TAN" notwendig + DTAUS Importer verwenden!) (07.03.2008)
  7. Erfolgreiche erzeugung eines DebitNote-Auftrags aus Kommandozeilenparametern und csv-Datei (07.03.2008)
  8. Erfolgreiche auftragsübertragung bis zur TAN-Abfrage über den Passwort-Callback!! (05.03.2008)
  9. Erfolgreiche Lastschriften mit einer einzelnen, sowie mit 2 Lastschriften in einer Sammellastchrift. (07.03.2008)
  10. REST - Server in PHP verwirklicht, Technologie: mod_rewrite und "$fn();" (13.03.2008)
  11. REST - Mappings definieren auf ein nun fertiges "aqbc"-Programm das in C programmiert ist. (13.03.2008)
  12. REST: Lastschriften (15.03.2008)

Offen

  1. Umlaute (scheinbar durchgängig UTF-8, wär ja OK!)
  2. 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)
  3. Integration in den OrgaMon
  4. Grosse Kick-Off-Party für DDBAC

Anwendung als Kommandozeilen-Programm

hier: ./abqd Ausgabe bei "--help"

Saldo (-S)

Umsätze (-U)

Lastschriften (-L)

  • Der Programmteil Umsatzabfrage ist im Beta-Stadium fertiggestellt!!
Bedienung:

-U oder -u für umsatzabfrage

Danach kommen die Parameter
BLZ KTO PIN [Datum]
ohne - oder / oder ähnliches, nur durch whitespace getrennt
  • Erfolgreiche Lastschriften
    • Lastschriftverfahren für ein- oder mehrere Datensätze erfolgreich getestet!
    • Der Programmteil Lastschrift ist im Beta-Stadium fertiggestellt!!
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
  • Erfolgreches Abrufen der Salden und ablegen in eine csv-Datei
    • Der Programmteil Saldo ist im Beta-Stadium fertiggestellt!!
Bedienung:

-S oder -s für Saldo

Danach kommen die Parameter
BLZ KTO PIN
ohne - oder / oder ähnliches, nur durch whitespace getrennt

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.
Sind die Jobs Abgearbeitet werden sie je nach erfolg zusammen mit den Ergebnisdaten im csv-
Format in den results ordner, oder in den error-ordner verschoben. Uber jede Aktion werden
log-Dateien geschrieben.
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 17.TAN 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.

PHP-Rest-Server

Die erste Alphaversion des Rest-Servers ist jetzt online, und arbeitet super mit abtest zusammen. abtest läuft im Daemon-Modus im Hintergrund, und wird sozusagen vom Restserver ferngesteuert. Das skript erzeugt die Job-Files und prüft auf das Vorhandensein der Ergebnissdaten, und gibt diese aus. Die ersten Dauertests für den Daemon stehen ebenfalls aus.

Anfrage auf den server

http://www.orga-mon.de/rest/Funktion/BLZ/KTO/datum

Funktionen:
./info/
./umsatz/
./saldo/
./lastschrift/
./itan/

Umsatz (./umsatz/)

Anfrage:

./UMSATZ/~BLZ~/~KONTO#~/2008-02-28?f=text

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

Sammellastschrift (./lastschrift)

Anfrage:

POST ./LASTSCHRIFT/~BLZ~/~Konto~

mit einem http-Upload der DTA-Datei!

Antwort:

  • die Antwort ist aus Ablaufgründen ein html-Formular:
Nun bitte die 34. TAN   [______]
(Ausführen)
  • iTAN: Ist das iTAN Verfahren gewählt, so muss vom Server vor Anzeige der Antwort zunächst die Index-Nummer der iTAN abgefragt werden
  • DTA: Dem Dienst muss die Sammel-Lastschrift Datei übertragen werden. Dabei wird auf das bewährte DTA-Format gesetzt
  • "POST" (=Button "Ausführen") schickt die Daten nun zum Server, dann erst erfolgt die eigentliche Arbeit


Die aktuelle umsetzung ist etwas schwierig, da für den Benutzer der anschein einer Verzeichnisstruktur aufrecht erhalten werden muss. im Moment gehen die Forschungen in die Richtung Eingebautes Formular mit Post.

Anfrage:

http://www.orga-mon.de/rest/lastschrift/~BLZ~/~KTO~/~CSV-Pfad(TEST)~/

Angezeigt wird daraufhin das eingebaute Formular, das seine gesammelten Daten per POST an tan.php schickt. diese erzeugt die Datei xxxxxx.tan im Job-Verzeichnis, welche durch abtest gelesen wird. Anschließend ruft tan.php wieder den Ursprungspfad:

http://www.orga-mon.de/rest/lastschrift/~BLZ~/~KTO~/~CSV-Pfad(TEST)~/

Dort soll eine zusannemfassung angezeigt werden, mindestens aber "Erfolg" oder "Misserfolg"!!

  • Probleme
    • Übergeben der notwendigen Parameter an tan.php
    • erkennen dass index.php zum zweiten mal gerufen wird!!
    • Möglicherweise die angefangene session von index.php fortsetzen??

Kontostand (./saldo)

Termin-Überweisung

-- noch kein Bedarf --

Installations-Anleitung (aqbd)

aqbd compilieren

  • gwen-Lib installieren
tar xzfz gwenhywfar-3.1.1.tar.gz
cd gwenhywfar-3.1.1
./configure
make
make install
  • aqbanking-Lib installieren
tar xzfz aqbanking-3.2.1.tar.gz
cd aqbanking-3.2.1

Wir haben beide Packages in das Verzeichnis /usr/src entpackt.


Im Moment müssen noch 2 Dateien ersetzt werden:

src/plugins/backends/aqhbci/plugin/joblayer/jobqueue.c http://orgamon.de/aqbanking/jobqueue.c
src/plugins/parsers/swift/swift940.c http://orgamon.de/aqbanking/swift940.c

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

Kompilieren der Source

touch abtest.c
make abtest

Da unser server ein 64bit-System besitzt, mussten wir vor dem Anlegen der Konten noch eine .so in das richtige lib64-Verzeicnis kopieren.

Konto - Deklaration

  • Vorbereitung, wir brauchen ...
  1. BLZ
  2. HBCI-URL (http://www.hbci-zka.de/institute/institut_auswahl.htm)
  3. Kontonummer
  4. Benutzerkennung
  5. PIN
user:/ #aqhbci-tool3 adduser -b BLZ -u Benutzerkennung -s HBCI-URL -t pintan

user:/ #aqhbci-tool3 addaccount -b BLZ -c Benutzerkennung -a Kontonummer


settings.conf anpassen

Sammellastschrift nutzbarmachen

  • rote Zeile rauslöschen ...


 char multiJobAllowed="N"

... auch wenn mal nur eine Lastschrift verbucht werden soll.

das Flag "PreferSingleDebiNotes" rausmachen


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

SSL3 aktivieren

  • kommt der Fehler "A TLS packet with unexpected length was received" muss man SSL3 (anstelle von SSL2) aktivieren.
  • die grüne Zeile hinzumachen ...
users {
  user {
   char userId="~Dein-HBCI-User-Login-Name~"
    data {
      backend {

       char userFlags="forceSsl3"
       char tokenType="pintan"
       ...

Systeme miteinander bekanntmachen

user:/ #aqhbci-tool3 getsysid -b BLZ -c Benutzerkennung


Zertifikat speichern

  • Erstelle der Unterverzeichnisse /error, /logs, /results und /jobs im Hauptverzeichnis
  • Erstes ausführen einer saldoabfrage -> abtest bricht ab
  • Umbenennen der frisch erstellten cert.~BLZ~.~KTO~.tmp in cert.~BLZ~.~KTO~.txt

erster Test

Installations-Anleitung (REST)

Apache2 anpassen

REST Server PHP-Script

erster Test

http://~MeinServer~/saldo/~MeineBLZ~/~MeineKontoNr~/

Ergebnis

Betrag;Waehrung 2938,23;EUR

Links

Aqbanking 3

Alternative Projekte

leider basiert die Implementierung auf "aqbanking 2" das nicht weiterentwickelt wird. In "aqbanking 3" das wir verwenden wollen ist das Kommandozeilen-Tool "aqbanking-tool" nicht mehr vorhanden.