nemiah / phpFinTS

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

Comdirect: Dialog wurde abgebrochen #45

Closed kathibeepboop closed 5 years ago

kathibeepboop commented 5 years ago

Hallöchen,

erstmal ein Lob für die aktive Arbeit an diesem Projekt! Besonders jetzt zur PSD2 Einführung!

Bei der Comdirect funktioniert der aktuelle Master-Stand noch nicht, man erhält die Fehlermeldung "Dialog abgebrochen". Diese Fehlermeldung kommt beim abrufen der getSEPAAccounts() Funktion. Eine Mobil-Tan wird von der Comdirect generiert. zugesendet und das Konto nach 5 Versuchen gesperrt (Ist mir schon 2 mal passiert...) Ist das Problem bekannt und überschneidet es sich ggf. schon mit anderen offenen Issues?

Ich sehe z.B. hier, dass extra Anpassungen für die Comdirect Bank gemacht werden mussten.

Wenn es noch nicht bekannt ist, kann ich später noch mehr Informationen bereitstellen, was die Log ausspuckt.

fbett commented 5 years ago

Die App "Banking4" hat den Zugang erst wiederherstellen können, nachdem eine PhotoTan übermittelt wurde. Dies war bei den anderen Zugängen nicht erforderlich.

Ich gehe davon aus, dass das womöglich derzeit mit dieser PHP-Bibliothek nur schwerer zu lösen ist: Hierzu müsste man vermutlich eine andere Technologie (stateful) nutzen.

roben commented 5 years ago

Ich habe die These, dass man sich mit einer beliebigen App (aber ggf. mit demselben TAN-Medium) neu authentifizieren kann und es dann auch mit der Library wieder klappt. Zumindest musste ich zum einfachen Umsatzabruf bisher noch keine TAN übermitteln, worauf ich diese These stütze ;)

fbett commented 5 years ago

Das wäre natürlich gut, auch wenn ich dann das Sicherheitskonzept dahinter nicht mehr verstehen würde. :D

kathibeepboop commented 5 years ago

Also ich kann mit einer TAN Eingabe im Online Interface meinen Tan Fehler Zähler zurücksetzen. Das geht. Jedoch habe ich über das Online Banking auch genutzt und vorher sowie nachher getestet, beides klappte nicht. Mit Foto-TAN habe ich bisher nichts gemacht.

Ich erhalte die TAN für die Anfrage ja auch, jedoch bekomme ich trotzdem die HBCI Fehlermeldung. Kann es sein, dass man es einfach so umsetzen muss wie beim Abrufen der Umsätze wie hier? https://github.com/nemiah/phpFinTS/blob/1cbbf0d758b9088222983092846f9947405bf810/Samples/statement_of_account.php#L54-L86

nur bereits hier https://github.com/nemiah/phpFinTS/blob/1cbbf0d758b9088222983092846f9947405bf810/Samples/statement_of_account.php#L47

kathibeepboop commented 5 years ago

Nachdem ich noch etwas weiter nachgeschaut habe, sehe ich die folgende Ausgabe beim Aufrufen der Funktion "getSEPAAccounts()"

[2019-09-19 16:29:33] app.INFO: [HIRMS] 0030: TAN-Eingabe erforderlich. [] []

[2019-09-19 16:29:33] app.INFO: HKSPA (SEPA accounts) initialize [] []
[2019-09-19 16:29:33] app.DEBUG: > NACHRICHT [] []
[2019-09-19 16:29:33] app.DEBUG: < NACHRICHT [] []
[2019-09-19 16:29:33] app.ERROR: [HIRMG] 9050: Die Nachricht enthaelt Fehler. [] []
[2019-09-19 16:29:33] app.ERROR: [HIRMG] 9800: Dialog abgebrochen [] []
[2019-09-19 16:29:33] app.ERROR: [HIRMG] 9340: Ungueltige Auftragsnachricht? [] []
[2019-09-19 16:29:33] app.ERROR: [HIRMS] 9010: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. [] []
nemiah commented 5 years ago

Hmm, brauchst du schon zum Abfragen der Konten eine TAN?

kathibeepboop commented 5 years ago

Im Webinterface nicht, im Code jedoch schon. Sobald ich mit dem aktuellen dev-master die Funktion "getSEPAAccounts()" aufrufe, erhalte ich eine SMS Tan und gleichzeitig die Fehlermeldung, wie oben beschrieben.

Ich habe testweise versuch das SEPAAccount Objekt selber zu generieren anhand der benötigten Informationen, jedoch hat das auch nicht geklappt, da anscheinend benötigte Parameter nicht gesetzt waren, wo aber mein Know-How fehlte um herauszufinden was genau fehlte. Hatte alle außer den SubAccount gesetzt. Aber ggf. die anderen auch falsch.

nemiah commented 5 years ago

Hmm, ok, bei getSEPAAccounts ist im Moment keine TAN-Abfrage eingeplant. Ich habe gerade mal getSEPAAccounts() um den tanCallback erweitert, bitte probier mal damit.

kathibeepboop commented 5 years ago

Danke dir! Habe es nun getestet, erhalte jedoch immernoch die gleiche Fehlermeldung, jedoch wird der Callback nicht aufgerufen. Kann es daran liegen, dass der Dialog auch hier automatisch beendet wird?

mein Test-Code:

$callback = function () {
        die("test");
    };
    $accounts = $fints->getSEPAAccounts($callback);
nemiah commented 5 years ago

Hmm, der callback sollte aufgerufen werden, wenn Dialog::sendMessage eine TAN-Anfrage zurück bekommt. Schau doch bitte mal, wie weit Dialog::sendMessage durchläuft.

kathibeepboop commented 5 years ago

Hier einmal die Log:

HKSPA (SEPA accounts) initialize
>  NACHRICHT
< NACHRICHT
[HIRMG] 9050: Die Nachricht enthaelt Fehler.
[HIRMG] 9800: Dialog abgebrochen
[HIRMG] 9340: Ungueltige Auftragsnachricht?
[HIRMS] 9010: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet.
Request Failed: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. (9010); Die Nachricht enthaelt Fehler. (9050); Dialog abgebrochen (9800); Ungueltige Auftragsnachricht? (9340)
Request Failed: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. (9010); Die Nachricht enthaelt Fehler. (9050); Dialog abgebrochen (9800); Ungueltige Auftragsnachricht? (9340)

Ausgelöst wird der Fehler in https://github.com/nemiah/phpFinTS/blob/ec96e31fb5ce9d5cc7df5b9163ad7eec8339d63d/lib/Fhp/FinTs.php#L175

image

nemiah commented 5 years ago

Ok, das heißt aber, dass das Problem noch vor der TAN-Abfrage auftritt. Vielleicht musst du dann bei HKSPA schon ein HKTAN mitschicken. Probier doch bitte mal in der getSEPAAccounts() folgendes: $message = $this->getNewMessage( $dialog, array( new HKSPA(3), $this->createHKTAN(4) ), array(AbstractMessage::OPT_PINTAN_MECH => $this->getUsedPinTanMechanism($dialog)) );

kathibeepboop commented 5 years ago

Habs in der Funktion hinzugefügt, jedoch besteht das Problem weiterhin.

DIALOG initialize
Registered product: PRODUCTNUMBER 1.0
> DATA
< DATA
[HIRMG] 0010: Nachricht entgegengenommen.
[HIRMS] 0030: TAN-Eingabe erforderlich.
Received dialog ID: DIALOGID
DIALOG end

HKSPA (SEPA accounts) initialize
> DATA
< DATA
[HIRMG] 9050: Die Nachricht enthaelt Fehler.
[HIRMG] 9800: Dialog abgebrochen
[HIRMG] 9340: Ungueltige Auftragsnachricht?
[HIRMS] 9010: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet.
Request Failed: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. (9010); Die Nachricht enthaelt Fehler. (9050); Dialog abgebrochen (9800); Ungueltige Auftragsnachricht? (9340)
Request Failed: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. (9010); Die Nachricht enthaelt Fehler. (9050); Dialog abgebrochen (9800); Ungueltige Auftragsnachricht? (9340)

Um sicher zu gehen, hier die getSEPAAccounts()


    public function getSEPAAccounts(\Closure $tanCallback = null)
    {
        $dialog = $this->getDialog(false); #, $this->tanMechanism);
        #$dialog->endDialog(); //probably not required
        $dialog->syncDialog($this->tanMechanism, $this->tanMediaName);
        $dialog->endDialog();
        $dialog->initDialog($this->tanMediaName);

        $message = $this->getNewMessage(
            $dialog,
            array(new HKSPA(3), $this->createHKTAN(4)),
            array(AbstractMessage::OPT_PINTAN_MECH => $this->getUsedPinTanMechanism($dialog))
        );

        $this->logger->info('');
        $this->logger->info('HKSPA (SEPA accounts) initialize');
        $result = $dialog->sendMessage($message, null, $tanCallback);
        $this->logger->info('HKSPA end');

        $sepaAccounts = new GetSEPAAccounts($result->rawResponse);

        return $sepaAccounts->getSEPAAccountsArray();
    }
nemiah commented 5 years ago

Hmm, und so: $message = $this->getNewMessage( $dialog, array( new HKSPA(3) ), array() ); ?

kathibeepboop commented 5 years ago

Hi, habe es so probiert und frage mich warum nicht einfach alle Banken gleich arbeiten können... Naja es funktionierte so leider auch nicht..


SYNC initialize
> NACHRICHT
< NACHRICHT
[HIRMG] 3060: Bitte beachten Sie die enthaltenen Warnungen/Hinweise.
[HIRMS] 0020: Dialog initialisiert.
[HIRMS] 3050: BPD nicht mehr aktuell, aktuelle Version enthalten.
[HIRMS] 3920: Verfügbare TAN-Verfahren?
[HIRMS] 3076: Starke Kundenauthentifizierung nicht notwendig.
Received system id: <ID>
Received dialog id: <ID>
Supported TAN mechanisms: mobileTAN-Verfahren (901), photoTAN-Verfahren (902)
SYNC end

END initialize
> NACHRICHT
< NACHRICHT
[HIRMG] 0010: Nachricht entgegengenommen.
[HIRMG] 0100: Dialog beendet.
Resetting dialog ID and message number count
END end

DIALOG initialize
Registered product: <ID> 1.0
> NACHRICHT
< NACHRICHT
[HIRMG] 0010: Nachricht entgegengenommen.
[HIRMS] 0030: TAN-Eingabe erforderlich.
Received dialog ID: <ID>
DIALOG end

HKSPA (SEPA accounts) initialize
> NACHRICHT
< NACHRICHT
[HIRMG] 9050: Die Nachricht enthaelt Fehler.
[HIRMG] 9800: Dialog abgebrochen
[HIRMG] 9340: Ungueltige Auftragsnachricht?
[HIRMS] 9010: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet.
Request Failed: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. (9010); Die Nachricht enthaelt Fehler. (9050); Dialog abgebrochen (9800); Ungueltige Auftragsnachricht? (9340)
Request Failed: Auftrag wegen genereller Fehler in Auftragsnachricht nicht verarbeitet. (9010); Die Nachricht enthaelt Fehler. (9050); Dialog abgebrochen (9800); Ungueltige Auftragsnachricht? (9340)
nemiah commented 5 years ago

Ja, das verstehe ich auch nicht. Hast du schon probiert, ob es mit Hibiscus (https://www.willuhn.de/products/hibiscus/) funktioniert?

kathibeepboop commented 5 years ago

Habe es jetzt einmal probiert. Beim importieren der Konten fragt er nach einer TAN. Dort habe ich jedoch zus#tzlich noch die "Kundenkennung" aka. meine Kundennummer von Comdirect angegeben, falls das relevant ist (was ich aber vor dem PSD2 Update auch nicht gemacht hatte)

nemiah commented 5 years ago

Ok, dann schau doch bitte mal im HBCI-Log (im Menü: Hibiscus -> Erweitert) nach, was der Unterschied zu phpFinTS ist.

kathibeepboop commented 5 years ago

Interessant. Wollte es heute vergleichen und siehe da, das Callback wird gecalled! Habe das Callback nun wieder entfernt und siehe da: Ich brauche keine TAN mehr ;)

Jetzt kommt die TAN Eingabe erst bei Statements (Wie gewollt) .. Ich vermute die Comdirect hat da etwas umgestellt, denn am Code habe ich nichts verändert.

Danach habe ich geupdated. bekomme nach PIN Eingabe jedoch jedoch nun die Ausgabe "Unbekannter Aufbau"

Die Datensätze der letzten 90 Tage kann ich jedoch ohne TAN abrufen.

nemiah commented 5 years ago

Ok, wegen dem unbekannten Aufbau: Bitte vergleiche das Log aus phpFinTS mit dem Log von Hibiscus :wink:

hardwaresoftwork commented 5 years ago

Hallo zusammen,

vielen Dank für die vielen Infos und Details und die bisherige Arbeit. Bin in einem Node Projekt auf das gleiche Problem gestoßen.

Dieser Thread hier beschreibt die möglichen Ursachen (doppel 3920) ziemlich gut: https://homebanking-hilfe.de/forum/topic.php?t=23251

kathibeepboop commented 5 years ago

Moin,

Da der Laden dicht gemacht wird, macht es glaube ich keinen Sinn hier noch Arbeit zu investieren.

Danke für eure Hilfe!