Closed MartinWeidner closed 4 months ago
->submitTanForMechanism
ist immer ohne vorherigen ->login
, weil login ja wieder eine tan brauchen könnte.
Komisch dass dort gar keine Challenge steht.
Ich habe ->submitTanForMechanism
nun vor den Login gesetzt und bekomme jetzt zwei verschiedene Meldung:
DKB
Fatal error: Uncaught Fhp\Dialog\Exception\FailedRequestException: Request Failed:
Die Nachricht enthält Fehler. (9050);
Dialog abgebrochen (9800); Ungültige Auftragsnachricht? ( Initialisierung fehlt.) (9120)
in /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/Dialog/Dialog.php:184
Stack trace:
#0 /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/FinTs.php(756): Fhp\Dialog\Dialog->sendMessage(Object(Fhp\Message\Message))
#1 /www/htdocs/index.php(81): Fhp\FinTs->submitTanForMechanism(921, 'iPhone', '4299-11-29-11.0...', '321054')
#2 {main} thrown in /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/Dialog/Dialog.php on line 184
comdirect
Fatal error: Uncaught Fhp\Dialog\Exception\FailedRequestException: Request Failed:
Die Nachricht enthaelt Fehler. (9050);
Starke Kundenauthentifizierung notwendig. (9075);
Dialog abgebrochen (9800);
Ungueltige Auftragsnachricht? ( Ungueltige Signatur.) (9340)
in /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/Dialog/Dialog.php:184
Stack trace:
#0 /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/FinTs.php(756): Fhp\Dialog\Dialog->sendMessage(Object(Fhp\Message\Message))
#1 /www/htdocs/index.php(81): Fhp\FinTs->submitTanForMechanism(902, NULL, '26800131', '687936')
#2 {main} thrown in /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/Dialog/Dialog.php on line 184
Komisch finde ich ja, dass je nach Bank die Meldung anders geschrieben ist: Die Nachricht enthält Fehler. (9050); Die Nachricht enthaelt Fehler. (9050); Ungültige Auftragsnachricht? ( Initialisierung fehlt.) (9120) Ungueltige Auftragsnachricht? ( Ungueltige Signatur.) (9340)
->submitTanForMechanism ist immer ohne vorherigen ->login, weil login ja wieder eine tan brauchen könnte.
Ich muss meine Aussage revidieren, man kann auch ->login
vorher machen, aber es kommt auf die Bank drauf an ob das dann klappt. Man führt in dem Falle den Dialog der die TAN erforderte nicht weiter. Das war wohl bei deiner ursprünglichen Fehlermeldung der Fall.
Du musst bei submitTanForMechanism ohne vorherigen login dann alle Parameter benutzen. Probier es mal mit TANRequiredException::getTanToken
und FinTs::submitTanForToken
Hi,
bin jetzt erst dazu gekommen... comdirect wird sich wohl erledgit haben, aber ich würde gerne, dass die DKB läuft.
Du musst bei submitTanForMechanism ohne vorherigen login dann alle Parameter benutzen
Ich habe submitTanForMechanism() vor dem Login ausgeführt und alle Parameter übergeben und kommt dennoch das hier:
Fatal error: Uncaught Fhp\Dialog\Exception\TANRequiredException: Sicherheitsfreigabe erforderlich; Challenge: in /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/Dialog/Dialog.php:205 Stack trace: #0 /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/FinTs.php(756): Fhp\Dialog\Dialog->sendMessage(Object(Fhp\Message\Message)) #1 /www/htdocs/index.php(85): Fhp\FinTs->submitTanForMechanism(921, 'iPhone', '7654-12-03-13.0...', '113917', 'z+ecNzCfy24BAAC...', '666534719448=40...', '5') #2 {main} thrown in /www/htdocs/vendor/nemiah/php-fints/lib/Fhp/Dialog/Dialog.php on line 205
Bei submitTanForToken vor dem Login kommt die gleiche Meldung wieder. Challange ist ja leer, in der Exception habe ich noch das hier gefunden:
[5] => Fhp\Segment\TAN\HITANv6 Object
(
[tanProzess] => 2
[auftragsHashwert] =>
[auftragsreferenz] => 3804-12-03-13.12.17.511119
[challenge] =>
[challengeHhdUc] =>
[gueltigkeitsdatumUndUhrzeitFuerChallenge] =>
[bezeichnungDesTanMediums] =>
[segmentkopf] => Fhp\Segment\Segmentkopf Object
(
[segmentkennung] => HITAN
[segmentnummer] => 5
[segmentversion] => 6
[bezugselement] => 3
)
)
Hat das evtl. etwas damit zu tun? Ich kann jüngere Umsätze problemlos abfragen
Ich hab just zu dem Fehler den PR #166 gemacht https://github.com/nemiah/phpFinTS/pull/166/files#diff-c6b4efb5d5971b635bc3364e7d7d0629R78
Kurz: es funktioniert alles nur wird die Antwort fälschlicherweise als TAN-Anforderung gesehen.
Das Fortführen nach TAN, was für den Umsatzabruf von weiter in der Vergangenheit liegenden Umsätzen nötig wäre (d.h. die immer eine TAN verlangen), ist aktuell nur mit TAN-Callback möglich, d.h. ohne Unterbrechung der Verbindung. Weil submitTanForMechanism nicht weiß welcher Geschäftsvorfall beantwortet wird.
Das Fortführen nach TAN, was für den Umsatzabruf von weiter in der Vergangenheit liegenden Umsätzen nötig wäre (d.h. die immer eine TAN verlangen), ist aktuell nur mit TAN-Callback möglich, d.h. ohne Unterbrechung der Verbindung. Weil submitTanForMechanism nicht weiß welcher Geschäftsvorfall beantwortet wird.
Hast du für dieses TAN Callback einen Codeschnipsel für mich? Wenn ich eine TAN Abfrage bekomme, muss ich die ja irgendwie eingeben/submitten, wie mache ich das ohne Unterbrechung? TAN per AJAX irgendwo zwischenspeichern und dann im Callback submitten?
Ne das geht nur via CLI dann. Ich hab das nie verwendet, daher muss vlt jemand anders konkret sagen wie er das gemacht hat.
Sind dir die alten Umsätze so wichtig? Wenn du regelmäßig abholst ab jetzt, dann geht es ja auch ohne TAN. Ansonsten gibt es noch FinTsNew, welche das Fortführen kann, aber noch recht neu ist bzw. noch dran gebaut wird.
Nein, so wichtig sind die alten Umsätze nicht, ich werde diese auf monatlicher Basis in mein CRM importiertieren, wäre aber schön gewesen, es komplett zu haben :-)
Eine Frage interessehalber: Wie funktioniert das CLI? Aus Laravel und Linux ist mir der Umgang recht geläufig.
Hallo, der callback funktioniert nur per CLI. Es muss dafür bei login()
eine Funktion übergeben werden, über die die TAN eingelesen werden kann. Also wenn die TAN in eine Datei geschrieben wird, dann sieht es zum Beispiel so aus:
function(){
return trim(file_get_contents(__DIR__."/tan.txt"));
}
Solange die Datei leer ist, ist die Prüfung false. Sobald eine TAN drin steht, wird sie verwendet und es geht weiter.
Ich verwende bei der DKB diesen Callback (unter Symfony):
$io = new SymfonyStyle($input, $output);
$tanCallback = function() use ($io): string {
return $io->ask('TAN');
};
So werde ich direkt auf der CLI gefragt nach der TAN und die Programmausführung wartet. Vielleicht gibt es unter Laravel für die CLI etwas ähnliches?
@MartinWeidner Du könntest die neue Implementierung in der Bibliothek probieren, vielleicht funktioniert es ja damit. Beispielcode ist hier.
Hi, ich bin leider erst jetzt dazu gekommen, mich wieder mit der Thematik zu befassen.
Ich wollte noch einmal from scratch starten und habe über composer install die
nemiah/php-fints (2.0.0)
installiert.
Dann habe ich den Beispielcode bei mir eingebunden und erhalte sofort diese Meldung:
Type error: Argument 1 passed to Fhp\FinTsNew::__construct() must be an instance of Fhp\FinTsOptions, string given
Der Code sieht bisher so aus:
$options = new FinTsOptions();
$url = 'https://banking-dkb.s-fints-pt-dkb.de/fints30';
$bankCode = '12030000';
$productName = 'xxxxxxxxxxxxxxxx';
$productVersion = '1.0';
$username = 'xxxxxxxxxxxx';
$pin = 'xxxxxxxxxxxx';
$fints = new FinTsNew($url, $bankCode, $username, $pin, $productName, $productVersion);
Was mache ich falsch?
Danke im Voraus
FinTsNew($options, $credentials)
Oder den Code von master
nehmen, da ist das FinTsOptions
-Konstrukt schon wieder weg.
Hallo,
nachdem der Zugriff bei der DKB und comdirect erfolgreich war, habe ich mal die Kontoumsätze ab 1.1.19 probiert und es gab wie erwartet eine TANRequiredException. Mein iPhone hat sich auch sofort mit einer neuen TAN gemeldet (DKB) bzw. wurde mir die photoTan zum scannen angezeigt (comdirect). Die erzeugte TAN habe ich per submitTanForMechanism() übermittelt und direkt folgendes bekommen:
Kurz zuvor habe ich mir dadurch auch mein Banking gesperrt (ist aber inzwischen wieder frei).
Was ist das für ein Fehler? Muss ich submitTanForMechanism vor oder nach dem Login ausführen?
Danke im Voraus