Beispiel für Anonymen Abruf?

68 views
Skip to first unread message

MH

unread,
Sep 15, 2023, 9:32:01 AM9/15/23
to hbci4java
Hallo zusammen, 
leider gibt es im Quellcode nur das Beispiel "UmsatzAbrufPinTan". Ich benötige aber einen nicht interaktiven Zugang ohne PIN/TAN sondern B2B über Schlüsselaustausch.

Nun habe ich gelesen, daß man auch ohne solche Zugangsdaten Metadaten von einem HBCI Server über "Anonymous" abrufen kann. Das habe ich versucht und mi Code zusammengeklebt und Stück für Stück die Fehler nach und nach durch try and error gelöst. Jetzt hänge ich aber an folgendem Fehler:

---------------------------------------

INFORMATION: HBCI1: HBCI BLZ '70020270': msg=org.kapott.hbci.exceptions.HBCI_Exception: kann keine Kommunikations-Objekt des Typs Standard erzeugen

at org.kapott.hbci.comm.Comm.getInstance(Comm.java:137)

at org.kapott.hbci.passport.HBCIPassportAnonymous.getCommInstance(HBCIPassportAnonymous.java:307)

at org.kapott.hbci.passport.AbstractHBCIPassport.getComm(AbstractHBCIPassport.java:175)

at org.kapott.hbci.manager.HBCIKernelImpl.rawDoIt(HBCIKernelImpl.java:348)

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.AbstractRawHBCIDialog.execute(AbstractRawHBCIDialog.java:96)

at org.kapott.hbci.manager.HBCIInstitute.fetchBPD(HBCIInstitute.java:276)

at org.kapott.hbci.manager.HBCIInstitute.register(HBCIInstitute.java:373)

at org.kapott.hbci.manager.HBCIHandler.registerInstitute(HBCIHandler.java:282)

at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:171)

at org.kapott.hbci.manager.HBCIHandler.<init>(HBCIHandler.java:116)

at de.icomps.imp.ext.HBCI.test(HBCI.java:337)

at de.icomps.imp.ext.HBCI.startProcessing(HBCI.java:258)

at de.icomps.imp.ext.HBCI.main(HBCI.java:135)

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:77)

at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)

at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)

at org.kapott.hbci.comm.Comm.getInstance(Comm.java:135)

... 14 more

Caused by: org.kapott.hbci.exceptions.HBCI_Exception: Fehler beim Aufbau der Verbindung zum HBCI-Server

at org.kapott.hbci.comm.CommStandard.<init>(CommStandard.java:85)

... 20 more

Caused by: java.net.ConnectException: Connection timed out: connect

at java.base/sun.nio.ch.Net.connect0(Native Method)

at java.base/sun.nio.ch.Net.connect(Net.java:579)

at java.base/sun.nio.ch.Net.connect(Net.java:568)

at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)

at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)

at java.base/java.net.Socket.connect(Socket.java:633)

at java.base/java.net.Socket.connect(Socket.java:583)

at org.kapott.hbci.comm.CommStandard.<init>(CommStandard.java:80)

... 20 more, level=1, date=Fri Sep 15 15:12:42 CEST 2023, trace=org.kapott.hbci.manager.HBCIUtils.log(HBCIUtils.java:1613)

------------------------------------


Gibt es einen Beispielcode um von einer Bank per HBCI und Anonymous die Metadaten abzufragen? Mein letzter Versuch ist dieser: --------------------------------------------------

private final void test() {

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","iComps HBCI");

//HBCIUtils.setParam("client.product.version","2397"); //Länge muss zwischen 1 und 5 liegen


//HBCIUtils.setParam("client.passport.filename","HBCI_client.passport.file.txt");

//HBCIUtils.setParam("client.passport.init","1");

// //propsHBCI.put("client.passport.customerId", "testName";

//


BankInfo info = HBCIUtils.getBankInfo(blz);


//create authentication passport:

HBCIPassport passport = null;

HBCIUtils.setParam("client.passport.country", "DE");

HBCIUtils.setParam("client.passport.blz", blz);


//passport = AbstractHBCIPassport.getInstance(); //server and user identification

//passport = HBCIPassportAnonymous.getInstance();

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"); //might throw InvalidUserDataException: Passwort darf nicht leer sein

passport.setCountry("DE");

passport.setHost(hbciHost);

//passport.setHost(info.getPinTanAddress());

passport.setPort(hbciPort);

//passport.setFilterType("None");

passport.setFilterType("Base64"); //message encoding

//hbciVersion = passport.getHBCIVersion();

String[] hbciVersions = passport.getSuppVersions(); //get supported HBCI version

LOGGER.info("HBCI BLZ "+blz+": supported HBCI versions: "+hbciVersions);

String[] hbciLanguages = passport.getSuppLangs();

LOGGER.info("HBCI BLZ "+blz+": supported HBCI languages: "+hbciLanguages);

String[][] secMethods = passport.getSuppSecMethods();

LOGGER.info("HBCI BLZ "+blz+": supported HBCI security methods: "+secMethods);

String[][] compMethods = passport.getSuppCompMethods();

LOGGER.info("HBCI BLZ "+blz+": supported HBCI comp methods: "+compMethods);

//connect and get FinTS version:

HBCIHandler handle = null;

try {

handle = new HBCIHandler(hbciVersion, passport); //requires internet access with whitelisted HBCI server and port

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

}

}//test

--------------------------------------------------


Ohne ausführlichere Dokumentation und Beispiele ist es ziemlich frustrierend per try and error zu raten, wie die API zu bedienen ist. Gibt es eine Beispiel für solch einen HBCI Anonymous Zugriff? Danke schon im Voraus!

Reply all
Reply to author
Forward
0 new messages