-
Notifications
You must be signed in to change notification settings - Fork 47
Support for Verification of Payee with APIs in FinTs #513
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
| if ($this->bpd?->vopRequiredForRequest($requestSegments) !== null) { | ||
| $hkvpp = VopHelper::createHKVPPForInitialRequest($this->bpd); | ||
| $message->add($hkvpp); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
HKVPP muss immer als erstes Segment bzw. vor dem eigentlichen Geschäftsvorfall geschickt werden.
|
Find ich sehr übersichtlich. Hoffe du kannst schnell weitermachen, es fehlt ja nicht mehr viel. Was mir bzgl. Polling und Aufsetzpunkten noch eingefallen ist, es reicht ja eigentlich nicht das jeweils letzte HIVPP an der Action zu speichern. Es müsste eine Art "CombinedHIVPP" geben, der ggf. den Report so wie in der Spezifikation beschrieben aus mehreren HIVPP Antworten zusammensetzt. Dies würde ich aber überhaupt erst weiterdenken wenn VoP bereits funktioniert und ansonsten fertig ist, da dies sowohl auf XML Ebene als auch durch "einfaches Zusammensetzen" stattfindet, also nicht trivial ist. |
Echt, wo steht das? Ich finde nur (mehrfach) den Hinweis "HKVPP und der Zahlungsauftrag werden immer zusammen geschickt."
Guter Punkt. Ich glaube, |
Hab es getestet mit HKVPX nach dem Geschäftsvorfall, ging ohne Probleme. Ich habe mich wohl durch die Ablaufdiagramme in die Irre führen lassen. Mein Test hat die Segmente nun aber vorher, das kriegst du aber einfach händisch umgeändert oder?
Es ist nicht ganz vergleichbar: Und das ist zusätzlich zu eine eventuell nötigen Konkatenation von XML Teilstücken. |
|
@ampaze ich habe versucht mit deinem REPO mal meine System zu füttern. Leider erhalte ich schon beim INIT Mein Debugging muss ich die Tage weiter machen. Jemand sonst vielleicht eine Idee? |
|
Hast du diesen PR oder #499 ausprobiert? |
#499 Ich checke diesen gleich auch noch mal. Update 3: Nach Merge von #513 sieht es besser aus, nun erhalte ich: |
|
Ok, da Einzelüberweisungen gehen, vermute ich, dass Sammelüberweisungen, Terminüberweisungen etc. noch nicht implementiert sind? |
Ich bin verwirrt, du scheinst mir PRs zu vermischen? In #499 hab ich |
|
@ampaze @seem2810 Jetzt sollte dieser PR ähnlich viel Funktionalität bieten wie #499. Das heißt, ich bin soweit fertig. Aber ich gehe davon aus, dass bei weiteren Tests (ohne dass ihr jetzt besonders ausgiebig testen müsstet; ich meine einfach nur bei den nächsten Gehversuchen) neue "Sonder"-Fälle auftauchen werden, die noch nicht abgedeckt sind. Idealerweise könntet ihr immer den Traffic mit der Bank mitschneiden und irgendwo so lokal bei euch speichern, dass nichts verloren geht. Wenn dann ein neuer Fall auftaucht, den die aktuelle Implementierung mit Wenn der Code so wie er jetzt ist zwei drei Testläufe von euch bestanden hat, würde ich mergen, dann können mehr Leute über Composer Lasst mich gerne auch wissen, wenn ihr Kommentare zum Code an sich habt, insbesondere wenn ihr die Dokumentation nicht verständlich findet. |
4ef8266 to
0843886
Compare
|
@Philipp91 ich habe gerade deine Branch vop in meinen Gemerged und getestet. |
Das ist natürlich keine besonders ausführliche Info :-) Um welche Bank handelt es sich denn? Und könntest du bitte den Nachrichtenverlauf mitschneiden ( |
|
@ampaze In der Spezifikation auf PDF-Seite 32 (E.8.1.1.1) sieht man, dass bei einem "Match" HIVPP und HITAN gleichzeitig kommen. (Wie oben diskutiert, hast du richtigerweise darauf hingewiesen, dass man deswegen HKVPA nicht einfach weglassen darf, außer es wäre auch 3091 in der Antwort enthalten.) Aber in deinem Unit-Test sind HKVPA und HITAN separat. Liegt das daran, dass du den Unit-Test einfach vom "Close Match"-Case geforkt hast (auf der darauffolgenden PDF-Seite sieht man ja, dass in dem Fall erst HKVPA und dann später erst HITAN kommt), oder macht deine Bank das wirklich immer separat? |
|
Ich habe mal Testfälle zusammengezimmert, bei denen (a) VOP übersprungen wird aber trotzdem eine TAN nötig ist bzw. (b) beides übersprungen wird, sodass ganz ohne Polling und weitere Nachfragen der Auftrag direkt ausgeführt wird. Wenn ihr solche Szenarien mit euren Banken nachstellen könnt, dann könnte ich den Test anhand von einem Nachrichtenverlauf verfeinern. Bis jetzt habe ich einfach nur Schnipsel von anderen Testfällen zusammengetragen, um Bank-Antworten zu erstellen, wie die Spezifikation sie grob umschreibt. Ein drittes interessantes Szenario wäre (siehe vorheriger Post) weiterhin (c) der Fall wo sowohl VOP als auch TAN nötig sind, aber weil es ein Match ist, kann beides in einem einzigen nächsten Request abgefrühstückt werden. Denn wenn das wirklich passiert, dann hätten wir |
Ich hatte ja oben eine Antwort eines fertigen HIVPP gepostet, da ist kein HITAN dabei. HIVPP und HITAN kann evtl. gleichzeitig kommen wenn das Prüfergebnis sofort verfügbar ist, also ohne Polling. Vlt kriege ich das getestet. |
Ah stimmt, die Verbindung zwischen den beiden Threads habe ich im Kopf nicht gemacht. Ok perfekt, dann wissen wir, dass deine Bank es schonmal nicht so handhabt. Bei anderen Banken könnte es durchaus so sein, aber darum kümmern wir uns, wenn es zum ersten Mal passiert. Mir ist dazu gerade noch der rote Kasten aufgefallen: "Beim Decoupled-Verfahren, sollte das positive Prüfergebnis dem Kunden im Kundenprodukt parallel zur Freigabeaufforderung angezeigt werden." Also ist es schon so, dass Bibliothek und Anwendung diese Gleichzeitigkeit unterstützen müssen (wenn sie dann in der Realität vorkommt). |
|
Also grundsätzlich läuft der PR bei mir jetzt. 👍 Ich habe Einzelüberweisungen und auch eine Echtzeitüberweisung gemacht. Auch mit Unterbrechung des PHP Prozesses. |
Darf man fragen wie genau du das gemacht hast mit der Echtzeitüberweisung? Welche Indikatoren nutzt du dazu um es so einzureichen? |
Dafür gibt es die |
"wäre" ... |
Hätte ich mir denken müssen, dass die Banken selbst das noch verbocken. |
|
Danke, das Beispiel kannte ich nicht, mit der Implementierung klappt ein confirm all. p.s. das war mir trotzdem nicht ganz klar, aber ich muss danach noch ein needsTan dann machen, was in dem beispiel denke ich nicht passieren würde |
Vielen Dank für den Hinweis. Für die XML-Datei wird https://github.com/nemiah/phpSepaXml genutzt. Allerdings tritt nun ein anderer Fehler auf. Das XML ist unten anbei. Liegt dies an der XML-Datei oder daran, dass für VoP noch Anpassungen an der Applikation notwendig sind? |
|
Wenn ich von 001 auf 009 wechsel erhalte ich auch die Meldung "Die Nachricht enthält Fehler." bzw "Das gesendete SEPA-Dokument ist nicht valide." Ich habe dazu ein detailiertes Log im privaten bereitgestellt. |
|
Ich würde euch empfehlen euch die entsprechende XSD zu besorgen und eure XML Dateien damit zu prüfen. Z.B. von hier https://github.com/hbci4j/hbci4java/blob/master/src/main/resources/pain.001.001.09.xsd Es reicht nicht einfach nur 001 in 009 zu ändern, es gibt auch Änderungen an der Struktur. |
|
Also mir wird das angezeigt beim validieren: Ich habe versucht das Datum auf ein DateTime zu setzen aber erhalte dann "Call to a member function format() on string in .../vendor/nemiah/php-sepa-xml/src/nemiah/phpSepaXml/SEPATransfer.php:39" Da steht ja default "1999-01-01" aber das müsste wohl mit Uhrzeit sein laut dem hier oder? |
Vielen Dank für den Hinweis, bei Ausführungsdatum und bei BIC waren Anpassungen notwendig. Allerdings treten weiterhin Fehler auf bei Sparkasse (s.u.). https://github.com/nemiah/phpSepaXml liefert für schemaLocation Folgendes:
Ist dies korrekt, oder müsste es dies sein?
Bei Variante 2 liefert die Bank für Ausführungsdatum=aktuelles Datum eine Fehlermeldung: Vollständige Fehlermeldungen: Variante 1) Variante 2 |
|
Im Test für VoP ist auch ein funktionierendes XML Beispiel mit drin: phpFinTS/lib/Tests/Fhp/Integration/Atruvia/SendTransferVoPTest.php Lines 14 to 17 in 1bfbf6b
Ansonsten würde ich vorschlagen die Diskussion zum XML bei https://github.com/nemiah/phpSepaXml weiter zu machen, hier geht es ja um VoP.
Bei nicht terminierten Überweisungen am besten immer 1999-01-01 ( |
Proposed by ampaze@ in nemiah#513 (comment). Co-authored-by: ampaze <ampaze@gmail.com> Co-authored-by: Philipp Keck <git@philippkeck.de>
@ampaze vielen Dank für Deine Hilfe, anhand des funktionierenden XML Beispiels konnte das XML-Problem gelöst werden. Werde dies bei https://github.com/nemiah/phpSepaXml einbringen. Zum Thema VoP jedoch noch hier: Bei einer Sparkassenfiliale ist die SEPA-Überweisung erfolgreich durchgeführt worden. Hierzu war nur eine Freigabe in der App notwendig (TanMode: SecureGo plus (Direktfreigabe), TanMedium nicht erforderlich). Bei einer anderen Sparkassenfiliale jedoch nicht erfolgreich, ist dazu eine Anpassung der Anwendung wie in Atruvia/SendTransferVoPTest.php notwendig? Oder sollte das nächste offizielle Release abgewartet werden? |
Für VoP sind zwingend Änderungen in den Anwendungen erforderlich. Wenn eine Überweisung bei einer Bank noch ohne diesen PR (d.h. also ohne VoP) funktioniert, dann muss das irgendein Sonderfall sein. (Bankinterne Überweisung?) |
Proposed by ampaze@ in nemiah#513 (comment). Co-authored-by: ampaze <ampaze@gmail.com> Co-authored-by: Philipp Keck <git@philippkeck.de>
|
Trotz der regen Diskussion (die vielleicht in einem separaten Bug zu XML-Formaten fortgesetzt werden kann) gab es schon länger kein berichtetes Problem mehr mit dem Code hier. Also denke ich, wir können das mergen. Dann noch die Anleitung, vielleicht noch 1-2 Wochen Reifezeit während die Leute es mit |
|
Bin auch dafür! Läuft jetzt schon einige Zeit ohne Probleme, |
|
Ja, das läuft butterweich. Getestet (mindestens) mit Sparkasse und Sparda. Sparda macht das mit dem Polling, das ging auch problemlos. |
|
Wäre es nicht auch sinnvoll die Samples auch hier in dem PR anzupassen? |
Ich finde, hier ist schon zu viel los, darum lieber separat.
Ja. Ich schicke einen PR.
Die Idee war, dass es nicht nötig ist und dass man die Benutzer der Bibliothek auf typische Fehler hinweisen kann, wie z.B. "du hast vergessen, Aber dein Anwendungsfall macht Sinn und ist wichtiger. |
That way, they can be stashed away while the user is still logging in (which requires a separate `DialogInitialization` action).
This initial version only supports confirming VOP requests (not canceling them). And for now we only extract the top-level status code from the VOP response, ignoring all the per-transfer details and additional information (like actual payee name) that the bank delivers. This is based on the draft implementation of @ampaze in nemiah#499.
Co-authored-by: ampaze <ampaze@gmail.com> Co-authored-by: Philipp Keck <git@philippkeck.de>
Proposed by ampaze@ in nemiah#513 (comment). Co-authored-by: ampaze <ampaze@gmail.com> Co-authored-by: Philipp Keck <git@philippkeck.de>

This is based on the draft implementation of @ampaze in #499.