hbci4j / hbci4java

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

Anonymous: HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes" #83

Closed JDBC-0 closed 1 year ago

JDBC-0 commented 1 year ago

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?

JDBC-0 commented 1 year ago

Durch Ausgabe aller Callback Meldungen bin ich aus reason 22 (NEED_PASSPHRASE_SAVE) gestossen und habe dort explizit in reqData ein passphrase angegeben. Danach ging's weiter und es wurde ein passport Object erstellt. Allerdings dann mit anderem Fehler bei der Instantiierung des HBCIHandler Objektes:

"HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes"

willuhn commented 1 year ago

"HBCI_Exception: Fehler beim Erzeugen eines HBCIHandler Objektes"

Das ist nur ein Folgefehler. Ohne die konkreten Logausgaben kann man hier schlecht helfen.

BTW: Seit Einführung der PSD2 ist der anonyme Dialog bei vielen Banken gar nicht mehr möglich, weil bereits hier eine TAN erforderlich ist.

Ich schliesse das Ticket, weil es kein Issue in HBCI4Java ist. Wende dich für Support bitte an die Mailingliste unter https://groups.google.com/g/hbci4java