nemiah / phpFinTS

PHP library to communicate with FinTS/HBCI servers
MIT License
132 stars 42 forks source link

Deutsche Bank: Request Failed: Nicht belegt. (9160); Dialoginitialisierung abgebrochen. (9800) #20

Closed Xardas166 closed 5 years ago

Xardas166 commented 5 years ago

Bei der Deutschen Bank bekomme ich folgende Fehlermeldung:

Request Failed: Nicht belegt. (9160); Dialoginitialisierung abgebrochen. (9800)

dieser tritt auf wenn:

$fints->getSEPAAccounts();

ausgeführt wird. Entsprechend der Kompatibilitätsliste sollte die Deutsche Bank unterstützt werden und es da funktionieren.

Es wird das Sample Skript verwendet mit diesen Bankdaten: define('FHP_BANK_URL', 'https://fints.deutsche-bank.de/'); define('FHP_BANK_PORT', 443); define('FHP_BANK_CODE', '61370024');

Jemand eine Idee? Schon einmal vielen lieben Dank für die Hilfe.

nemiah commented 5 years ago

Hallo,

bei mir funktioniert die Deutsche Bank. Wurde der HBCI-Zugang auf der Webseite aktiviert? Funktioniert eine andere Software mit diesen Daten?

Liebe Grüße Nena

Xardas166 commented 5 years ago

Hallo Nena,

ja, der Zugang wurde aktiviert. Mit einem anderen Programm kann man sich auch problemlos verbinden. Nur hier bekomme ich leider diesen Fehler.

Bin da gerade echt ratlos :(

Xardas166 commented 5 years ago

Hallo Nena,

hättest du eventuell mal kurz Zeit dir das anzusehen?

Ich komme da aktuell nicht wirklich weiter. Natürlich würde ich dir dafür auch etwas bezahlen.

Liebe Grüße

nemiah commented 5 years ago

Hallo Xardas,

da der Fehler bei mir leider nicht auftaucht, kann ich es mir nicht ansehen.

Ich würde mir ein HBCI-Programm holen, mit dem es funktioniert und das die HBCI-Kommunikation anzeigen kann (z.B. Hibiscus) und dann die Protokolle mit phpFinTS vergleichen. Irgendwas macht das andere Programm dann wohl anders…

Liebe Grüße Nena

timrasche commented 5 years ago

Ebenfalls hier, Volksbank.

Bereits beim eröffnen der Verbindung seit gestern.

nemiah commented 5 years ago

Hallo,

das kann aber auch die fehlende Registrierung sein.

Liebe Grüße Nena

timrasche commented 5 years ago

Hallo,

das kann aber auch die fehlende Registrierung sein.

Liebe Grüße Nena

Ja das ist es auch, trotzdem danke. Habe das Formular abgeschickt, jemand hier Erfahrung mit Dauer der Bearbeitung?

nemiah commented 5 years ago

Bei mir hat es nicht mal einen Tag gedauert, bis die Registrierung durch war.

Liebe Grüße Nena

timrasche commented 5 years ago

Bei mir hat es nicht mal einen Tag gedauert, bis die Registrierung durch war.

Liebe Grüße Nena

Ich danke für das schnelle Feedback! *Tasse Kaffe rüber werf

nemiah commented 5 years ago

Gerne :)

sirozzy commented 5 years ago

Herr D...ld ist heute nicht da, d.h. es könnte etwas länger dauern.

roben commented 5 years ago

Die Kollegen von der Buchhaltung standen inzwischen mit Windata in Kontakt, die selber bei der Postbank nicht voran kommen. Hilft uns zwar nicht weiter, aber wir sind nicht die einzigen mit dem Problem :) Hier die Info von Windata:

Hinweis bzgl. PSD2 Umstellung der Postbank - Einschränkungen im HBCI-Verfahren

Sehr geehrter windata-Kunde,

derzeit kann es im HBCI-Verfahren der Postbank vermehrt zu Problemen aufgrund der PSD2-Umstellungen kommen. Die Postbank wie auch unsere Entwicklung arbeiten an einer Lösung. Wir werden Sie auf diesem Weg informieren, sobald eine Lösung vorhanden ist und ob Sie ggf. aktiv werden müssen. Vielen Dank für Ihr Verständnis!

Schöne Grüße aus dem Allgäu

nemiah commented 5 years ago

Ja, mein Kunde hat das gleiche von Buhl gehört.

Also aktuell keine Lösung für die Postbank :(

Liebe Grüße Nena

Philipp91 commented 5 years ago

Postbank-Konto habe ich keins. DKB-Konto funktioniert auch nach der Umstellung weiterhin ohne TAN über HBCI, mal sehen wie lange noch. Consorsbank bricht weiterhin ab mit "Unerwartete Nachricht" (siehe #22).

Ich vermute stark, dass wir HKTAN Version 6 brauchen werden, siehe Seite 18 (PDF-Seite 26).

In Message.php wird momentan SECURITY_FUNC_999 standardmäßig gewählt. Zwar ist 999 laut der HIRMS Nachricht (Segment 3920) weiterhin "zugelassen", aber zumindest wenn ich es in einer anderen Software (Banking4) auswähle, dann gibt es von der Consorsbank einen Fehler zurück. Wenn ich das neue SecurePlus (900) auswähle, dann funktioniert es mit Banking4. Ich werde zur Generierung einer TAN aufgefordert genau wie beim Web-Banking, und muss dafür manuell die App öffnen, entsperren und eine TAN generieren.

Wenn ich $fints->setTANMechanism(900); setze, dann entscheidet sich Message.php für das "Security profile 2", also ein Zwei-Schritt TAN-Verfahren. Das ist vermutlich für den Login nicht das richtige? Jedenfalls antwortet die Consorsbank auch darauf mit "Unerwartete Nachricht".

EFAG-Christian commented 5 years ago

HKTAN Version 6 ist es ebenfalls bei der Volksbank. Ich habe es mal "so grob" eingebaut und bekomme jetzt den Abruf wieder erfolgreich durch.

@nemiah - vielleicht kannst du das im Sinne der Klasse integrieren? Ich vermute mal man müsste da auf die Rückmeldung der Unterstützten Methoden oder so reagieren und das dann anhand von dem Faktor unterscheiden. Ich habe es bei mir mal jetzt so eingebaut dass der darauf reagiert ob $fints->setTANMechanism(901); gesetzt wird

Mein Quick-and-Dirty Fix:

Ganz grob zusammengefasst: überall wo er gemeckert hat hab ich HKTAN Version 6 ergänzt.

Dialog.php Zeile 303: public function initDialog($tanMechanism=null)

Dialog.php ab Zeile 318 if ($tanMechanism!=null) { $auth = new HKTAN(6, 5,"HKIDN"); $encryptedSegments = array($identification, $prepare, $auth); } else { $encryptedSegments = array($identification, $prepare); }

dann danach den array übergeben: $message = new Message( $this->bankCode, $this->username, $this->pin, $this->systemId, 0, 1, $encryptedSegments, array(AbstractMessage::OPT_PINTAN_MECH => $this->supportedTanMechanisms) );

selbiges in FinTS.php ab Zeile 357: if ($this->tanMechanism!==null) { $segments = array( new HKKAZ( $dialog->getHkkazMaxVersion(), 3, $konto, HKKAZ::ALL_ACCOUNTS_N, $from, $to, $touchdown ), new HKTAN(6, 5,"HKIDN") ); } else { $segments = array( new HKKAZ( $dialog->getHkkazMaxVersion(), 3, $konto, HKKAZ::ALL_ACCOUNTS_N, $from, $to, $touchdown ) ); } $message = $this->getNewMessage( $dialog, $segments, array(AbstractMessage::OPT_PINTAN_MECH => $this->getUsedPinTanMechanism($dialog)) );

und in Zeile 144: $dialog->initDialog($this->tanMechanism);

HKTAN.php - Zeile 31: if ($version==6) { $data[] = 4; $data[] = $processID; $data[] = ""; $data[] = ""; $data[] = ""; } else { $data[] = 2; $data[] = ""; $data[] = ""; $data[] = ""; $data[] = $processID; } statt $data[] = 2; $data[] = ""; $data[] = ""; $data[] = ""; $data[] = $processID;

nemiah commented 5 years ago

Ok, ich habe gerade grundlegenden TAN-Support fürs Umsätze abholen eingebaut. Bitte testen :)

Liebe Grüße Nena

klefix commented 5 years ago

@nemiah vielen Dank für die schnelle Umsetzung!

Ich versuche Umsätze von der GLS abzurufen. Seit dem 11.9. bekam ich immer die Fehler:

Die Nachricht enthält Fehler. (9050); 
Starke Kundenauthentifizierung notwendig. (9075); 
Dialog abgebrochen (9800); 
Auftrag abgelehnt. (9340)

ausgelöst durch $fints->getSEPAAccounts()

Nun, mit dem neusten Stand bekomme ich andere Fehler:

Anzahl Signaturen für diesen Auftrag unzureichend laut UPD oder BPD. (9370); 
Die Nachricht enthält Fehler. (9050)

FinTS ist für mich leider absolutes Neuland. Sagt Dir die Meldung mit UPD und BPD etwas und/oder mache ich noch etwas falsch?

Viele Grüße Felix

timrasche commented 5 years ago

Function name must be a string in lib/Fhp/FinTs.php on line 213

hust

timrasche commented 5 years ago

Ich flipp aus, @nemiah danke! Das letzte Update hat gezogen, nun funktioniert alles wieder, perfekt! Saved my month! :D

nemiah commented 5 years ago

@timrasche das freut mich :)

@klefix hmm, schwer zu sagen, ich kann leider nur meine eigenen Banken testen. Bitte probier mal, ob es mit Hibiscus funktioniert.

Liebe Grüße Nena

EFAG-Christian commented 5 years ago

Meldung: Anzahl Signaturen für diesen Auftrag unzureichend laut UPD oder BPD.

Hab den Fehler jedoch gefunden: Bei HKSAL - FinTS.php - Zeile 383 wird HKTAN nicht mitgesendet

array( new HKSAL($dialog->getHksalMaxVersion(), 3, $hksalAccount, HKSAL::ALL_ACCOUNTS_N), new HKTAN(HKTAN::VERSION, 4) ),

statt

array( new HKSAL($dialog->getHksalMaxVersion(), 3, $hksalAccount, HKSAL::ALL_ACCOUNTS_N) )

jetzt wirft jedoch die Volksbank den Fehler: Herausgebersignatur für bezogenen Benutzer fehlt. (9370)

Wenn ich die Änderung wieder Rückgängig mache geht wieder die andere Bank. Sprich: die Änderung macht die KSK funktionstüchtig, jedoch geht dann die VoBa nicht mehr (?)

Hilft dir das weiter?

sirozzy commented 5 years ago

Also Volksbank funktioniert jetzt wieder einwandfrei. Vielen Dank! Postbank kommt jetzt: [HIRMG] Dialogabbruch. [HIRMS] Gewähltes Zwei-Schritt-Verfahren nicht unterstützt. Request Failed: Gewähltes Zwei-Schritt-Verfahren nicht unterstützt. (9200); Dialogabbruch. (9800)

Sehe ich das richtig, dass dieses aktuell abgeschaltet ist?

nemiah commented 5 years ago

@sirozzy #25

@JarvisHome hmm, getSaldo funktioniert bei mir auch nur ohne HKTAN. Die Frage ist, ob wir da eine Unterscheidung einbauen müssen und wenn ja, wie unterscheiden wir?

EFAG-Christian commented 5 years ago

Bei der Volksbank gehts bei mir der getSaldo auch nur ohne HKTAN - Die Kreissparkasse möchte jedoch wohl nur mit HKTAN. Ich befürchte da wäre eine Unterscheidung sinnvoll. Gibt es einen dir bekannten Faktor den ich mal testen könnte? FinTS Version o. ä.? Ansonsten fällt mir nur nach Bank ein. Wobei die Kreissparkasse bisher nicht nach der alten Methode (ganz ohne HKTAN) ablehnt - könnte euch ein Faktor sein. Ich kenne das Protokoll jedoch nicht wirklich.

Philipp91 commented 5 years ago

Meiner Erinnerung nach treten andere Libraries diese "Unterscheidung" / Entscheidung an den Nutzer (der Bibliothek/Endanwendung) ab.

In Banking4 öffnet sich zum Beispiel ein Popup mit den verfügbaren TAN-Verfahren und man darf selbst aus den Optionen aus der HIRMS/3920-Antwort (für den Nutzer leserlich aufbereitet anhand der Namen in der HITANS Nachricht) wählen, außer wenn es nur eine Option gibt, dann wird der Dialog übersprungen. In meinem Fall wurde mir mein altes pushTAN und mein neues Handy zur Auswahl gegeben. Für zukünftige Abrufe speichert Banking4 die Entscheidung, aber das könnte man im Falle von phpFinTS der Anwendung überlassen.

Früher habe ich einmal Subsembly benutzt, deren Bibliothek hat im Dateisystem eine Datei angelegt wo diese Entscheidung gespeichert wurde, und es gab ein Callback falls die Entscheidung getroffen werden musste. Ich hatte für meinen Anwendungsfall einfach 900 hartkodiert, aber andere Anwendungen können einen Dialog anzeigen.

Auch heute hat Subsembly das scheinbar noch in der API: Jede Aktion (FinDialog) die man ausführt gibt ein FinDialogResult zurück mit einem Code und ggf. Zusatzinformationen. Ein möglicher Code ist SelectTanMedia begleitet von einer Liste der verfügbaren TanMedias. Abgesehen von der Grammatik ("medium" ist Singular, "media" ist Plural, "medias" gibt's nicht) halte ich das für eine elegante Lösung. Ein anderer möglicher Code ist NeedTan, mit der der Nutzer zur Generierung einer TAN aufgefordert wird.

Der entscheidende Unterschied zwischen .NET und PHP ist, dass letzteres asynchron ausgeführt wird und die FinTs-Instanz sowie die Verbindung zum Bankenserver verloren gehen können während man den Nutzer im Browser fragt. Aber wenn ich das richtig sehe, hat phpFinTS schon ein $tanCallback, d.h. ein $tanMethodCallback oder so könnte ähnlich funktionieren.

visioncode commented 5 years ago

Bei mir hat es nicht mal einen Tag gedauert, bis die Registrierung durch war.

Liebe Grüße Nena

Sorry für die vielleicht doofe Frage, aber was/wie/wo muss/kann man registrieren? Ich bekomme dieselbe Meldung wie @timrasche bei der Volksbank. Was muss ich tun um das zu vermeiden? :)

EFAG-Christian commented 5 years ago

@nemiah vielleicht kannst du mal vorläufig einen Flag / Option einbauen ob HKTAN beim Umsatz abrufen mit gesendet wird oder nicht. Dann hätte ich die Kreissparkasse wieder funktionstüchtig.

@visioncode FinTS registration

nemiah commented 5 years ago

@JarvisHome Hmm, das finde ich eine ungünstige Lösung, weil dann muss das für jede Bank irgendwoher gesetzt werden. Ich würde erst mal abwarten, was sich die nächsten Tage noch tut.

@Philipp91 Du kommst mit der Methode getVariables() an die möglichen TAN-Verfahren. Das muss man den Benutzer auch auswählen lassen, ja. Darüber hinaus verstehe ich leider nicht, worauf du hinaus möchtest.

EFAG-Christian commented 5 years ago

gut - dann mal abwarten. Wobei ich schon häufiger von derart individuellen Auslegungen der FinTS Schnittstelle einzelner Banken gehört habe. Ich bin mir daher nicht sicher ob die bei der Kreissparkasse das noch ändern werden. Prinzipiell geht es ja schon,...

nemiah commented 5 years ago

@JarvisHome Die Sparkasse scheint das gleiche "Problem" mit dem getSaldo zu haben. Ich schaue morgen mal, ob ich was finde.

EFAG-Christian commented 5 years ago

@nemiah Sag bitte bescheid wenn ich dir irgendwo helfen / assistieren kann :-)

roben commented 5 years ago

Danke erstmal für die ganze Mühe hier :)

Bei der Sparkasse kommt es jedenfalls im neuen TAN-Code zu einem Undefined offset: 30 in Response/GetVariables.php +22. Das $cex von der Sparkasse hat tatsächlich 26 Elemente:

array(26) {
  [0]=>
  string(1) "J"
  [1]=>
  string(1) "N"
  [2]=>
  string(1) "0"
  [3]=>
  string(1) "0"
  [4]=>
  string(3) "920"
  [5]=>
  string(1) "2"
  [6]=>
  string(6) "smsTAN"
  [7]=>
  string(6) "smsTAN"
  [8]=>
  string(1) "6"
  [9]=>
  string(1) "1"
  [10]=>
  string(10) "TAN-Nummer"
  [11]=>
  string(1) "3"
  [12]=>
  string(1) "1"
  [13]=>
  string(1) "J"
  [14]=>
  string(1) "J"
  [15]=>
  string(3) "900"
  [16]=>
  string(1) "2"
  [17]=>
  string(4) "iTAN"
  [18]=>
  string(4) "iTAN"
  [19]=>
  string(1) "6"
  [20]=>
  string(1) "1"
  [21]=>
  string(10) "TAN-Nummer"
  [22]=>
  string(1) "3"
  [23]=>
  string(1) "1"
  [24]=>
  string(1) "J"
  [25]=>
  string(1) "J"
}
Philipp91 commented 5 years ago

Die DKB funktioniert nun auch nicht mehr, will ein BPD-Update schicken, sagt dass das Verfahren 921 das einzige verfügbare ist, und antwortet dann auf die PIN mit HIRMG:3:2+9050::Die Nachricht enthält Fehler.+9800::Dialog abgebrochen+9010::Die angegebene Bankreferenz/Dialog-ID ist nicht gültig.

EFAG-Christian commented 5 years ago

Kreissparkasse hat jetzt auch umgeschaltet. Problem bleibt wie beschrieben leider bestehen.

nemiah commented 5 years ago

@JarvisHome ja, du kannst mir helfen: Bitte mach mal in der getSaldo()-Methode ein print_r($dialog->getHksalMaxVersion()); Bei mir ist es so, dass es nur mit HKTAN funktioniert, wenn die Version 5 ist und nur ohne HKTAN, wenn es Version 7 ist.

@Philipp91 bei welcher Methode?

@roben Kannst du einbauen, dass die Schleife abgebrochen wird, wenn der index nicht funktionert und mir einen pull request schicken?

EFAG-Christian commented 5 years ago

@nemiah kann ich bestätigen - ist bei mir ebenso :-)

nemiah commented 5 years ago

@JarvisHome ok, dann probieren wir es mal darüber, ist gepusht :)

ampaze commented 5 years ago

Meiner Meinung nach wäre jetzt der ideale Zeitpunkt die TAN-Behandlung abzuändern, sodass die Verbindung zum Server zwischen TAN-Request der Gegenstelle und TAN-Übermittlung beendet wird. Oder anders gesagt, man braucht die Response nicht die ganze Zeit durchschleifen und Callbacks pollen.

Da ja bei diversen Anfragen eine TAN verlangt werden kann, könnte z.B. sendMessage eine TanRequiredException schmeißen und die ProcessID dort speichern.

...
$response = new GetTANRequest($response->rawResponse, $dialog);
$response->get()->getProcessID();
...

Wenn man dann die TAN vom Nutzer abgefragt hat, schickt man diese hin, z.B. so

public function confirmProcessIdWithTAN($processID, $tan)
{
    if (empty($tan)) {
        throw new TANException("No TAN received!");
    }

    $dialog = $this->getDialog();

    $message = new Message(
        $this->bankCode,
        $this->username,
        $this->pin,
        $dialog->getSystemId(),
        $dialog->getDialogId(),
        $dialog->getMessageNumber(),
        array(
            new HKTAN(HKTAN::VERSION, 3, $processID)
        ),
        array(
            AbstractMessage::OPT_PINTAN_MECH => $this->getUsedPinTanMechanism($dialog)
        ),
        $tan
    );
}

und kann danach ggf. die Funktion wieder aufrufen die zur TAN-Exception geführt hat.

So wie es jetzt ist, muss ja jede Anfrage wie z.B. "getStatementOfAccount" sich selbst um die Unterbrechung durch die TAN kümmern.

nemiah commented 5 years ago

@ampaze Ja, das ist eine gute Idee und ich habe die callback-Lösung auch schon in die Dialog-Klasse umgezogen. Dort kann dann auch die TAN-Exception geworfen werden, wenn kein callback übergeben wurde. Ich sehe nur ein Problem: Bei Überweisungen und Lastschriften funktioniert es gut, denn da ist die Rückgabe dann egal. Gerade bei getStatementOfAccount muss die Rückgabe aber dann verarbeitet werden, denn nach der TAN-Übergabe kommen gleich die Umsätze zurück. Ich freue mich über pull requests :)

Philipp91 commented 5 years ago

Getestet mit diesem Code-Stand.

DKB getVariables() schlägt fehl, siehe mein Kommentar hier. DKB getStatementOfAccount() antwortet zunächst mit "Auftrag ausgeführt", "Zugelassene Zweischritt ... 921" (das scheint "TAN2go" zu sein) und "3076::Starke Kundenauthentifizierung nicht notwendig." und "HITAN:171:6:5+4++noref+nochallenge". Auf HKKAZ Version 5 kommt dann die Antwort "HIRMG:3:2+9050::Die Nachricht enthält Fehler.+9800::Dialog abgebrochen+9010::Die angegebene Bankreferenz/Dialog-ID ist nicht gültig." "HIRMS:4:2:4+9010::Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet."

Consorsbank getVariables() liefert tanModes=[900="SecurePlus"] wie erwartet, also führe ich $fints->setTANMechanism(900); aus. Consorsbank getStatementOfAccount() antwortet mit "Dialog abgebrochen" wenn ich es direkt im Anschluss ausführe, vermutlich weil getVariables() intern endDialog() ausführt, aber dort das $this-dialog Feld nicht geleert wird. Consorsbank getStatementOfAccount() alleine ausgeführt antwortet mit "HIRMG:2:2:+9050::Nachricht teilweise fehlerhaft." "HIRMS:3:2:5+9380::Unbekanntes Zwei-Schritt-TAN-Verfahren."

nemiah commented 5 years ago

@Philipp91 das endDialog() hatte ich schon vermutet, habe es aber nie getestet. Ich freue mich über einen PR, wie es bei dir funktioniert :)

Philipp91 commented 5 years ago

Auch ohne den endDialog()-Aufruf kommt die Fehlermeldung "Dialog abgebrochen .. Unerwartete Nachricht", keine Ahnung wieso. Ist für mich im Moment kein Problem, weil ich getVariables() ja nicht ausführen muss.

Edit: Man kann zwar nicht im selben Dialog weitermachen, aber man kann dieselbe FinTs-Instanz weiterverwenden, wenn man den Dialog korrekt schließt, sodass beim nächsten Aufruf ein neuer geöffnet wird. Dafür sende ich einen PR.

nemiah commented 5 years ago

@Philipp91 Gut, dann lassen wir es so ;)

EFAG-Christian commented 5 years ago

@nemiah Vielen Dank für deinen Einsatz! :-)

nemiah commented 5 years ago

@JarvisHome Gerne, aber das Banking muss laufen, ich brauche es für meine Software: https://www.open3a.de :wink:

timrasche commented 5 years ago

Das halte ich für einen guten Vorschlag.

ampaze commented 5 years ago

@nemiah Ich kann mich gern darum kümmern und einen Pull Request machen, allerdings leider erst im Oktober.

nemiah commented 5 years ago

@ampaze und @Philipp91: überschneidet sich die TAN-Behandlung über eine Exception mit etwas, das @Philipp91 schon macht?

1manfactory commented 5 years ago

Bank: Postbank

Ich habe für mein eigenes Wordpress-Plugin eine Umsatzabfrage programmiert, die einmal täglich läuft und die Ergebnisse in eine Tabelle schreibt zur weiteren Bearbeitung durch WooCommerce.

Leider funktioniert das jetzt natürlich nicht mehr - war ja zu erwarten.

Meine Desktop-Software kommt damit mittlerweile klar. Es wurde nur einmal nach einer extra generierten TAN gefragt, danach scheint sich die Bank bzw. der Server bzw. die Software damit zu begnügen und hat weiterhin nicht mehr nach einer TAN gefragt. Die Umsatzabfrage müsste also ab jetzt unbeaufsichtigt möglich sein.

Meine Fragen also:

  1. Ist es möglich durch eine einmalige Kommunikation per FinTS diese TAN-Weitergabe nachzustellen?

  2. Wie lange behält diese Authentifizierung ihre Gültigkeit?

Ich würde mich freuen, wenn einer dazu Ideen hätte.

Danke Jürgen

timrasche commented 5 years ago

@1manfactory

  1. Ein TAN-Verfahren versucht ja genau das zu verhindern. 1/2. Das kann dir glaube ich niemand beantworten. Das macht jede Bank unterschiedlich und dann sogar auch sporadisch. Das kann 50 mal gehen, manchmal auch nur 20 mal oder 3 usw.