hbci4j / hbci4java

Java-based FinTS protocol implementation that supports all features (chipTAN, pushTAN, HHD, SEPA, PSD2,...)
GNU Lesser General Public License v2.1
147 stars 49 forks source link

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

Closed guyyst closed 3 years ago

guyyst commented 3 years ago

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();
[ ... ]
willuhn commented 3 years ago

Der Stacktrace sind alles nur Folgefehler. Poste mal bitte den gesamten Bereich der Kommunikation mit der Bank. Im Wiki unter https://www.willuhn.de/wiki/doku.php?id=support:list:banken:misc:pintan#deutsche_bank_maxblue findest du Hinweise zu den Einstellungen für diese Bank.

guyyst commented 3 years ago

Unten ist nochmal der gesamte Stacktrace. Den Wiki Artikel kannte ich noch nicht, das ist sehr hilfreich. Leider folgen wir all den Instruktionen für die Deutsche Bank bereits. HBCI Plus ist auch im Online Banking Portal der DB aktiviert. Wir antworten auch auf sowohl NEED_CUSTOMERID und NEED_USERID mit der Filial+Konto+Unterkonto Nummer, und die BLZ wird aus der IBAN des Kontos erlesen. Also die Daten sollten alle richtig sein.

Gerade habe ich auch einmal Hibiscus installiert, und das DB Konto dort ausprobiert. Beim aller ersten mal habe ich eine sehr ähnliche Fehlermeldung wie in meinem eigen Code bekommen, der Stacktrace ist auch unten angehängt. Leider ist jeder Versuch diesen Fehler in Hibiscus nochmal zu erzeugen gescheitert, und erneutes Anlegen der Bankverbindung hat immer funktioniert.


Hibiscus Stacktrace:

[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] creating a connection to https://fints.deutsche-bank.de:443/ and checking the certificate
[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] sending hbci message
[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] waiting for response message
[Wed Mar 03 20:19:40 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] waiting for response message
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] decrypting response message
[Wed Mar 03 20:19:41 CET 2021][ERROR][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] Meldung der Bank: 9050:Teilweise fehlerhaft. org.kapott.hbci.status.HBCIStatus.addRetVal(HBCIStatus.java:72)
[Wed Mar 03 20:19:41 CET 2021][ERROR][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] Meldung der Bank: 9099:Verarbeitung zur Zeit nicht möglich. (5: Synch.TAN2Step6) org.kapott.hbci.status.HBCIStatus.addRetVal(HBCIStatus.java:72)
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.status] verifying signature of response message
[Wed Mar 03 20:19:41 CET 2021][WARN][bg-task:][de.willuhn.jameica.hbci.HBCICallbackSWT.log] message has no signature
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.close] closing pin/tan passport
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.close] pin/tan passport closed
[Wed Mar 03 20:19:41 CET 2021][ERROR][bg-task:][de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.open] error while opening pin/tan passport
org.kapott.hbci.exceptions.HBCI_Exception: can not create HBCI handle
    at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:141)
    at de.willuhn.jameica.hbci.passports.pintan.server.PassportHandleImpl.open(PassportHandleImpl.java:180)
    at de.willuhn.jameica.hbci.gui.action.PassportSync$1.run(PassportSync.java:81)
    at de.willuhn.jameica.gui.GUI$7.run(GUI.java:1081)
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: can not register user
    at org.kapott.hbci.manager.HBCIHandler.registerUser(HBCIHandler.java:169)
    at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:132)
    ... 3 more
Caused by: org.kapott.hbci.exceptions.HBCI_Exception: error while fetching new sysid from institute
    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)
    ... 4 more
Caused by: org.kapott.hbci.exceptions.ProcessException: error while fetching new sysid from institute
    at org.kapott.hbci.dialog.HBCIDialogSync.checkResult(HBCIDialogSync.java:125)
    at org.kapott.hbci.dialog.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:106)
    at org.kapott.hbci.manager.HBCIUser.fetchSysId(HBCIUser.java:441)
    ... 7 more
[Wed Mar 03 20:19:41 CET 2021][INFO][bg-task:][de.willuhn.jameica.hbci.gui.action.PassportSync$1.run] test of passport failed: class org.kapott.hbci.exceptions.ProcessException: error while fetching new sysid from institute
[Wed Mar 03 20:19:41 CET 2021][WARN][bg-task:][de.willuhn.jameica.hbci.gui.DialogFactory.dirtyPINCache] mark pin cache dirty for all passports
[Wed Mar 03 20:19:41 CET 2021][INFO][Thread-10][de.willuhn.jameica.hbci.gui.action.PassportSync$2.run] log target removed
[Wed Mar 03 20:20:11 CET 2021][INFO][main][de.willuhn.jameica.gui.internal.parts.BackgroundTaskMonitor$1$1.run] auto closing monitor snapin

Gesamter eigener Stacktrace:

2021-03-01 14:21:06,270 INFO  [com.BankingSocket] (default task-206) Unhandled HBCI_Exception while processing client message.: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes
        at snapshot.war//org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:141)
        at snapshot.war//com.BankingFunctions.generateBankingProcess(BankingFunctions.java:85)
        at snapshot.war//com.BankingSocket.createResponse(BankingSocket.java:129)
        at snapshot.war//com.BankingSocket.onClientMessage(BankingSocket.java:79)
        at jdk.internal.reflect.GeneratedMethodAccessor672.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
        at org.jboss.as.weld.common@20.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.delegateInterception(Jsr299BindingsInterceptor.java:79)
        at org.jboss.as.weld.common@20.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:89)
        at org.jboss.as.weld.common@20.0.1.Final//org.jboss.as.weld.interceptors.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:102)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.jpa@20.0.1.Final//org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:252)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:388)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:158)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
        at org.jboss.weld.core@3.1.4.Final//org.jboss.weld.module.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:81)
        at org.jboss.as.weld.common@20.0.1.Final//org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:89)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:47)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:22)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ejb3@20.0.1.Final//org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:67)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
        at org.wildfly.security.elytron-private@1.12.1.Final//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:627)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
        at org.jboss.invocation@1.5.2.Final//org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:198)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:191)
        at org.jboss.as.ee@20.0.1.Final//org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:81)
        at snapshot.war//com.BankingSocket$$$view134.onClientMessage(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor672.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.annotated.BoundMethod.invoke(BoundMethod.java:87)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.annotated.AnnotatedEndpoint$2.onMessage(AnnotatedEndpoint.java:142)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.FrameHandler$7.run(FrameHandler.java:284)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:170)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.ServerWebSocketContainer$1.call(ServerWebSocketContainer.java:167)
        at io.undertow.servlet@2.1.3.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at org.wildfly.extension.undertow@20.0.1.Final//org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
        at org.wildfly.extension.undertow@20.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow@20.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow@20.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow@20.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow@20.0.1.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.ServerWebSocketContainer.invokeEndpointMethod(ServerWebSocketContainer.java:610)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.ServerWebSocketContainer$6.run(ServerWebSocketContainer.java:596)
        at io.undertow.websocket@2.1.3.Final//io.undertow.websockets.jsr.OrderedExecutor$ExecutorTask.run(OrderedExecutor.java:67)
        at org.jboss.threads@2.3.3.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
        at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at org.jboss.threads@2.3.3.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.base/java.lang.Thread.run(Thread.java:834)
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
willuhn commented 3 years ago

Die Bank sendet hier "9099:Verarbeitung zur Zeit nicht möglich. (5: Synch.TAN2Step6)". Also entweder hat sie tatsächlich eine technische Störung oder an den Einstellungen bzw. dem Verhalten deines Clients beim TAN-Handling stimmt was nicht. Wenn es in Hibiscus funktioniert, dann kann die Ursache nicht HBCI4Java sein.

willuhn commented 3 years ago

PS: Ich weiss nicht, was du mit "HBCIVersion 3.0" meinst. Die aktuelle Version von HBCI4Java ist 3.1.53 - siehe https://mvnrepository.com/artifact/com.github.hbci4j/hbci4j-core

guyyst commented 3 years ago

Mit HBCIVersion 3.0 hatte ich mich auf den Enum Wert HBCIVersion.HBCI_300 bezogen, sorry für's Missverständnis. HBCI4Java ist bei mir auf dem neusten Stand.


Ich habe mein Problem genauer untersuchen können, da ich vorher nicht dran gedacht hab die messages der überschriebenen log() Funktion in meinem HBCICallback auszugeben.

Damit habe ich herausgefunden, dass die grundlegende Ursache des Problems daher stammt, dass der Callback reason NEED_PT_PHOTOTAN nicht von execute(), sondern von new HBCIHandler() erzeugt wird (Wie in diesem Kommentar erklärt). Demnach muss eine Antwort sofort geliefert werden, und kann nicht zu einem späteren Zeitpunkt mit continueThreaded() bereitgestellt werden.

Das gleiche verhalten ist mir bereits bei anderen Callback Gründen, wie z.B. NEED_PT_SECMECH aufgefallen (daher mein anderes Github issue). Letztendlich war dieses Verhalten bei NEED_PT_SECMECH jedoch kein so großes Problem, da ich einfach einen Security Mechanisms als Standard wählen kann, ohne den User im Frontend zu fragen, und dann die Option anbiete den Prozess mit einem anderen Mechanismus erneut zu starten.

Die Tatsache, dass NEED_PT_PHOTOTAN nicht von einem Threaded Callback behandelt werden kann ist wesentlich problematischer. Ich muss das photoTAN Bild an das Frontend schicken um es dem User zu zeigen, und müsste dann mit der erhaltenen TAN im Backend den HBCI Process wieder aufnehmen.

Das erklärt auch warum Hibiscus keine Probleme mit der Deutschen Bank bzw. photoTAN hat, da es vermutlich nicht HBCICallbackThreaded verwendet, und alle Prozesse direkt im Client durchführt.


In dem oben verlinkten Kommentar steht, dass der Threading-Mechanismus nur 'im Moment' nicht für new HBCIHandler() verfügbar ist. Gibt es einen groben Zeitplan wann diese Funktionalität hinzugefügt wird, oder welche anderen Möglichkeiten es gäbe photoTAN in einer Client-Server Architektur zu benutzen?

willuhn commented 3 years ago

Damit habe ich herausgefunden, dass die grundlegende Ursache des Problems daher stammt, dass der Callback reason NEED_PT_PHOTOTAN nicht von execute(), sondern von new HBCIHandler() erzeugt wird

Ah. Vestehe. Dei ganze Problematik ist dann vermutlich durch PSD2 entstanden. Vorher kam es nur zu TAN-Abfragen, wenn HBCI-Geschäftsvorfälle ausgeführt werden.

Jetzt mit PSD2 ist ja u.U. bereits beim "Login" eine TAN erforderlich. Also noch bevor irgend ein fachlicher Geschäftsvorfall ausgeführt wurde. Dieses interne Bootstrapping des Bankzugangs passiert ja automatisch beim Erstellen des HBCI-Handlers. Und dort werden dann halt auch die TANs getriggert.

In dem oben verlinkten Kommentar steht, dass der Threading-Mechanismus nur 'im Moment' nicht für new HBCIHandler() verfügbar ist. Gibt es einen groben Zeitplan wann diese Funktionalität hinzugefügt wird,

Ich nehme an, du beziehst dich auf diesen Kommentar hier: https://github.com/hbci4j/hbci4java/blob/master/src/main/java/org/kapott/hbci/callback/HBCICallbackThreaded.java#L82

Der Kommentar stammt noch von Stefan Palme - dem ursprünglichen Autor von HBCI4Java. Der Kommentar ist mindestens 10 Jahre alt. Seit ich HBCI4Java 2011 geforkt habe, hab ich das Thema Threaded Callbacks nie weiter verfolgt, weil ich den Bedarf dafür nie hatte.

Aber wenn du schon so tief in die Materie eingestiegen bist, dass du die Ursache dafür gefunden hast, vielleicht findest du ja eine Lösung dafür, die ich als Patch übernehmen kann.

oder welche anderen Möglichkeiten es gäbe photoTAN in einer Client-Server Architektur zu benutzen?

Da hab ich leider auch keine Ideen. Ich hab das selbst nie so verwendet.

guyyst commented 3 years ago

Ich nehme an, du beziehst dich auf diesen Kommentar hier

Jep, falschen Link kopiert^^

Ok, aber das ist alles gut zu wissen. Ich schaue mir an was sich machen lässt um die anderen Callbacks auch in Threads abhandeln zu können.