API für getrennte Kundennr. & Kontonr. bei Deutsche Bank

 
dominik42
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 25
Dabei seit: 03 / 2009
Betreff:

API für getrennte Kundennr. & Kontonr. bei Deutsche Bank

 · 
Gepostet: 20.09.2009 - 00:22 Uhr  ·  #1
Hi,

dank diesen Tips hier läuft mein eigenes kleines HBCI4Java based Programm für SaldoReq und KUmsAll für unsere Volksbank-, Sparkassen- und Postbank-Konten prima ! Nun kommt noch ein Deutsche Bank Konto hinzu. Mit Hibiscus klappts, allerdings wurde dort, mit etwas Magie, die vollständige Kontoinformation bestehend aus Filiale (3 Ziffern), Kontonummer (7 Ziffern) und Unterkonto (2 Ziffern) aufgeteilt in Kundennummer (Filiale + Konto) und Kontonummer (nur Konto). Das sehe ich im Dialog Konto-Details unter HBCI-Konfiguration. Diese spezielle Unterteilung bekomme ich mit der mir bekannten API von hbci4Java aber nicht hin, da ich dort nur ein Object 'Konto' mit dem festen Attribut Kontonummer, habe. Wie kann ich verschiedene Daten für Konto- und Kundennummer angebeben. Was mich auch verwundert hat, diese Daten werden nicht aus meiner Callback-Klasse bezogen (NEED_CUSTOMERID, NEED_USERID) ?!
Jedenfalls bekomme ich mit meinem Programm den Fehler:
Code
9210:Keine gültige Kontoverbindung. (3: CustomMsg.GV.KUmsZeit6)

Ein weiteres Indiz auf o.g. Magie, ist der Umstand, das innerhalb von Hibiscus ein CRC Check der Kontonummer klappt, bei mir jedoch mit dem Fehler
Code
"can not check account numbers with more than 10 digits (XXXXXXXXXXXXXX)- skipping CRC check"
nicht stattfindet. Kann/Muss ich sowas als lowLevel-Parameter übergeben ?
Captain FRAG
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Westfalen
Beiträge: 5096
Dabei seit: 05 / 2003
Betreff:

Re: API für getrennte Kundennr. & Kontonr. bei Deutsche Bank

 · 
Gepostet: 20.09.2009 - 09:47 Uhr  ·  #2
Hallo,

ggfs. hilft dir das: http://www.onlinebanking-forum…php?t=1174 - speziell der Abschnitt für die Deuba.

Falls mit dem CRC Check das Nachrechnen der Prüfziffer einer Kontonummer gemeint ist, darf man nach meinem Verständnis bei der Deuba wohl nur den Kontostamm "prüfen". Als Kontostamm bezeichne ich die 7-stellige Kundennummer ohne Filial- und Unterkontomerkmal. Ggfs. geht das auch mit der Kumbination aus Filiale+Kontostamm. Das Unterkontenmerkmal ist ja nur ein Anhängsel das hochgezählt wird, dass in eine Prüfziffernberechnung aufzunehmen ist ziemlich unmöglich.

Das getrennte Erfassen von Filiale, Kontostamm und Unterkonto ist nur auf der Oberfläche eine Erfassungshilfe. Technisch und Bankübergreifend wird im HBCI-Umfeld für die Zugangsdaten immer von Benutzerkennung und Kunden-ID gesprochen. Mehr oder weniger gibt es nicht, nur die Belegung ist individuell. Details in der verlinkten Übersicht.
Der Zugriff auf das Konto an sich erfolgt nicht über die Zugangsdaten (das ist nur eine Zugangsberechtigungsprüfung, also eine Identifizierung der handelnden Person und Prüfung seiner PIN) sondern z.B. bei einer Umsatzabfrage wird das gewünschte "echte" Konto übergeben, dort muss dann natürlich auch die Unterkontonummer übergeben werden.
dominik42
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 25
Dabei seit: 03 / 2009
Betreff:

Re: API für getrennte Kundennr. & Kontonr. bei Deutsche Bank

 · 
Gepostet: 21.09.2009 - 22:33 Uhr  ·  #3
Danke erstmal für die Antwort.
Die Infos zur DeuBa hatte ich schon berücksichtigt. So musste ich wirklich erstmal auf deren Website die Nutzung von HBCI 'freischalten', aber das klappte schnell und sauber.
Die Erfassungshilfe in Hibiscus leuchtet mir ein, nur weiss ich eben nicht, wie ich das in meinem eigenen Programm abbilde. Schematisch hier mal mein Programm, HBCIAccount ist dabei nur ein Container von mir, um die Daten etwas zu strukturieren, MyCallback wird nur für die Pin gerufen und das Passport MyPinTan ist von HBCIPassportPinTan abgeleitet und verzichtet aufs speichern in ein file.

Code
HBCIAccount account = new HBCIAccount(filiale + konto + unter, blz, pin);
HBCIUtils.init(props, new MyCallback(account));
HBCIPassport passport=AbstractHBCIPassport.getInstance("MyPinTan");
passport.setBLZ(blz);
passport.setCountry("DE");
passport.setUserId(filiale + konto + unter);
passport.setCustomerId(""); // habe auch setCustomerId(filiale + konto + unter) probiert
String strUrl = HBCIUtils.getPinTanURLForBLZ(account.getBankCode());
URL url = new URL(strUrl);
passport.setHost(url.getHost() + url.getPath());
passport.setFilterType("Base64");
String pintanVersion = HBCIUtils.getPinTanVersionForBLZ(account.getBankCode());
HBCIHandler hbciHandle=new HBCIHandler(pintanVersion,passport);

Konto myaccount=new Konto("DE", blz, filiale + konto, unter);
HBCIJob jobSaldo = hbciHandle.newJob("SaldoReq"); 
jobSaldo.setParam("my", myaccount);
jobSaldo.addToQueue();


Damit erhalte ich leider
Code
Job-Error
9210:Keine gültige Kontoverbindung. (3: CustomMsg.GV.Saldo6)
Global Error
9050:Teilweise fehlerhaft.
9210:Keine gültige Kontoverbindung. (3: CustomMsg.GV.Saldo6)


Der gleiche code läuft mit Volksbank, Sparkasse und Postbank erfolgreich durch, es muss also an der Kombination mit Filiale und Unterkonto liegen.
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10778
Dabei seit: 03 / 2005
Betreff:

Re: API für getrennte Kundennr. & Kontonr. bei Deutsche Bank

 · 
Gepostet: 22.09.2009 - 00:43 Uhr  ·  #4
Ich setze in Hibiscus beim Erstellen des Geschaeftsvorfalls neben der subnumber (Unterkontonummer) extra noch die Kundennummer, Kontoinhaber und Konto-Typ:

Code

org.kapott.hbci.structures.Konto k = new org.kapott.hbci.structures.Konto(blz,kontonummer);
k.customerid = ...;
k.type = ...;
k.name = ...;
k.subnumber = ...;


Vielleicht hilft das ja bei dir.
dominik42
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 25
Dabei seit: 03 / 2009
Betreff:

Problem gelöst

 · 
Gepostet: 22.09.2009 - 22:27 Uhr  ·  #5
Hi,
danke an Olaf für den Tip, der brachte mich auf die richtige Spur:
Nach vielen fehlgeschlagenen Versuchen mit den diversen Kombinationen aus filiale, konto und unterkonto bin ich schliesslich auf flg. Schema gestossen, mit dem ich erfolgreich SaldoReq machen konnte:

seien
filiale : die 3 stell. Filialnummer
konto : die 9 stell. Kontonummer
unter : die 2 stell. Unterkontonummer eines Deutsche Bank Konto

dann musste ich flg. Anweisungen ausführen:

Code
passport.setBLZ(blz);
passport.setUserId(filiale + konto);
passport.setCustomerId("");
Konto konto = Konto("DE", blz, konto);
...
jobSaldo.setParam("my", konto);


Es fallen auf die Unterschiede
a) zwischen userID im passport und Kontoinformationen des GV's
sowie
b) zwischen meiner userID und der Kundennummer die Hibiscus anzeigt. Diese ist scheinbar nach 10 Stellen meiner ermittelten Kombination von Filiale + Kontonummer abgeschnitten. Ein tieferer Blick in den response der Bank zeigte mit jedoch, dass Hibiscus evtl. für die Kundennummer einen Wert aus der UPD (KInfo_2.customerid) nutzt, jedenfalls wurde der im UI sichtbare Wert nicht von mir eingegeben und ist auch keiner aus (filiale, konto oder unter) entspricht aber diesem response value. Die anderen Werte k.country, k.curr, k.type usw. hatten dann keinerlei Auswirkungen auf Erfolg und Misserfolg.
Gibt es diesen offiziellen Weg der Ermittlung der customerID nach Erzeugung des hbciHandle aus den response Werten (z.B. UPD) ? Ich möchte ungern institutsspezifische Anweisungen in meinem Programm ?
Danke nochmal allen für die Hilfe !!!
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10778
Dabei seit: 03 / 2005
Betreff:

Re: Problem gelöst

 · 
Gepostet: 22.09.2009 - 23:37 Uhr  ·  #6
Zitat geschrieben von dominik42

Gibt es diesen offiziellen Weg der Ermittlung der customerID nach Erzeugung des hbciHandle aus den response Werten (z.B. UPD) ? Ich möchte ungern institutsspezifische Anweisungen in meinem Programm ?


In Hibiscus geschieht das durch Klick auf den Button "Konten aus Sicherheitsmedium ermitteln" in der Kontoliste. Im Endeffekt wird dabei folgender Code aufgerufen:

Code

org.kapott.hbci.structures.Konto[] konten = passports.getAccounts();
Gewählte Zitate für Mehrfachzitierung:   0