hbci4j / hbci4java Goto Github PK
View Code? Open in Web Editor NEWJava-based FinTS protocol implementation that supports all features (chipTAN, pushTAN, HHD, SEPA, PSD2,...)
License: GNU Lesser General Public License v2.1
Java-based FinTS protocol implementation that supports all features (chipTAN, pushTAN, HHD, SEPA, PSD2,...)
License: GNU Lesser General Public License v2.1
Beispiel: Bei der ING muss man sich alle X Tage per Web einloggen, ansonsten kommt eine Fehlermeldung: "9942:Bitte erneuern Sie ihre Authentifizierung. Einfach unter ING.de einloggen.". Diese Fehlermeldung wird zwar geloggt, aber erscheint nicht im JobResult - dort findet sich nur eine Exception "org.kapott.hbci.exceptions.HBCI_Exception: Nachricht ist nicht verschlüsselt".
Offenbar wird der Fehler 9942 zwar dem HBCIStatus in HBCIKernelImpl:417 hinzufügt, dieses ret aber anschließend aufgrund der Exception in Zeile 463 wieder verworfen; so dass faktisch nur der technische Folgefehler zurück gegeben wird, aber nicht die fachliche Fehlerursache.
Wie könnte man diesen HBCIStatus inkl. der gespeicherten Fehlermeldungen an den Aufrufer per JobResult zurück geben? Wäre es sinnvoll, die HBCI_Exception um ein HBCIStatus Property zu erweitern?
Moin,
wir würden gerne in einer kleinen Einrichtung HBCI-Aufträge mit Zweitunterschriften bestätigen. Seitens der Bank ist das kein Problem und, wenn ich das richtig verstanden habe, geht das seit PushTan 2.0 sogar als verteilte Unterschrift in zwei Vorgängen?!
Als Software würden wir gerne Jameica/Hibiscus nutzen-
Meine Recherche hat nun ergeben, dass dies von hbci4j noch nicht unterstützt wird und, aufgrund der "privaten" Zielgruppe auch eher nicht geplant ist.
Mit JVerein gibt es aber durchaus eine weniger private größere Gruppe die gerne verteilte Unterschriften benutzen würde (zumindest in meinem Umfeld).
Daher hätte ich zwei Fragen
Here is the log:
1:12:36:32:No supported passport formats found
1:12:37:38:no supported legacy converters found
1:12:39:33:Meldung der Bank: 9800:Der Dialog wurde abgebrochen.
1:12:39:33:Meldung der Bank: 9400:Der anonyme Dialog wird nicht unterstützt.
1:12:39:36:Meldung der Bank: 9800:Der Dialog wurde abgebrochen.
1:12:39:36:Meldung der Bank: 9110:Unbekannter Aufbau der Kundennachricht.
1:12:39:36:org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:428)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:176)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.sendData(AbstractRawHBCIDialog.java:103)
at org.kapott.hbci.dialog.HBCIDialogEnd.sendData(HBCIDialogEnd.java:84)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:76)
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:283)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:372)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:267)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:132)
at org.de.jmg.hbci4android2.Banking.getAccounts(Banking.java:188)
at org.de.jmg.hbci4android2.HBCIAdapter$8.doInBackground(HBCIAdapter.java:844)
at org.de.jmg.hbci4android2.HBCIAdapter$8.doInBackground(HBCIAdapter.java:835)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
2:12:39:36:dialog end failed: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
9800:Der Dialog wurde abgebrochen.
9110:Unbekannter Aufbau der Kundennachricht.
1:12:39:37:org.kapott.hbci.exceptions.ProcessException: Dialog-Ende fehlgeschlagen
at org.kapott.hbci.dialog.HBCIDialogEnd.checkResult(HBCIDialogEnd.java:113)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:86)
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:283)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:372)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:267)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:132)
at org.de.jmg.hbci4android2.Banking.getAccounts(Banking.java:188)
at org.de.jmg.hbci4android2.HBCIAdapter$8.doInBackground(HBCIAdapter.java:844)
at org.de.jmg.hbci4android2.HBCIAdapter$8.doInBackground(HBCIAdapter.java:835)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
1:12:39:37:fetching BPD failed: 9800:Der Dialog wurde abgebrochen.
9400:Der anonyme Dialog wird nicht unterstützt.
2:12:39:37:can not check if requested parameters are supported
2:12:39:41:the job with the code HNSHK seems not to be allowed with PIN/TAN
2:12:39:41:the job with the code HKIDN seems not to be allowed with PIN/TAN
2:12:39:41:the job with the code HKVVB seems not to be allowed with PIN/TAN
2:12:39:41:the job with the code HKTAN seems not to be allowed with PIN/TAN
2:12:39:41:the job with the code HKSYN seems not to be allowed with PIN/TAN
1:12:39:50:Meldung der Bank: 9050:Nachricht teilweise fehlerhaft.
1:12:39:50:Meldung der Bank: 9010:Der gewünschte Geschäftsvorfall wird nicht unterstützt. (5: Synch.TAN2Step6)
2:12:39:50:message has no signature
Beim Ausführen eines GVSaldoReq
meldet die Bibliothek mir den Fehler org.kapott.hbci.exceptions.ParseErrorException: Fehler beim Erzeugen eines Syntax-DEs für DialogInitRes.MsgHead.SegHead.code
.
Die ursächliche Exception dafür ist eine InvalidArgumentException
, mit der Message Länge von (0) muss zwischen 1 und 6 liegen
.
Ein Sonderfall, oder passt die Message von der Commerzbank nicht zur Definition?
Hallo zusammen,
gibt es schon Planungen für die Unterstützung des CAMT Nachrichtenformats bei der Umsatzabfrage? Hier wären viele Zusatzinfos verfügbar, die beim alten MT9xx Format leider fehlen, z.B. die PaymentInfId von Sammellastschriften.
Gruss
Norbert
Repo ausgecheckt und maven ausgeführt.
Ausführliches Debug-Log: debug.log
[15:29 dellwing@dellwing hbci4java] > mvn package
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 1 modules...
[INFO] Installing Nexus Staging features:
[INFO] ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hbci4j-core 3.0.13-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-jaxb2-plugin:0.13.2:generate (pain.001.001.02) @ hbci4j-core ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.697s
[INFO] Finished at: Tue Jan 16 15:29:41 CET 2018
[INFO] Final Memory: 13M/303M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.2:generate (pain.001.001.02) on project hbci4j-core: Unable to parse configuration of mojo org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.2:generate for parameter produces: Cannot assign configuration entry 'produces' with value 'org/kapott/hbci/sepa/jaxb/pain_001_001_02/*.java' of type java.lang.String to property of type java.lang.String[] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginConfigurationException
[15:29 dellwing@dellwing hbci4java] > mvn -v
Apache Maven 3.0.5
Maven home: /usr/share/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: de_DE, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-109-generic", arch: "amd64", family: "unix"
[15:30 dellwing@dellwing hbci4java] > lsb_release -a
LSB Version: security-4.0-amd64:security-4.0-noarch:security-4.1-amd64:security-4.1-noarch
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty
I noticed that in order to access all statements (Umsätze) I need to provide an actual TAN consisting of six digits and displayed in the S-Push TAN app, whereas when viewing all statements on the Sparkasse Webinterface I can just swipe in the app to confirm the action.
Is this something hbci4j can also support, or is this simply not supported with the hbci api? A few years ago I tried implementing a hbci client myself in nodejs (boy is that an ugly API) and I remember that there were different numerical codes to request different tan schemas, e.g. comdirect supported smstan or phototan. If I remember correctly there was also a method to request the available tan methods from the api.
From a developer perspective this would be way more easy to implement as I wouldn't need to implement means of supplying the tan but can just wait for the user to confirm the request in the app.
Zurzeit laufen viele Test gegen ein echtes Testkonto. Wir sollten für diese IntegrationTests eine Umgebung starten, so dass die Tests mit einem lokalen HBCI Server kommunizieren können
Verbindung mit Schlusseldiskette-Metode funktioniert nicht wenn Computer hinter dem Proxy server ist.
Proxy Einstellungen in Hibiscus sind einfach ignoriert.
Nachdem ich heute versucht habe mein Projekt von der HBCI4J-Version 3.0.24 (PSD2-Fehler) auf die 3.1.13 zu updaten, erhalte ich beim Versuch meine Umsätze durch die Klasse UmsatzAbrufPinTan abzurufen, folgende Fehlermeldung:
Exception in thread "main" org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:145) at hbci4j.test.App.main(App.java:103) Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Registrieren der Institutsdaten at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:250) at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132) ... 1 more Caused by: org.kapott.hbci.exceptions.InvalidUserDataException: *** selected pintan method not supported: at org.kapott.hbci.passport.AbstractPinTanPassport.chooseTANMethod(AbstractPinTanPassport.java:858) at org.kapott.hbci.passport.AbstractPinTanPassport.getCurrentTANMethod(AbstractPinTanPassport.java:822) at org.kapott.hbci.passport.AbstractPinTanPassport.isSupported(AbstractPinTanPassport.java:628) at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:314) at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:372) at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:248) ... 2 more
Ist die Demoklasse nach PSD2-Einführung deprecated oder mache ich etwas anderes falsch?
Scheint als hätte die Bank PSD2 erfolgreich integriert, aber auch wieder nicht, seltsam.
Der GV KontoauszugPdf scheint aktuell nicht in HBCIBatch unterstützt zu sein, zumindest bekomme ich immer die Fehlermeldung:
Exception in thread "main" org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen des Jobs KontoauszugPdf
at org.kapott.hbci.manager.HBCIHandler.newJob(HBCIHandler.java:388)
at org.kapott.hbci.tools.HBCIBatch.main(HBCIBatch.java:312)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.kapott.hbci.manager.HBCIHandler.newJob(HBCIHandler.java:382)
... 1 more
Caused by: org.kapott.hbci.exceptions.JobNotSupportedException: Geschäftsvorfall KontoauszugPdf wird nicht unterstützt, evtl. andere HBCI-Version benutzen
at org.kapott.hbci.GV.HBCIJobImpl.findSpecNameForGV(HBCIJobImpl.java:227)
at org.kapott.hbci.GV.HBCIJobImpl.<init>(HBCIJobImpl.java:96)
at org.kapott.hbci.GV.GVKontoauszugPdf.<init>(GVKontoauszugPdf.java:45)
at org.kapott.hbci.GV.GVKontoauszugPdf.<init>(GVKontoauszugPdf.java:54)
... 6 more
An der Version kann es nicht liegen, die steht auf 300. So wie ich gesehen habe wird KontoauszugPdf auch in Version 300 unterstützt.
Hallo,
für meine Anwendung muss ich den Provider für die HBCI-Aufrufe explizit setzen.
Das betrifft die Klassen AbstractHBCIPassport sowie alle HBCIPassport* Klassen (Aufrufe SecretKeyFactory.getInstance() und Cipher.getInstance()).
Meint ihr, dass dies auch für andere sinnvoll ist? Dann würde ich einen Pull Request zur Verfügung stellen. Die Auswahl des Providers würde dann über eine Property erfolgen. Natürlich wäre das ganze rückwärtskompatibel.
lg
Manuel
Beim Öffnen der Datei in Android Studio fällt auf, dass der Eintrag für BLZ 75062026 (Raiffeisenbank Oberpfalz Süd) doppelt vorkommt.
Das scheint zwar beim Ablauf des Programms nicht problematisch, deutet aber vielleicht auf ein Fehler beim Generieren der Datei hin?
Wie wird die Datei eigentlich generiert? Sie enthält 4054 Einträge, in der Datei, die von [email protected] verschickt wird, sehe ich aber nur 1851 unterschiedliche Bankleitzahlen.
Derzeit ist in HBCIUtils#VERSIOn die Versionsnummer hart codiert hinterlegt. Das müsste noch so geändert werden, dass HBCIUtils#version() stattdessen die von Maven generierte Versionsnummer zurückliefert. Unter http://stackoverflow.com/questions/2712970/get-maven-artifact-version-at-runtime findet sich hierzu ein möglicher Ansatz, die Versionsnummer aus der /META-INF/maven/com.github.hbci4j/hbci4j-core/pom.properties zu lesen.
Hallo.
Bei dem aktuellen Release (3.1.42) bekomme ich eine ParseErrorException
mit dem Inhalt CryptedRes.CryptHead.SegHead.code: vorgegebener Wert "HNVSK" stimmt nicht mit gefundenem Wert "HIRMG" überein
Die Exception wird an dieser Stelle in Zeile 228 konstruiert:
Ist hier die Nachricht von der Bank falsch aufgebaut, oder hat die Verabeitung der Lib einen Fehler?
Beste Grüße
Thimo Seitz
Hallo,
es wäre klasse, wenn Sie zusätzlich den Geschäftsvorfall SEPA Instant Payment Zahlung (HKIPZ) unterstützen könnten.
Ich habe versucht ihn selbst zu implementieren, bin jedoch daran gescheitert, dass ich die Spezifikation nicht verstehe (angehängt als CR0482_Anl_Unterstuetzung_von_Instant_Payments_in_FinTS_final-version.pdf).
Ich hätte ein Beispiel zum Tätigen von SEPA Überweisungen (UebSEPA / HKCCS) vergleichbar zu UmsatzAbrufPinTan implementiert.
Soll ich es verallgemeinern und Ihnen einen Pull Request stellen, so dass Sie es zusammen mit dem Umsätze abrufen Beispiel veröffentlichen können?
Ich benutze den Beispielcode von UmsatzAbrufPinTan.java
um die Umsaetze meiner Konten abzurufen. Nach dem (Neu-)anlegen des Passports gibt passport.getAccounts()
die Konten mit BIC/IBAN zurück. Bei allen weiteren Aufrufen sind die IBAN und BIC Felder der Konten jedoch null
.
Verwendete Version: 3.1.37
Bank: Consorsbank (BLZ 76030080)
Erwartetes Verhalten: Die Konten von passport.getAccounts() haben immer die BIC/IBAN gesetzt und sind nicht null
.
Hört sich sehr nach #26 an.
Seit Commit c183d72 werden SEPA Infos nur abgerufen, wenn die Bank dies unterstützt. Dazu prüft HBCIDialogSepaInfo.supported()
die höchste verfügbare Version des SEPAInfo
Segments mithilfe von AbstractRawHBCIDialog.getSegmentVersion()
. Diese Methode wurde in besagtem Commit (fast) unverändert aus HBCIDialogTanMedia
übernommen und unterstützt nur Versionsnummern zwischen 2
und 5
. Die höchste Versionsnummer des SEPAInfo
Segments scheint allerdings 1
zu sein, was zum Fehlschlagen der supported()
-Prüfung und zum Abbruch des Info-Abrufs führt.
Gibt es schon ein ETA zu Echtzeitueberweisungen?
Das ist das einzige Feature, was ich noch vermisse.
Waere schade, wenn ich nur deswegen eine Banking-Software kaufen muss.
Mein Patch zu #47 ist nur ein Teil der Lösung für Einzellastschriften. Bei Sammellastschriften sieht es anders aus.
Ein neuer PR kommt hoffentlich heute noch.
Im CommPinTan Konstruktur wird bei meinen Bankdaten die URL fehlerhaft erzeugt:
String fullpath=parentPassport.getHost(); // ist bei mir "https://banking-by5.s-fints-pt-by.de/fints30"
int slashIdx=fullpath.indexOf("/");
if (slashIdx==-1)
slashIdx=fullpath.length();
String host=fullpath.substring(0,slashIdx); // ist bei mir dann "https:"
String path=fullpath.substring(slashIdx); // und path folglich "//banking-by5.s-fints-pt-by.de/fints30"
// kann dann mit obigen Werten für host und path nicht erstellt werden
this.url=new URL("https",host,parentPassport.getPort().intValue(),path);
Ich kenne nun die Werte für fullpath bei anderen Banken nicht, doch eine Möglichkeit den Fehler zu beheben wäre zuerst zu überprüfen, ob fullpath bereits eine gültige URL ist:
this.url = getUrl(parentPassport);
// ...
private URL getUrl(HBCIPassportInternal parentPassport) throws MalformedURLException {
String fullpath=parentPassport.getHost();
try {
// TODO: don't know if for other banks it is needed to insert port explicitly but for my bank it wasn't
return new URL(fullpath); // check first if fullpath can already be parsed to an url
} catch(Exception ignored) { }
int slashIdx=fullpath.indexOf("/");
if (slashIdx==-1)
slashIdx=fullpath.length();
String host=fullpath.substring(0,slashIdx);
String path=fullpath.substring(slashIdx);
HBCIUtils.log(HBCIUtilsInternal.getLocMsg("LOG_CONNECT",new Object[]{host,parentPassport.getPort(),path}),HBCIUtils.LOG_INFO);
return new URL("https",host,parentPassport.getPort().intValue(),path);
}
Wenn beim Abruf der Umsätze über GVKUmsAllCamt mehr als eine XML-Nachricht kommt, dann werden die Salden ab der zweiten Nachricht falsch addiert.
Wenn ich bei einer Volksbank mehr als 150 Buchungen habe, dann laufen in GVKUmsAllCamt#extractResults mehr als eine XML-Nachricht auf, die geparst werden.
Bei der zweiten Nachricht wird dann aber beim laufenden Saldo nicht bei dem im XML-Header angegeben Startsaldo angefangen, sondern bei 0,00 €.
Wenn also die 150. Buchung z.B. - 10,00 € und der laufende Saldo danach 150,00 € ist, stimmt es noch. Kommt nun eine 151. Buchung hinzu, mit z.B. - 50,00 €, dann ist der laufende Saldo danach -50,00 € und nicht 100,00 €.
Ich vermute, dass dieser Fall nur auftritt, wenn zwei camt-Nachrichten als Antwort kommen und der Buchungsdaten am Ende der ersten Nachricht auch am Anfang der zweiten Nachricht vorkommt.
Soweit ich das nachvollziehen kann, liegt dies an folgender Stelle im Parser:
In der zweiten Nachricht gibt es nämlich kein Anfangssaldo (PRCD), sondern nur ein Zwischensaldo (ITBD). Somit wird tag.start
nie gesetzt und man müsste die Zwischensalden auch in den Parsern berücksichtigen.
Ein einfaches Ändern in:
if (code == BalanceType12Code.PRCD || code == BalanceType12Code.ITBD)
sollte aber nicht die Lösung sein, wenn man die entsprechende Erklärung aus der Spezifikation liest:
Erste camt.053-Nachricht:
Erster Saldo „PRCD“ und zweiter Saldo „ITBD“
Weitere camt.053-Nachrichten (falls erforderlich):
Erster und zweiter Saldo jeweils „ITBD“
Letzte camt.053-Nachricht:
Erster Saldo „ITBD“ und zweiter Saldo „CLBD“
Somit müsste man unterscheiden, ob es der erste oder der zweite Saldo ist und dann entsprechend start
und end
setzen - da bin ich mir aber nicht ganz sicher, ob das immer so mit der Reihenfolge so ist und dass es immer zwei Salden gibt?!
Hallo zusammen,
da das Repo hbci4j/hbci4java geforked ist, findet man es leider nicht über die GitHub Suche und auch Google indiziert es nicht. Auch Code-Search etc. funktioniert nur eingeschränkt.
Der Owner des Repos kann unter https://support.github.com/contact?flow=detach_fork&subject=Detach%20Fork&tags=rr-forks%2Cfork den Fork "detachen", so kann der Flag entfernt werden und die o.g. Einschränkungen sollten sich auflösen.
Grüße!
Ich bin gerade dabei das Decoupled Verfahren mit dem callback NEED_PT_DECOUPLED
zu implementieren, und habe als aller erstes einmal probiert, was passiert wenn ich bei diesem Callback einfach nach einer kurzen Pause (10 Sekunden) direkt returne, ohne vorher in der PushTAN app den Auftrag zu bestätigen.
Meine Erwartungshaltung ist (nachdem ich mir hier auch Kaptiel B.4.2.2 angeschaut habe), dass der callback NEED_PT_DECOUPLED
dadurch immer wieder aufgerufen wird, bis der Prozess in der App besätigt wurde.
In den unteren logs sieht man auch, dass die Bank mit 3956::Starke Kundenauthentifizierung noch ausstehend
geantwortet hat, aber daraufhin ist der nächste (und letzte) callback CLOSE_CONNECTION
.
Ein weiteres Problem ist danach, dass sowohl HBCIJobResult::isOk()
, als auch HBCIDialogStatus::isOk()
true
zurückgeben, und es daher so aussieht, als wäre der Prozess erfolgreich bis zum Ende durchgelaufen. Also wäre eine separate Frage, mit welcher Methode ich vernünftig prüfen kann, dass der Bankprozess eigentlich Fehlerhaft, beziehungsweise unvollständig ist.
Wenn ich während dem 10 Sekunden Buffer in der PushTAN app den Prozess bestätige klappt alles wie erwartet, nachdem der NEED_PT_DECOUPLED
callback returned bekomme ich die erfolgreiche Antwort der Bank mit den angeforderten Daten.
Die logs beginnen bei dem NEED_PT_DECOUPLED
callback: hbci4java.log
Irre ich mich, oder fehlen die Sources vom Server? Kann man die irgendwo anders finden?
I am trying to convert the library for Android, I can load Umsätze but I can't make SEPATransfers… This is the Problem:
javax.xml.bind,ContextFinder.class does not find the right JAXBContext....
`static JAXBContext find(Class[] classes, Map properties) throws JAXBException {
String jaxbContextFQCN = JAXBContext.class.getName();
Class[] arr$ = classes;
int len$ = classes.length;
String factoryClassName;
for(int i$ = 0; i$ < len$; ++i$) {
Class c = arr$[i$];
ClassLoader classLoader = getClassClassLoader(c);
Package pkg = c.getPackage();
if (pkg != null) {
String packageName = pkg.getName().replace('.', '/');
String resourceName = packageName + "/jaxb.properties";
logger.log(Level.FINE, "Trying to locate {0}", resourceName);
Properties props = loadJAXBProperties(classLoader, resourceName);
if (props != null) {
logger.fine(" found");
if (props.containsKey("javax.xml.bind.context.factory")) {
factoryClassName = props.getProperty("javax.xml.bind.context.factory").trim();
return newInstance(classes, properties, factoryClassName);
}
throw new JAXBException(Messages.format("ContextFinder.MissingProperty", packageName, "javax.xml.bind.context.factory"));
}
logger.fine(" not found");
}
}
logger.log(Level.FINE, "Checking system property {0}", "javax.xml.bind.context.factory");
factoryClassName = (String)AccessController.doPrivileged(new GetPropertyAction("javax.xml.bind.context.factory"));
if (factoryClassName != null) {
logger.log(Level.FINE, " found {0}", factoryClassName);
return newInstance(classes, properties, factoryClassName);
} else {
logger.fine(" not found");
logger.log(Level.FINE, "Checking system property {0}", jaxbContextFQCN);
factoryClassName = (String)AccessController.doPrivileged(new GetPropertyAction(jaxbContextFQCN));
if (factoryClassName != null) {
logger.log(Level.FINE, " found {0}", factoryClassName);
return newInstance(classes, properties, factoryClassName);
} else {
logger.fine(" not found");
Class factory = lookupUsingOSGiServiceLoader("javax.xml.bind.JAXBContext");
if (factory != null) {
logger.fine("OSGi environment detected");
return newInstance(classes, properties, factory);
} else {
logger.fine("Checking META-INF/services");
try {
String resource = "META-INF/services/" + jaxbContextFQCN;
ClassLoader classLoader = getContextClassLoader();
URL resourceURL;
if (classLoader == null) {
resourceURL = ClassLoader.getSystemResource(resource);
} else {
resourceURL = classLoader.getResource(resource);
}
if (resourceURL != null) {
logger.log(Level.FINE, "Reading {0}", resourceURL);
BufferedReader r = new BufferedReader(new InputStreamReader(resourceURL.openStream(), "UTF-8"));
factoryClassName = r.readLine().trim();
return newInstance(classes, properties, factoryClassName);
}
logger.log(Level.FINE, "Unable to find: {0}", resource);
} catch (UnsupportedEncodingException var13) {
throw new JAXBException(var13);
} catch (IOException var14) {
throw new JAXBException(var14);
}
logger.fine("Trying to create the platform default provider");
return newInstance(classes, properties, "com.sun.xml.internal.bind.v2.ContextFactory");
}
}
}
}`
Siehe Kopfzeile von https://github.com/hbci4j/hbci4java/tree/master/src/main/java/org/kapott/cryptalgs und https://github.com/willuhn/hbci4java/issues/36 ist 404.
Mit der neuesten Version funktioniert die Postbank, die Diba und die Norisbank nicht mehr.
We have seen a few examples of customer IBAN's being cut off at 27 characters. We can see the data is correct at 28 characters in our account but when it comes to our system through this library it is only 27. Are there any limitations which would cause this? We are getting the field from GVRKUms.UmsLine.other.number
Bei der Verbindung mit ComDirect läuft meine Implementierung zur Zeit in folgendes Problem:
Wenn der FinTS-Server zur TAN-Eingabe mittels photoTan auffordert:
2023-12-21 23:18:05,096 INFO [DefaultDispatcher-worker-3] HNHBK:1:3+000000004288+300+enXhduwyjowBAABrqDz2DBH2CgQA+1+enXhduwyjowBAABrqDz2DBH2CgQA:1'HNSHK:2:4+PIN:2+902+452635949+
1+1+2::A2HhduwyjowBAABrqDz2DBH2CgQA+1+1:20231221:231801+1:999:1+6:10:16+280:20041144:55315702:S:0:0'HIRMG:3:2+0010::Nachricht entgegengenommen.'HIRMS:4:2:5+0030::TAN-Eingabe erf
orderlich.'HITAN:5:6:5+4++40611985+Siehe Grafik+@3759@^@ image/png^N¢<U+0089>PNG
erhalte ich auch den Callback NEED_PT_PHOTOTAN, und meine Implementierung reagiert auch mit der Anzeige des Bildes, aber kurz darauf läuft der HBCI-Handler in folgende Exception:
2023-12-21 23:18:05,581 INFO [DefaultDispatcher-worker-3] org.kapott.hbci.exceptions.HBCI_Exception: *** error while signing
at org.kapott.hbci.security.Sig.signIt(Sig.java:637)
at ri.g.b(HBCIKernelImpl.java:28)
at ri.g.c(HBCIKernelImpl.java:17)
at org.kapott.hbci.dialog.a.g(AbstractRawHBCIDialog.java:7)
at org.kapott.hbci.dialog.a.d(AbstractRawHBCIDialog.java:156)
at ri.j.e(HBCIUser.java:585)
at ri.e.i(HBCIHandler.java:16)
at ri.e.<init>(HBCIHandler.java:56)
at org.totschnig.fints.BankingViewModel.z(BankingViewModel.kt:283)
at org.totschnig.fints.BankingViewModel$addBank$2.p(BankingViewModel.kt:44)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.m(ContinuationImpl.kt:9)
at kotlinx.coroutines.o0.run(DispatchedTask.kt:111)
at kotlinx.coroutines.internal.j$a.run(LimitedDispatcher.kt:4)
at bc.i.run(Tasks.kt:3)
at kotlinx.coroutines.scheduling.CoroutineScheduler$b.run(CoroutineScheduler.kt:98)
Caused by: org.kapott.hbci.exceptions.InitializingException: error while initializing element DialogInitSCA.SigTail.UserSig.tan
at org.kapott.hbci.datatypes.factory.SyntaxDEFactory.createSyntaxDE(SyntaxDEFactory.java:17)
at vi.a.s(DE.java:119)
at vi.h.i(MultipleSyntaxElements.java:141)
at vi.k.s(SyntaxElement.java:70)
at vi.h.i(MultipleSyntaxElements.java:141)
at vi.k.s(SyntaxElement.java:70)
at vi.h.i(MultipleSyntaxElements.java:141)
at vi.k.s(SyntaxElement.java:70)
at org.kapott.hbci.security.Sig.signIt(Sig.java:554)
... 14 more
Caused by: org.kapott.hbci.exceptions.InvalidArgumentException: length of image/png^N¢<U+0089>PNG ... (3757) not in range (1,99)
at org.kapott.hbci.datatypes.SyntaxDE.setContent(SyntaxDE.java:60)
at org.kapott.hbci.datatypes.SyntaxDE.initData(SyntaxDE.java:2)
at org.kapott.hbci.datatypes.SyntaxDE.init(SyntaxDE.java:1)
at org.kapott.hbci.datatypes.SyntaxAN.init(SyntaxAN.java:1)
at org.kapott.hbci.datatypes.factory.SyntaxDEFactory.createSyntaxDE(SyntaxDEFactory.java:14)
... 22 more
Wobei die Fehlermeldung dort wo ich ... gesetzt habe, scheinbar die Daten der PNG-Datei enhält. Die Stacktrace ist leider von R8 obfuskiert, und ich kann das leider im Augenblick nicht ohne R8 reproduzieren, weil das auf dem Gerät eines Users passiert. Ich kann aber versuchen, die Stacktrace zu retracen, aber vielleicht springt das jemanden auch so ins Auge, was ich hier falsch mache?
With the 3.1.6 Version Banking is no more possible. "Unable to fetch SysID".
Es wäre schön, wenn wir in readme.md eine Kurzanleitung zum Checkout und Build hätten.
Analog zu https://github.com/willuhn/hbci4java#selbst-compilieren
Als Default-Maven-Goal würde ich hier vor "release:prepare bzw. release:perform" primär "jar:jar" angeben. Die meisten wollen sich ja sicher nur das Jar bauen und kein offizielles Release erzeugen und hochladen.
Hallo, ich habe heute den ganzen Tag versucht mit HBCI4Java einen ersten anonymen Abruf zu implementieren und unzählige Internetseiten zu Rate gezogen. Aber ich bekomme keinen Anonymen Abruf hin um zumindest die unterstützte HBCI/FinTS Version der Bank zu erhalten. Mein Testcode:
`
String blz = "70020270";
String hbciHost = "hbci.hypovereinsbank.de";
Integer hbciPort = 3000;
String hbciVersion = VERSION_HBCI.getId();
String pinDefault = "asdf_12345";
//init HBCI4Java runtime environment:
Properties propsHBCI = new Properties();
HBCIUtils.init(propsHBCI, new MyHBCICallback(blz, pinDefault));
String s = "HBCI info for BLZ '"+blz+"': BankInfo="+HBCIUtils.getBankInfo(blz)+", Name="+HBCIUtils.getNameForBLZ(blz);
LOGGER.info(s);
//static general infos:
HBCIUtils.setParam("client.product.name","TestHBCI");
BankInfo info = HBCIUtils.getBankInfo(blz);
//create authentication passport:
HBCIPassport passport = null;
HBCIUtils.setParam("client.passport.country", "DE");
HBCIUtils.setParam("client.passport.blz", blz);
HBCIUtils.setParam("client.passport.default","Anonymous"); //
HBCIUtils.setParam("client.passport.Anonymous.filename","HBCI_Passport_BLZ-"+blz+"_anonymous.txt"); //avoid HBCI_Exception: kann kein Passport des Typs Anonymous instanziieren
HBCIUtils.setParam("client.passport.Anonymous.init","1"); //avoid HBCI_Exception: kann kein Passport des Typs Anonymous instanziieren
HBCIUtils.setParam("client.passport.customerId", blz);
passport = AbstractHBCIPassport.getInstance("Anonymous");
passport.setCountry("DE");
passport.setHost(hbciHost);
passport.setPort(hbciPort);
passport.setFilterType("Base64"); //message encoding
//connect and get FinTS version:
HBCIHandler handle = null;
try {
handle = new HBCIHandler(hbciVersion, passport); //HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
Properties propsLowLevelJobs = handle.getSupportedLowlevelJobs();
LOGGER.info("HBCI info for BLZ "+blz+", port "+hbciPort+": HBCI version: "+hbciVersion+", supported low level jobs: "+propsLowLevelJobs);
//add jobs to execute:
HBCIJob job = handle.newJob(REQNAME_INFOLIST);
job.addToQueue();
//execute job queue:
HBCIExecStatus status = handle.execute(); //execute all HBCI jobs
if (!status.isOK()) {
LOGGER.severe("HBCI error status: "+status.getErrorString());
}
} finally {
if (handle != null) { handle.close(); };
if (passport != null) { passport.close(); };
}
Mangels Dokumentation und Beispiel habe ich diesen Code Stück für Stück zusammen geklebt, aber egal welche ...HBCIPassport...getInstance() Methode ich Aufrufe, ich erhalte stets die Fehlermeldung
InvalidUserDataException: Passwort darf nicht leer sein
Bei "Anonymous" sollte ja kein Benutzer/Passwort angegeben werden müssen. Ich habe auch keine Properties gefunden um solche Daten bei Anonymous anzugeben. Welches Passwort sollte da auch gesetzt werden (...?).
Wie verwender man den "Anonymous" Zugang vollständig und korrekt um wie in Javadoc zu HBCIPassportAnonymous
"Damit kann zumindest die Verfügbarkeit des HBCI-Servers bzw. von anonymen Zugängen überprüft werden."
Zu realisieren?
Ich habe heute auf Windows 10 Version 2004 aktualisiert.
Seitdem funktioniert mein Chipkartengerät (CyberJack Standard) nicht mehr. Will ich diesen nutzen, dann crasht die JVM.
Liegt anscheinend an der Datei hbci4java-card-win32_x86-64.dll
Siehe Logdatei:
Hallo,
ich bin beim Einbinden von Comdirekt-Kreditkartenkonten in Hibiscus über diese beiden Foren gestolpert:
https://scripting-forum.derrichter.de/viewtopic.php?t=294
https://homebanking-hilfe.de/forum/topic.php?t=18733
Wenn ich die Diskussion richtig verstehe wäre dieses Projekt hier der korrekte Weg eine Unterstützung für Hibiscus zu implementieren? Ich erstelle diesen Issue, da ich hier bisher keinen zu diesem Thema gefunden habe.
Falls daran Interesse besteht kann ich gerne meine Unterstützung anbieten. Ich habe selbst grundlegende Java-Kenntnisse und hätte ein passendes privates Konto zum Testen.
Vielen Dank für die sehr hilfreiche Software, die hier bereits erstellt wurde und viele Grüße,
Michael
Hello,
we upgraded to Java 17 and new jaxb libraries.
We now get the following exception:
2022-08-11T09:31:52.119+02:00 ERROR InvoiceDownloadServlet: Implementation of JAXB-API has not been found on module path or classpath.
javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ContextFinder.find(ContextFinder.java:421) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662) ~[jaxb-api-2.3.1.jar:2.3.0]
at org.kapott.hbci.GV.generators.AbstractSEPAGenerator.marshal(AbstractSEPAGenerator.java:43) ~[hbci4j-core-3.1.37.jar:3.1.37]
at org.kapott.hbci.GV.generators.GenLastSEPA00800302.generate(GenLastSEPA00800302.java:161) ~[hbci4j-core-3.1.37.jar:3.1.37]
at org.kapott.hbci.GV.generators.GenLastSEPA00800302.generate(GenLastSEPA00800302.java:56) ~[hbci4j-core-3.1.37.jar:3.1.37]
at com.xxxxx.downloadSepaXml(InvoiceDownloadServlet.java:200) [classes/:?]
....
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1444) ~[catalina.jar:10.0.18]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252) ~[catalina.jar:10.0.18]
at javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) ~[jaxb-api-2.3.1.jar:2.3.0]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276) ~[jaxb-api-2.3.1.jar:2.3.0]
The jar file jaxb-impl-2.3.6.jar does contain the package com.sun.xml but the newer versions like 3.x or 4.x doesn't.
It seems the old sun implementation is somewhere references and not the new glassfish impl.
Any help would be appreciated how to fix this reference.
Thanks a lot!
Ich greife mittels des Beispiels in UmsatzAbrufPinTan.java auf eine Bank zu, bei der es Probleme beim Erstellen des HBCIHandlers gibt:
org.kapott.hbci.exceptions.HBCI_Exception: message is expected to be encrypted
9955:Ein-Schritt-TAN-Verfahren nicht zugelassen
9800:Dialog abgebrochen.
3060:Teilweise liegen Warnungen vor.
Den Fehler bzgl. der Encryption sehe ich sehr häufig, daher vermute ich, dass der eigentlich Fehler in der zweiten Zeile (Fehler 9955) steckt -- ist die Vermutung korrekt?
Unterstützt HBCI4Java hier ein von der Bank benötigtes Feature nicht oder muss ich den Zugriff anders gestalten?
I tried to build the project with
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T17:41:47+01:00)
Maven home: /home/asbachb/dev/bin/apache-maven-3
Java version: 11.0.1, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-11-openjdk
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "4.19.12-arch1-1-arch", arch: "amd64", family: "unix"
which failed:
mvn clean package
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 1 modules...
[INFO] Installing Nexus Staging features:
[INFO] ... total of 1 executions of maven-deploy-plugin replaced with nexus-staging-maven-plugin
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building hbci4j-core 3.0.22-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ hbci4j-core ---
[INFO] Deleting /home/asbachb/dev/extsrc/java/hbci4java/target
[INFO]
[INFO] --- maven-jaxb22-plugin:0.13.2:generate (camt.052.001.07) @ hbci4j-core ---
[WARNING] The POM for org.glassfish.jaxb:jaxb-runtime:jar:2.2.11 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.glassfish.jaxb:jaxb-core:jar:2.2.11 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.glassfish.jaxb:txw2:jar:2.2.11 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.glassfish.jaxb:jaxb-xjc:jar:2.2.11 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for org.glassfish.jaxb:codemodel:jar:2.2.11 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for com.sun.xml.bind.external:rngom:jar:2.2.11 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[WARNING] The POM for com.sun.istack:istack-commons-tools:jar:2.21 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details
[INFO] Up-to-date check for source resources [[file:/home/asbachb/dev/extsrc/java/hbci4java/src/main/resources/camt.052.001.07.xsd, file:/home/asbachb/dev/extsrc/java/hbci4java/pom.xml]] and target resources [[]].
[INFO] Sources are not up-to-date, XJC will be executed.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.492 s
[INFO] Finished at: 2018-12-24T15:18:17+01:00
[INFO] Final Memory: 14M/54M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb22-plugin:0.13.2:generate (camt.052.001.07) on project hbci4j-core: Execution camt.052.001.07 of goal org.jvnet.jaxb2.maven2:maven-jaxb22-plugin:0.13.2:generate failed: Prefix '' is already bound to '' -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
Bei einer SEPA Lastschrift in Drittstatten (wie Schweiz und seit dem Brexit eventuell auch UK) muss man laut Sepa Abkommen die Adresse des Schuldners angeben. Dazu stehen zwei Adresszeilen mit max 70 Zeichen und die Angabe des Landes zur Verfügung.
https://groups.google.com/g/hbci4java/c/shoSh1Oo8eo/m/76t3QRy2BQAJ?pli=1
Es wäre schön, wenn in der readme.md auch kurz beschrieben wäre, wie ich das Projekt in Eclipse importieren kann bzw. die Eclipse-Meta-Dateien generieren kann, da diese ja jetzt nicht mehr eingecheckt sind.
Ich benutzte HBCI4Java in einer Server Umgebung mit Hilfe des ThreadedCallbacks Mechanismus (hier beschrieben), um Callbacks der Bank an den Client weiter zu leiten, welcher dann die entsprechende Information übergibt (TAN-Verfahren, TAN, Security Mechanism, etc.)
Wie es in diesem Kommentar beschrieben ist, kann es bei Callback Gründen vorkommen, dass die "echte" Callback Methode aufgerufen wird, anstatt die Threaded Variante, weil der callback nicht von der execute()
Methode, sondern via z.B.: new HBCIHandler()
erzeugt wurde.
Dieses Verhalten ist mir bereits aufgefallen bei den Callback Gründen NEED_USERID
und NEED_PT_PIN
, jedoch war es dort kein Problem, da ich dieses Daten sowieso mit dem initialen Client Aufruf mitschicke, und demnach schon bereit stehen habe.
Jetzt gerade habe ich jedoch eine Kontostandsabfrage über einen Online Banking Zugang der Sparkasse mit dem ChipTAN Verfahren machen wollen, und gemerkt, dass der Callback Grund NEED_PT_SECMECH
ebenfalls nicht von execute()
erzeugt wird, und demnach in der normalen Callback Methode behandelt wird, und nicht in der ThreadedCallback Methode.
NEED_PT_SECMECH retData: 910:chipTAN manuell|911:chipTAN optisch|912:chipTAN-USB|913:chipTAN-QR
Da in den Daten dieses Callbacks die möglichen Security Mechanismen enthalten sind, habe ich keine Möglichkeit die Antwort auf dieses Callback mit der initialen Client Anfrage mitzuschicken. Ich würde für diesen Callback Grund gerne die Execution pausieren, den Client nach der Präferenz fragen, und nach einer Antwort wieder continueThreaded()
aufrufen. Aber so wie es jetzt steht, scheint das nicht Möglich zu sein.
Nach dem oben verlinkten Kommentar scheint der Threading Mechanismus für Erzeuger welche nicht execute()
waren ja geplant zu sein. Gibt es dafür einen groben Zeitraum, oder andere Pläne dieses Problem zu beheben?
Beim Generieren von Lastschriften in openjverein wird über einen Dialog, der von Hibiscus implementiert ist, der User zur Auswahl der SEPA XML Version (Pain 008) aufgefordert.
Der Dialog bietet alle 008 Versionen an. 8.001.10 wird als greatest geliefert und per Default angezeigt. Als unbedarfter User klickt man wahrscheinlich gleich weiter und nimmt an, dass der Default schon passen wird.
Ich habe gelesen, dass 8.001.10 das Format für die Antwort des Servers zum Client ist. Das neueste Format für den Client Request zum Server ist die 8.001.08.
Jverein sollte also die 8.001.10 gar nicht anbieten. Nun könnte man das in openjverein abfangen.
Wäre es nicht sinnvoll in SepaVersion.java Methoden einzubauen welche entweder nur Client Versionen zurückgeben oder Filter Methoden die aus einer Liste die Client Versionen herausfiltern.
Oder anders gefragt, wenn hbci4java evtl. sowieso nur für Clients gedacht ist, könnte man die Versionen für Server ganz weglassen.
Liebe Entwickler,
ich habe meinen Bankimport nach der PSD2 Änderung auf PhotoTan umgestellt. Leider funktioniert das erzeugen, des HBCIHandler Objektes nicht mehr.
Der komplette Log:
error.log
Meine Callback-Klasse:
public void callback(HBCIPassport passport, int reason, String msg, int datatype, StringBuffer retData)
{
// Diese Funktion ist wichtig. Ueber die fragt HBCI4Java die benoetigten Daten von uns ab.
switch (reason)
{
// Mit dem Passwort verschluesselt HBCI4Java die Passport-Datei.
// Wir nehmen hier der Einfachheit halber direkt die PIN. In der Praxis
// sollte hier aber ein staerkeres Passwort genutzt werden.
// Die Ergebnis-Daten muessen in dem StringBuffer "retData" platziert werden.
case NEED_PASSPHRASE_LOAD:
case NEED_PASSPHRASE_SAVE:
retData.replace(0,retData.length(),pin);
break;
// PIN wird benoetigt
case NEED_PT_PIN:
log.debug("NEED_PT_PIN");
MatrixCode matrixCode = MatrixCode.tryParse(retData.toString());
log.debug(retData.toString());
if(matrixCode != null) {
log.debug("Was phototan request in PIN!");
}
retData.replace(0,retData.length(),pin);
break;
// BLZ wird benoetigt
case NEED_BLZ:
retData.replace(0,retData.length(),blz);
break;
// Die Benutzerkennung
case NEED_USERID:
log.debug("NEED_USERID");
retData.replace(0,retData.length(),user);
break;
// Die Kundenkennung. Meist identisch mit der Benutzerkennung.
// Bei manchen Banken kann man die auch leer lassen
case NEED_CUSTOMERID:
log.debug("NEED_CUSTOMERID");
retData.replace(0,retData.length(),user);
break;
// Manche Fehlermeldungen werden hier ausgegeben
case HAVE_ERROR:
log.error(msg);
break;
case NEED_HOST:
log.debug("NEED_HOST");
break;
case NEED_PT_PHOTOTAN:
log.debug("NEED_PT_PHOTOTAN");
matrixCode = MatrixCode.tryParse(retData.toString());
try {
log.debug("photo type: {}", matrixCode.getMimetype());
FileUtils.writeByteArrayToFile(new File("phototan.jpg"), matrixCode.getImage());
} catch (IOException e) {
log.debug("Error writing phototan: {}", e.getMessage());
}
retData.replace(0,retData.length(),"");
break;
case NEED_PT_SECMECH:
log.debug("NEED_PT_SECMECH");
// 901:mobileTAN-Verfahren|902:photoTAN-Verfahren
retData.replace(0, retData.length(), "902");
break;
default:
log.debug("NEED SOMETHING ELSE!!");
log.debug("{}", reason);
// Wir brauchen nicht alle der Callbacks
break;
}
}
Funktionen zum Bauen des Handlers:
private HBCIHandler buildHandler() {
setProperties();
HBCIPassport passport = buildPassport();
return new HBCIHandler(VERSION.getId(), passport);
}
private void setProperties() {
Properties properties = new Properties();
HBCIUtils.init(properties, new HBCICallback(user, pin, blz));
final File passportFile = new File("passport.dat");
HBCIUtils.setParam("client.passport.default","PinTan"); // Legt als Verfahren PIN/TAN fest.
HBCIUtils.setParam("client.passport.PinTan.filename",passportFile.getAbsolutePath());
HBCIUtils.setParam("client.passport.PinTan.init","1");
}
private HBCIPassport buildPassport() {
HBCIPassport passport = AbstractHBCIPassport.getInstance();
passport.setCountry("DE");
BankInfo info = HBCIUtils.getBankInfo(blz);
passport.setHost(info.getPinTanAddress());
passport.setPort(443);
passport.setFilterType("Base64");
return passport;
}
Die Frage ist: Was mache ich falsch? Ich bin bei der comdirect und habe dort schon über Probleme gelesen und daher auf Version 3.1.13 des hbci4j-core geupdated.
Ich liefere gerne noch mehr Informationen!
Grüße
Die BIC und IBAN scheint nicht mehr im Passport gespeichert zu werden. Mit folgenden Schritten macht sich das hier bemerkbar:
Konto
-Objekt sind BIC und IBAN vorhanden. Konto.isSEPAAccount()
liefert true
.null
, und Konto.isSEPAAccount()
liefert false
.Ich verwende die Version 3.1.13. Mit der Version 3.0.8 hat das noch funktioniert, allerdings war diese anscheinend nicht PSD2-Kompatibel. Die Verbindung geht zur Sparkasse Köln/Bonn.
Den Kontoauszug kann ich trotzdem abholen. Ich weiß allerdings nicht, ob Konto.bic
und Konto.iban
für SEPA-Lastschriften und SEPA-Überweisungen benötigt werden. Oder kann man das Problem einfach ignorieren?
Ich habe HBCI4Java erfolgreich mit der Sparkasse und Postbank benutzen können, jedoch stürzt jeder Verbindungsversuch mit einem Konto bei der Deutschen Bank wie folgt ab:
org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
at snapshot.war//org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:141)
[ ... ]
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Registrieren der Nutzerdaten
at snapshot.war//org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:169)
at snapshot.war//org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
... 85 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Ermitteln einer neuen System-ID
at snapshot.war//org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:462)
at snapshot.war//org.kapott.hbci.manager.HBCIUser.sync(HBCIUser.java:656)
at snapshot.war//org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:704)
at snapshot.war//org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:167)
... 86 more
Caused by: org.kapott.hbci.exceptions.ProcessException: Fehler beim Ermitteln einer neuen System-ID
at snapshot.war//org.kapott.hbci.dialog.HBCIDialogSync.checkResult(HBCIDialogSync.java:125)
at snapshot.war//org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
at snapshot.war//org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:441)
... 89 more
Wenn ich mit Absicht eine falsche Pin für unsere UserID der DB benutze bekomme ich eine entsprechende Fehlermeldung der Bank zurück. Die Login Daten sind also definitiv richtig.
Als HBCIVersion benutze ich 3.0. Unten ist noch ein Ausschnitt meines Codes. Wir benutzen Threaded HBCI Callbacks, falls das relevant ist.
[ ... ]
HBCIUtils.init(new Properties(), new HBCICallbackThreaded(new MyThreadedHBCICallback()));
HBCIUtils.setParam("client.passport.default", "PinTan");
HBCIUtils.setParam("client.passport.PinTan.init", "1");
HBCIUtils.setParam("client.passport.PinTan.filename", getPassportFilename());
HBCIPassport passport = AbstractHBCIPassport.getInstance("PinTan");
passport.setCountry("DE");
passport.setHost(HBCIUtils.getBankInfo(iban.getBankCode()).getPinTanAddress());
passport.setBLZ(iban.getBankCode());
passport.setPort(443);
passport.setFilterType("Base64");
HBCIHandler handle = new HBCIHandler(HBCIVersion.HBCI_300.getId(), passport);
HBCIJob job = handle.newJob("SaldoReq");
job.setParam("my.blz", iban.getBankCode());
job.setParam("my.number", iban.getAccountNumber());
job.addToQueue();
[ ... ]
I’m planning to create module name PaymentIntegration will be as integration between cheques system and bank side the aim this project to generate XML file depends on the request type there basically two types
1- Payment Initiation (pain.008)
2- Payments Clearing and Settlement (pacs.003)
https://github.com/salesking/sepa_king/blob/master/spec/examples/pain.008.003.02.xml
https://www.iso20022.org/sites/default/files/documents/messages/pacs/schemas/pacs.003.001.07.xsd
I ‘didn’t find any Java API to generate like these XML , there any suggest to start implementation this project also I will development using spring boot framework
[ 3s] + cd hbci4java-hbci4j-core-3.0.10
[ 3s] + JAVA_HOME=/usr/lib64/jvm/java
[ 3s] + ant
[ 3s] Buildfile: /home/abuild/rpmbuild/BUILD/hbci4java-hbci4j-core-3.0.10/build.xml
[ 3s]
[ 3s] compile:
[ 4s] [javah] Error: Could not find class file for 'org.kapott.hbci.passport.HBCIPassportDDV'.
[ 4s]
[ 4s] BUILD FAILED
[ 4s] /home/abuild/rpmbuild/BUILD/hbci4java-hbci4j-core-3.0.10/build.xml:11: compilation failed
😞
Leider funktioniert mvn
nicht unter build.opensuse.org so dass ich auf das build.xml
angewiesen bin. Lässt es sich wieder restaurieren?
Beim Parsen von KInfo6 innerhalb von hbci-300.xml wird die iban direkt als Kindelement in die KInfo geschrieben.
Sie wird im weiteren Programmablauf aber innerhalb des KTV-Blocks im KInfo erwartet, wie bei KInfo5, siehe z.B. AbstractHBCIPassport:249 entry.iban=upd.getProperty(header+".KTV.iban");
Insofern führt das Parsen von KInfo6 dazu, dass die iban an der falschen Stelle steht und damit nicht erkannt wird.
The connection to ING-DiBa fails, probably since they have switched to PSD2 procedure.
private final static HBCIVersion VERSION = HBCIVersion.HBCI_PLUS;
public static void main(String[] args) throws Exception {
Properties props = new Properties();
HBCIUtils.init(props, new HBCICallbackConsole());
HBCIPassport passport = new HBCIPassportPinTanMemory(null);
passport.setHost(HBCIUtils.getBankInfo(BLZ).getPinTanAddress());
HBCIHandler handle = null;
try {
handle = new HBCIHandler(VERSION.getId(), passport);
Konto[] accounts = passport.getAccounts();
System.out.println(Arrays.toString(accounts));
} finally {
if (handle != null) {
handle.close();
}
}
}
Versende HBCI-Nachricht
Sende HBCI-Nachricht: HNHBK:1:3+000000000125+220+0+1'HKIDN:2:2+280:50010517+9999999999+0+0'HKVVB:3:2+0+0+0+36792786FA12F235F04647689+3'HNHBS:4:1+1'
Warte auf Antwortdaten
HBCI-Nachricht empfangen: HNHBK:1:3+000000000201+220+000006GOR2B41NDC62T81JJPMOCIT5+1+000006GOR2B41NDC62T81JJPMOCIT5:1'HIRMG:2:2:+9800::Der Dialog wurde abgebrochen.+9400::Der anonyme Dialog wird nicht unterstützt.'HNHBS:3:1+1'
Lese empfangene Antwortnachricht (CryptedRes))
Lese empfangene Antwortnachricht (DialogInitAnonRes))
HBCI-Nachricht empfangen und entschlüsselt: HNHBK:1:3+000000000201+220+000006GOR2B41NDC62T81JJPMOCIT5+1+000006GOR2B41NDC62T81JJPMOCIT5:1'HIRMG:2:2+9800::Der Dialog wurde abgebrochen.+9400::Der anonyme Dialog wird nicht unterstützt.'HNHBS:3:1+1'
[2021.04.28 16:18:39.020] [main/main] status.HBCIStatus: Meldung der Bank: 9800:Der Dialog wurde abgebrochen.
[2021.04.28 16:18:39.020] [main/main] status.HBCIStatus: Meldung der Bank: 9400:Der anonyme Dialog wird nicht unterstützt.
Überprüfe Signatur der Antwortnachricht
Erzeuge HBCI-Nachricht DialogEndAnon
Versende HBCI-Nachricht
Sende HBCI-Nachricht: HNHBK:1:3+000000000055+220+0+2'HKEND:2:1+0'HNHBS:3:1+2'
Warte auf Antwortdaten
HBCI-Nachricht empfangen: HNHBK:1:3+000000000165+220+unbekannt+9999+unbekannt:9999'HIRMG:2:2:+9800::Der Dialog wurde abgebrochen.+9110::Unbekannter Aufbau der Kundennachricht.'HNHBS:3:1+9999'
Lese empfangene Antwortnachricht (CryptedRes))
Lese empfangene Antwortnachricht (DialogEndAnonRes))
HBCI-Nachricht empfangen und entschlüsselt: HNHBK:1:3+000000000165+220+unbekannt+9999+unbekannt:9999'HIRMG:2:2+9800::Der Dialog wurde abgebrochen.+9110::Unbekannter Aufbau der Kundennachricht.'HNHBS:3:1+9999'
[2021.04.28 16:18:39.152] [main/main] status.HBCIStatus: Meldung der Bank: 9800:Der Dialog wurde abgebrochen.
[2021.04.28 16:18:39.152] [main/main] status.HBCIStatus: Meldung der Bank: 9110:Unbekannter Aufbau der Kundennachricht.
[2021.04.28 16:18:39.152] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:428)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:176)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.sendData(AbstractRawHBCIDialog.java:123)
at org.kapott.hbci.dialog.HBCIDialogEnd.sendData(HBCIDialogEnd.java:95)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:96)
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:283)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:373)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:153)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:131)
at io.levitin.hbci.Diba.main(Diba.java:42)
Dialog beendet
status: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
9800:Der Dialog wurde abgebrochen.
9110:Unbekannter Aufbau der Kundennachricht.
[2021.04.28 16:18:39.152] [main/main] dialog.HBCIDialogEnd: dialog end failed: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
9800:Der Dialog wurde abgebrochen.
9110:Unbekannter Aufbau der Kundennachricht.
[2021.04.28 16:18:39.152] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.ProcessException: Dialog-Ende fehlgeschlagen
at org.kapott.hbci.dialog.HBCIDialogEnd.checkResult(HBCIDialogEnd.java:124)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:283)
at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:373)
at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:153)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:131)
at io.levitin.hbci.Diba.main(Diba.java:42)
[2021.04.28 16:18:39.152] [main/main] manager.HBCIInstitute: fetching BPD failed: 9800:Der Dialog wurde abgebrochen.
9400:Der anonyme Dialog wird nicht unterstützt.
Callback für Passport mit Init-Daten: null
Sie können die Internetverbindung jetzt beenden
drücken, um fortzufahren
[2021.04.28 16:18:40.404] [main/main] manager.HBCIInstitute: can not check if requested parameters are supported
hole neue System-ID
Erzeuge HBCI-Nachricht Synch
[2021.04.28 16:18:40.407] [main/main] protocol.MSG: could not insert the following user-defined data into message: Synch.TAN2Step6.process=4
[2021.04.28 16:18:40.407] [main/main] protocol.MSG: could not insert the following user-defined data into message: Synch.TAN2Step6.ordersegcode=HKIDN
[2021.04.28 16:18:40.407] [main/main] protocol.MSG: could not insert the following user-defined data into message: Synch.TAN2Step6=requested
signiere HBCI-Nachricht
Callback für Passport mit Init-Daten: null
Bitte geben Sie die PIN für das PIN/TAN-Verfahren ein: xxxxxxxxxx
[2021.04.28 16:18:45.810] [main/main] passport.HBCIPassportPinTan: the job with the code HNSHK seems not to be allowed with PIN/TAN
[2021.04.28 16:18:45.810] [main/main] passport.HBCIPassportPinTan: the job with the code HKIDN seems not to be allowed with PIN/TAN
[2021.04.28 16:18:45.811] [main/main] passport.HBCIPassportPinTan: the job with the code HKVVB seems not to be allowed with PIN/TAN
[2021.04.28 16:18:45.812] [main/main] passport.HBCIPassportPinTan: the job with the code HKSYN seems not to be allowed with PIN/TAN
Verschlüssele HBCI-Nachricht
[2021.04.28 16:18:45.814] [main/main] protocol.MSG: could not insert the following user-defined data into message: Crypted.CryptHead.SecProfile.method=PIN
[2021.04.28 16:18:45.814] [main/main] protocol.MSG: could not insert the following user-defined data into message: Crypted.CryptHead.SecProfile.version=1
Callback für Passport mit Init-Daten: null
Bitte stellen Sie jetzt die Verbindung zum Internet her
drücken, um fortzufahren
Versende HBCI-Nachricht
Sende HBCI-Nachricht: HNHBK:1:3+000000000384+220+0+1'HNVSK:998:2+998+1+1::0+1:20210428:161845+2:2:13:@8@ :5:1+280:50010517:xxxxxxxxxx:V:0:0+0'HNVSD:999:1+@227@HNSHK:2:3+999+1958439477+1+1+1::0+1+1:20210428:161840+1:999:1+6:10:16+280:50010517:xxxxxxxxxx:S:0:0'HKIDN:3:2+280:50010517+xxxxxxxxxx+0+1'HKVVB:4:2+0+0+0+36792786FA12F235F04647689+3'HKSYN:5:2+0'HNSHA:6:1+1958439477++xxxxxxxxxx''HNHBS:7:1+1'
Warte auf Antwortdaten
HBCI-Nachricht empfangen: HNHBK:1:3+000000001596+220+000006GOR2SVL38T4NJBB70723MNHI+1+000006GOR2SVL38T4NJBB70723MNHI:1'HNVSK:998:2+998+1+2::0+1+2:2:13:@8@ :6:1+280:50010517:xxxxxxxxxx:V:0:0+0'HNVSD:999:1+@1391@HIRMG:2:2:+3060::Teilweise liegen Warnungen/Hinweise vor.'HIRMS:3:2:3+0020::Angemeldet.'HIRMS:4:2:4+0020::Informationen fehlerfrei entgegengenommen.+3050::BPD nicht mehr aktuell. Aktuelle Version folgt.+3920::Zugelassene Ein- und Zwei-Schritt-Verfahren für den Benutzer:900'HIRMS:5:2:5+0020::Die Synchronisierung der Kundensystem-ID war erfolgreich.'HIBPA:6:2:4+7+280:50010517+ING-DiBa+0+1+220:300+200'HIKOM:7:3:4+280:50010517+1+3:https?://fints.ing-diba.de/fints/'HISPAS:8:1:4+1+1+0+J:J:J:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03'HIPAES:9:1:4+1+1+0'HICCSS:10:1:4+1+1+0'HITANS:11:1:4+1+1+0+J:N:0:0:900:2:iTAN:iTAN:6:1:Index:3:1:N:N'HIKAZS:12:5:4+1+1+390:N:N'HICDNS:13:1:4+1+1+1+0:1:360:J:J:J:J:J:N:N:N:J:00:00::0'HICSBS:14:1:4+1+1+0+N:N'HICSAS:15:1:4+1+1+0+1:360'HIWPDS:16:6:4+1+1+0+N:N:N'HIWPDS:17:5:4+1+1+N:N:N'DIPAES:18:1:4+1+1'HICDLS:19:1:4+1+1+1+1:360:N:J'HIPROS:20:3:4+1+1'HICSES:21:1:4+1+1+0+1:360'HICSLS:22:1:4+1+1+0+J'HICDBS:23:1:4+1+1+0+N'HISALS:24:5:4+1+1'HICDES:25:1:4+1+1+1+4:1:360:00:00::0'DIPINS:26:1:4+1+1+HKSPA:N:HKPAE:J:HKCCS:J:HKTAN:N:HKKAZ:N:HKCDN:J:HKCSB:N:HKCSA:J:HKWPD:N:DKPAE:J:HKCDL:J:HKPRO:N:HKCSE:J:HKCSL:J:HKCDB:N:HKSAL:N:HKCDE:J'HIPINS:27:1:4+1+1+0+5:10:6:Kontonummer::HKSPA:N:HKPAE:J:HKCCS:J:HKTAN:N:HKKAZ:N:HKCDN:J:HKCSB:N:HKCSA:J:HKWPD:N:DKPAE:J:HKCDL:J:HKPRO:N:HKCSE:J:HKCSL:J:HKCDB:N:HKSAL:N:HKCDE:J'HISYN:28:3:5+000006GOR2T4D4VOCV9LOK35FFF5EJ''HNHBS:29:1+1'
Lese empfangene Antwortnachricht (CryptedRes))
Entschlüssele Antwortnachricht
HBCI-Nachricht empfangen und entschlüsselt: HNHBK:1:3+000000001596+220+000006GOR2SVL38T4NJBB70723MNHI+1+000006GOR2SVL38T4NJBB70723MNHI:1'HIRMG:2:2:+3060::Teilweise liegen Warnungen/Hinweise vor.'HIRMS:3:2:3+0020::Angemeldet.'HIRMS:4:2:4+0020::Informationen fehlerfrei entgegengenommen.+3050::BPD nicht mehr aktuell. Aktuelle Version folgt.+3920::Zugelassene Ein- und Zwei-Schritt-Verfahren für den Benutzer:900'HIRMS:5:2:5+0020::Die Synchronisierung der Kundensystem-ID war erfolgreich.'HIBPA:6:2:4+7+280:50010517+ING-DiBa+0+1+220:300+200'HIKOM:7:3:4+280:50010517+1+3:https?://fints.ing-diba.de/fints/'HISPAS:8:1:4+1+1+0+J:J:J:urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.003.03'HIPAES:9:1:4+1+1+0'HICCSS:10:1:4+1+1+0'HITANS:11:1:4+1+1+0+J:N:0:0:900:2:iTAN:iTAN:6:1:Index:3:1:N:N'HIKAZS:12:5:4+1+1+390:N:N'HICDNS:13:1:4+1+1+1+0:1:360:J:J:J:J:J:N:N:N:J:00:00::0'HICSBS:14:1:4+1+1+0+N:N'HICSAS:15:1:4+1+1+0+1:360'HIWPDS:16:6:4+1+1+0+N:N:N'HIWPDS:17:5:4+1+1+N:N:N'DIPAES:18:1:4+1+1'HICDLS:19:1:4+1+1+1+1:360:N:J'HIPROS:20:3:4+1+1'HICSES:21:1:4+1+1+0+1:360'HICSLS:22:1:4+1+1+0+J'HICDBS:23:1:4+1+1+0+N'HISALS:24:5:4+1+1'HICDES:25:1:4+1+1+1+4:1:360:00:00::0'DIPINS:26:1:4+1+1+HKSPA:N:HKPAE:J:HKCCS:J:HKTAN:N:HKKAZ:N:HKCDN:J:HKCSB:N:HKCSA:J:HKWPD:N:DKPAE:J:HKCDL:J:HKPRO:N:HKCSE:J:HKCSL:J:HKCDB:N:HKSAL:N:HKCDE:J'HIPINS:27:1:4+1+1+0+5:10:6:Kontonummer::HKSPA:N:HKPAE:J:HKCCS:J:HKTAN:N:HKKAZ:N:HKCDN:J:HKCSB:N:HKCSA:J:HKWPD:N:DKPAE:J:HKCDL:J:HKPRO:N:HKCSE:J:HKCSL:J:HKCDB:N:HKSAL:N:HKCDE:J'HISYN:28:3:5+000006GOR2T4D4VOCV9LOK35FFF5EJ'HNHBS:29:1+1'
Lese empfangene Antwortnachricht (SynchRes))
Überprüfe Signatur der Antwortnachricht
[2021.04.28 16:18:48.272] [main/main] security.Sig: message has no signature
kreditinstituts-spezifische Daten erhalten - neue Version ist 7
neue System-ID erhalten - neue System-ID ist 000006GOR2T4D4VOCV9LOK35FFF5EJ
status: 3060:Teilweise liegen Warnungen/Hinweise vor.
3050:BPD nicht mehr aktuell. Aktuelle Version folgt. (4: Synch.ProcPrep)
3920:Zugelassene Ein- und Zwei-Schritt-Verfahren für den Benutzer p:900 (4: Synch.ProcPrep)
0020:Angemeldet. (3: Synch.Idn)
0020:Informationen fehlerfrei entgegengenommen. (4: Synch.ProcPrep)
0020:Die Synchronisierung der Kundensystem-ID war erfolgreich. (5: Synch.Sync)
Erzeuge HBCI-Nachricht DialogEnd
signiere HBCI-Nachricht
Verschlüssele HBCI-Nachricht
[2021.04.28 16:18:48.303] [main/main] protocol.MSG: could not insert the following user-defined data into message: Crypted.CryptHead.SecProfile.method=PIN
[2021.04.28 16:18:48.303] [main/main] protocol.MSG: could not insert the following user-defined data into message: Crypted.CryptHead.SecProfile.version=2
Versende HBCI-Nachricht
Sende HBCI-Nachricht: HNHBK:1:3+000000000416+220+000006GOR2SVL38T4NJBB70723MNHI+2'HNVSK:998:2+998+1+1::000006GOR2T4D4VOCV9LOK35FFF5EJ+1:20210428:161848+2:2:13:@8@ :5:1+280:50010517:xxxxxxxxxx:V:0:0+0'HNVSD:999:1+@201@HNSHK:2:3+900+991989140+1+1+1::000006GOR2T4D4VOCV9LOK35FFF5EJ+1+1:20210428:161848+1:999:1+6:10:16+280:50010517:xxxxxxxxxx:S:0:0'HKEND:3:1+000006GOR2SVL38T4NJBB70723MNHI'HNSHA:4:1+991989140++xxxxxxxxxx''HNHBS:5:1+2'
Warte auf Antwortdaten
HBCI-Nachricht empfangen: HNHBK:1:3+000000000247+220+000006GOR2SVL38T4NJBB70723MNHI+9999+000006GOR2SVL38T4NJBB70723MNHI:9999'HIRMG:2:2:+9800::Der Dialog wurde abgebrochen.+9400::Der Wechsel des Sicherheitsverfahrens während eines Dialoges ist nicht erlaubt.'HNHBS:3:1+9999'
Lese empfangene Antwortnachricht (CryptedRes))
Lese empfangene Antwortnachricht (DialogEndRes))
HBCI-Nachricht empfangen und entschlüsselt: HNHBK:1:3+000000000247+220+000006GOR2SVL38T4NJBB70723MNHI+9999+000006GOR2SVL38T4NJBB70723MNHI:9999'HIRMG:2:2+9800::Der Dialog wurde abgebrochen.+9400::Der Wechsel des Sicherheitsverfahrens während eines Dialoges ist nicht erlaubt.'HNHBS:3:1+9999'
[2021.04.28 16:18:48.471] [main/main] status.HBCIStatus: Meldung der Bank: 9800:Der Dialog wurde abgebrochen.
[2021.04.28 16:18:48.472] [main/main] status.HBCIStatus: Meldung der Bank: 9400:Der Wechsel des Sicherheitsverfahrens während eines Dialoges ist nicht erlaubt.
[2021.04.28 16:18:48.473] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:428)
at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:176)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.sendData(AbstractRawHBCIDialog.java:123)
at org.kapott.hbci.dialog.HBCIDialogEnd.sendData(HBCIDialogEnd.java:95)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:96)
at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:454)
at org.kapott.hbci.manager.HBCIUser.sync(HBCIUser.java:656)
at org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:704)
at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:167)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:132)
at io.levitin.hbci.Diba.main(Diba.java:42)
Dialog beendet
status: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
9800:Der Dialog wurde abgebrochen.
9400:Der Wechsel des Sicherheitsverfahrens während eines Dialoges ist nicht erlaubt.
[2021.04.28 16:18:48.474] [main/main] dialog.HBCIDialogEnd: dialog end failed: org.kapott.hbci.exceptions.HBCI_Exception: empfangene Nachrichtennummer (9999) im Nachrichtenkopf entspricht nicht der gesendeten Nachrichtennummer (2)
9800:Der Dialog wurde abgebrochen.
9400:Der Wechsel des Sicherheitsverfahrens während eines Dialoges ist nicht erlaubt.
[2021.04.28 16:18:48.475] [main/main] manager.HBCIUtils: org.kapott.hbci.exceptions.ProcessException: Dialog-Ende fehlgeschlagen
at org.kapott.hbci.dialog.HBCIDialogEnd.checkResult(HBCIDialogEnd.java:124)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:454)
at org.kapott.hbci.manager.HBCIUser.sync(HBCIUser.java:656)
at org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:704)
at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:167)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:132)
at io.levitin.hbci.Diba.main(Diba.java:42)
Callback für Passport mit Init-Daten: null
Sie können die Internetverbindung jetzt beenden
drücken, um fortzufahren
Exception in thread "main" org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:141)
at io.levitin.hbci.Diba.main(Diba.java:42)
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Registrieren der Nutzerdaten
at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:169)
at org.kapott.hbci.manager.HBCIHandler.(HBCIHandler.java:132)
... 1 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Ermitteln einer neuen System-ID
at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:462)
at org.kapott.hbci.manager.HBCIUser.sync(HBCIUser.java:656)
at org.kapott.hbci.manager.HBCIUser.register(HBCIUser.java:704)
at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:167)
... 2 more
Caused by: org.kapott.hbci.exceptions.ProcessException: Dialog-Ende fehlgeschlagen
at org.kapott.hbci.dialog.HBCIDialogEnd.checkResult(HBCIDialogEnd.java:124)
at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:454)
... 5 more
Process finished with exit code 1
The same code works fine for two other banks, but not more for ING.
The interesting thing is, in Hibiscus my data can still be accessed, although I see similar errors for ING in Hibiscus logs.
And yes, I tried connection with differenz HBCI Versions. Does anyone know a workaround for ING, with which one can get account data?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.