Git Product home page Git Product logo

hbci4java's People

Contributors

asbachb avatar christof-b avatar cthomaidis avatar d0x7 avatar danielr1996 avatar f1ori avatar fmms avatar geesen avatar joscha avatar jspricke avatar jwolz avatar kicktipp avatar kjyv avatar komfortkasse avatar macemmi avatar machajdik avatar mwalliczek avatar oheim avatar oreineke avatar pmenke-de avatar ruderphilipp avatar shred avatar styppo avatar tbaum avatar tlei avatar willuhn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hbci4java's Issues

Anonymous: HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes"

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?

readme.md: Kurz-Anleitung zum Import in Eclipse

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.

Unterstützung für das CAMT Format

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

Support für PushTAN 2.0 (Decoupled Verfahren)

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.

Android Version

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

org.kapott.hbci.exceptions.ParseErrorException: Fehler beim Erzeugen eines Syntax-DEs für DialogInitRes.MsgHead.SegHead.code

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?

ant build Error: Could not find class file for 'org.kapott.hbci.passport.HBCIPassportDDV'.

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

KontoauszugPdf nicht in HBCIBatch unterstützt

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.

HBCIUtils#version() ändern, sodass die tatsächliche Versionsummer ausgegeben wird

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.

Fehler bei Comdirect photoTan

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?

Unable to connect to ING (50010517) (Fehler beim Ermitteln einer neuen System-ID

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

Selected pintan method not supported

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.

Unterstützung für verteilte Unterschriften per HBCI

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

  • Ist mein Stand noch aktuell?
  • Und was wäre notwendig (ggf. auch an finanziellen Ressourcen) um das zu implementieren? Zumindest in einer Orga wird derzeit EBICS eingesetzt und die Kosten sind enorm. Die würden wir uns gerne sparen und teilen die Ersparnis gerne, auch dauerhaft :)

Support HBCI-Geschäftsvorfälle DKKKU (Umsätze) und DKKKS (Saldo)

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

passport.getAccounts() enthält keine BIC/IBAN Informationen der Konten

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.

NEED_PT_TANMEDIA wird nicht im ThreadedCallback behandelt

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?

Crash nach Windows Update

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:

crash.log

Fachliche Fehlermeldungen der Bank gehen verloren

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?

SEPA Infos werden nicht abgerufen

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.

Proxy Einstellungen ignoriert

Verbindung mit Schlusseldiskette-Metode funktioniert nicht wenn Computer hinter dem Proxy server ist.
Proxy Einstellungen in Hibiscus sind einfach ignoriert.

ParseErrorException: CryptedRes.CryptHead.SegHead.code: vorgegebener Wert "HNVSK" stimmt nicht mit gefundenem Wert "HIRMG" überein

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

Ist hier die Nachricht von der Bank falsch aufgebaut, oder hat die Verabeitung der Lib einen Fehler?

Beste Grüße
Thimo Seitz

Saldo in GVKUmsAllCamt wird falsch fortgeschrieben, wenn es mehr als eine Nachricht gibt

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

Beispiel UmsatzAbrufPinTan funktioniert nicht

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.

image

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?

Failed to execute goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.13.2:generate (pain.001.001.02) on project hbci4j-core

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

Fehler nach Umstellung auf PSD2

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

Payment integration

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

PushTAN 2.0 (Decoupled) Dialog ended "erfolgreich" obwohl der Vorgang nicht in der App bestätigt wurde

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

Fehler beim Erstellen der URL in CommPinTan

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

Status Echtzeitueberweisungen?

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.

Customer's IBAN is being cut off at 27 characters

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

Problem bei Verbindung zur Deutschen Bank: 'Fehler beim Registrieren der Nutzerdaten'

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();
[ ... ]

BIC/IBAN wird nicht mehr gespeichert

Die BIC und IBAN scheint nicht mehr im Passport gespeichert zu werden. Mit folgenden Schritten macht sich das hier bemerkbar:

  • Ich lösche eine eventuell vorhandene Passport-Datei.
  • hbci4java generiert diese Datei bei der nächsten Transaktion neu. Im Konto-Objekt sind BIC und IBAN vorhanden. Konto.isSEPAAccount() liefert true.
  • Ab der darauf folgenden Transaktion sind die BIC und IBAN im Konto-Objekt allerdings null, und Konto.isSEPAAccount() liefert false.
  • Wenn ich die Passport-Datei lösche, ist die BIC und IBAN für die unmittelbar nächste Transaktion wieder vorhanden.

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?

Project cannot be packaged with java 11

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

Source vom Server?

Irre ich mich, oder fehlen die Sources vom Server? Kann man die irgendwo anders finden?

"Duplicate property key" in blz.properties: 75062026

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.

ING DiBa Connection

The connection to ING-DiBa fails, probably since they have switched to PSD2 procedure.

Here is a very simplified source code section
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();
            }
        }
    }
Log outputs Callback für Passport mit Init-Daten: null Bankleitzahl []: 50010517 Callback für Passport mit Init-Daten: null Länderkennzeichen (DE für Deutschland) [DE]: Callback für Passport mit Init-Daten: null Hostname/IP-Adresse [fints.ing.de/fints/]: Callback für Passport mit Init-Daten: null Portnummer (3000) [443]: Callback für Passport mit Init-Daten: null Komm.-Filter ("None"/"Base64") [Base64]: Callback für Passport mit Init-Daten: null Nutzerkennung []: xxxxxxxxxx Callback für Passport mit Init-Daten: null Kunden-ID [xxxxxxxxxx]: hole kreditinstituts-spezifische Daten Erzeuge HBCI-Nachricht DialogInitAnon [2021.04.28 16:18:36.561] [main/main] protocol.MSG: could not insert the following user-defined data into message: DialogInitAnon.TAN2Step6=requested [2021.04.28 16:18:36.577] [main/main] protocol.MSG: could not insert the following user-defined data into message: DialogInitAnon.TAN2Step6.ordersegcode=HKIDN [2021.04.28 16:18:36.577] [main/main] protocol.MSG: could not insert the following user-defined data into message: DialogInitAnon.TAN2Step6.process=4 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+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?

Neueste Version

Mit der neuesten Version funktioniert die Postbank, die Diba und die Norisbank nicht mehr.

ClassNotFoundException with newer jaxb-versions and java 17

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!

Client Pain Version

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.

Testumgebung mit Test HBCI Server erstellen

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

IBAN geht beim Parsen von KInfo6 verloren

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.

Unterstützung für SEPA Echtzeitüberweisung (HKIPZ)

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?

Eigenen Java Security Provider in Passport vorgeben

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.