phpFinTS icon indicating copy to clipboard operation
phpFinTS copied to clipboard

Verification of Payee (VoP)

Open wienen-it-dev opened this issue 8 months ago • 20 comments

Hallo zusammen,

wird es für die neue FinTS Spezifikation "Namensabgleich (Verification of Payee)" eine Änderung für php-fints geben, und sind Änderungen an der eigenen Applikation notwendig?

https://www.fints.org/de/spezifikation/aenderungen

wienen-it-dev avatar Apr 28 '25 05:04 wienen-it-dev

Das hier sollte tatsächlich bald relevant werden und, so wie ich das sehe, auch ein Blocker für SEPA-Überweisungen sein. Heise hatte kürzlich einen allgemeinen Artikel dazu:

https://www.heise.de/news/IBAN-Namensabgleich-wird-Pflicht-fuer-EU-Banken-Betrugsgefahr-bleibt-10476058.html

Es wird für alle Banken verpflichtend, also am Ende leider auch für uns.

Die Kollegen sind auch nicht gerade begeistert: https://homebanking-hilfe.de/forum/topic.php?t=26979

roben avatar Jul 07 '25 06:07 roben

Heute kam mit der FinTS Bankenliste die Info, dass VOP ab Anfang Oktober umzusetzen ist? Gibt es dazu Neuigkeiten zur Implementierung in der Schnittstelle?

witschko avatar Aug 28 '25 13:08 witschko

Oktober rückt näher (obwohl es bankentypisch bestimmt wieder verschoben wird), die Banken die wir nutzen bieten Verification of Payee noch nicht an.

Dem Kundenprodukt wird durch das Vorhandensein der Parametersegmente von HKVPP, HKVPA und HKVOO in der BPD mitgeteilt, dass das Kreditinstitut die VOP-Verarbeitung bereits unterstützt.

Ich könnte daher aktuell höchstens eine Blind-Implementation machen ohne es testen zu können. Gibt es hier schon Nutzer deren Banken VoP schon anbieten?

ampaze avatar Sep 02 '25 09:09 ampaze

Ich könnte daher aktuell höchstens eine Blind-Implementation machen ohne es testen zu können. Gibt es hier schon Nutzer deren Banken VoP schon anbieten?

Ich habe mal bei Volksbank und Sparkasse nachgeschaut. Volksbank listet die Segmente überhaupt nicht, Sparkasse folgendermaßen: HKVPP:N:HKVPA:N:HKVOO:N

Ich vermute "N" steht dabei für "nicht unterstützt"?

witschko avatar Sep 03 '25 07:09 witschko

Auf die Schnelle würde ich denken, dass heißt für diese Segmente ist keine TAN erforderlich.

ampaze avatar Sep 04 '25 06:09 ampaze

Ah ok, verstehe. Kann ich dann irgendwas zur Verfügung stellen, das bei der Blind-Implementierung helfen würde?

witschko avatar Sep 04 '25 08:09 witschko

Ich weiß aktuell nicht wie der ganze Prozess aussähe, bislang ist mir nur klar:

Es muss SendSEPATransfer.php abgeändert werden

  • prüfen ob VoP erforderlich, via HIVPPS (einfach)
  • wenn ja, dann muss beim Einreichen der Überweisung ein HKVPP Segment mitgesendet werden (einfach)
  • dann muss in processResponse auf die Antwort (HIVPP) reagiert werden, es kann das Prüfergebnis enthalten sein, muss aber nicht
  • ggf. wenn das Ergebnis nicht bereitsteht, muss periodisch das Ergebnis des Prüfauftrags abgefragt (via HKVPP + VOP-ID) werden
  • der Kunde oder der Programmierer (also z.B. immer trotzdem überweisen) muss entscheiden was abhängig vom Ergebnis passieren soll.
  • wenn die Überweisung unabhängig vom Ergebnis trotzdem getätigt werden soll, dann muss die Überweisung erneut eingereicht werden, diesmal mit HKVPA-Segment und passende VOP-ID
  • Wenn der Name übereinstimmt ist es auch möglich, auf die VoP Bestätigung (HKVPA) zu verzichten, das hängt aber wieder von der Bank ab

Also alles nicht so einfach, ggf. kann man es mit dem Decoupled Tan Mechanismus verbinden.

Was meint @Philipp91 ?

ampaze avatar Sep 04 '25 12:09 ampaze

ggf. kann man es mit dem Decoupled Tan Mechanismus verbinden.

In meiner Endanwendung ist phpFinTS nicht die einzige Bibliothek um Umsätze abzurufen. Gerade für ausländische Banken habe ich auch andere Plugins. Dort hat sich das Muster bewährt, neben needsTan() (wo man dem Endanwender den Inhalt eines TanRequests präsentieren und auf seine Mitwirkung/Rückmeldung hoffen muss) auch needsTime() zu haben (wo man dem Nutzer einfach eine Meldung mit einer Statusinformation zeigt und ansonsten nur wartet).

Philipp91 avatar Sep 18 '25 22:09 Philipp91

ggf. wenn das Ergebnis nicht bereitsteht, muss periodisch das Ergebnis des Prüfauftrags abgefragt (via HKVPP + VOP-ID) werden

Muss man das auch dann machen, wenn man eh vorhat, das Ergebnis zu ignorieren und die Überweisung trotzdem zu tätigen?


Vielleicht könnten wir zwei neue APIs haben:

  1. needsConfirmation() zeigt an, dass man die Aktion noch zusätzlich rückbestätigen muss (mit confirm($action) oder so) bevor sie wirklich ausgeführt wird.
  2. Interessierte Anwendungen können zusätzlich getVerificationInformation() oder so aufrufen, um ihren Endanwender zu informieren sodass er entscheiden kann, ob er rückbestätigen will. Wobei diese Funktion auch ein "noch nicht verfügbar" Signal zurückgeben kann, sodass die Anwendung es später nochmal probieren muss.

Philipp91 avatar Sep 18 '25 22:09 Philipp91

ggf. wenn das Ergebnis nicht bereitsteht, muss periodisch das Ergebnis des Prüfauftrags abgefragt (via HKVPP + VOP-ID) werden

Muss man das auch dann machen, wenn man eh vorhat, das Ergebnis zu ignorieren und die Überweisung trotzdem zu tätigen?

Ich glaube ja, weil man die VOP-ID die man für die Freigabe braucht, erst bekommt wenn das Ergebnis vorliegt.

Vielleicht könnten wir zwei neue APIs haben:

  1. needsConfirmation() zeigt an, dass man die Aktion noch zusätzlich rückbestätigen muss (mit confirm($action) oder so) bevor sie wirklich ausgeführt wird.
  2. Interessierte Anwendungen können zusätzlich getVerificationInformation() oder so aufrufen, um ihren Endanwender zu informieren sodass er entscheiden kann, ob er rückbestätigen will. Wobei diese Funktion auch ein "noch nicht verfügbar" Signal zurückgeben kann, sodass die Anwendung es später nochmal probieren muss.

needsTime und needsConfirmation klingt gut.

ampaze avatar Sep 19 '25 10:09 ampaze

Hallo zusammen,

vielen Dank, mittlerweile gab es einige Beiträge. Gibt es bereits einen Ansatz oder eine funktionierende Lösung?

Bei der Sparkasse tritt seit neuestem folgender Fehler auf:

FinTS errors: 9050 (global): Die Nachricht enthält Fehler. 9076 (wrt seg 3): Namensabgleich erforderlich. Bitte Software-Update prüfen. FinTS warnings: 3905 (global): Es wurde keine Challenge erzeugt. Request segments: HKCCS:3:1+DEXXXXXXXXXXXXXXXXXXXX:WXXXXXXXXXX:190000000::280:00000000+urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03+@1733@ 0000000000 2025-10-05T21:02:14 1 29.49 190000000 0000000000 TRF 1 29.49 SEPA 1999-01-01 190000000 DEXXXXXXXXXXXXXXXXXXXX WXXXXXXXXXX SLEV NOTPROVIDED 29.49 CXXXXXXXXXX B Solutions GmbH DEXXXXXXXXXXXXXXXXXXXX RE-Nr R000000000 Knd-Nr S0000000000 BelegID 0000

wienen-it-dev avatar Oct 06 '25 04:10 wienen-it-dev

Mein letzter Stand ist, dass es erst ab 9.10 Pflicht ist. Die Banken auf die ich Zugriff habe, sollen aber seit heute zumindest den Prozess mit VoP ermöglichen. Darauf musste ich warten.

Ich kann leider frühestens Ende der Woche an meinem PR (https://github.com/nemiah/phpFinTS/pull/499) dazu weiterarbeiten.

Hast du den Zwischenstand aus https://github.com/nemiah/phpFinTS/pull/499 mal ausprobiert?

ampaze avatar Oct 06 '25 08:10 ampaze

Banking hat bei uns (Volksbank und Sparkasse) aufgehört zu funktionieren genau wegen dem Thema.

'HIRMG:3:2+9050::Die Nachricht enthält Fehler.'HIRMS:4:2:3+9076::Namensabgleich erforderlich.'HNSHA:5:2+4127560''HNHBS:6:1+2'

timrasche avatar Oct 08 '25 08:10 timrasche

Mein letzter Stand ist, dass es erst ab 9.10 Pflicht ist. Die Banken auf die ich Zugriff habe, sollen aber seit heute zumindest den Prozess mit VoP ermöglichen. Darauf musste ich warten.

Ich kann leider frühestens Ende der Woche an meinem PR (#499) dazu weiterarbeiten.

Hast du den Zwischenstand aus #499 mal ausprobiert?

Ich habe es mit dem Zwischenstand getestet. Es fehlten noch Annotations in den Segmenten, aber ich bin einen Schritt weitergekommen. Als Rückmeldung erhalte ich nun nicht mehr die Meldung "Namensabgleich erforderlich", sondern:

HNHBK:1:3+000000000692+300+1E5100811395142+3+1E5100811395142:3'HNVSK:998:3+PIN:2+998+1+2::LH86n1cZw5kBAADMHi9kiLBCCgQA+1:20251008:113952+2:2:13:@8@00000000:5:1+280:43060967:PRIVATE___________:V:0:0+0'HNVSD:999:1+@462@HNSHK:2:4+PIN:2+946+5013915+1+1+2::LH86n1cZw5kBAADMHi9kiLBCCgQA+1+1:20251008:113952+1:999:1+6:10:19+280:43060967:PRIVATE___________:S:0:0'HIRMG:3:2+3060::Bitte beachten Sie die enthaltenen Warnungen/Hinweise.+3905::Es wurde keine Challenge erzeugt.'HIRMS:4:2:3+3040::Es liegen weitere Informationen vor.:staticscrollref'HIRMS:5:2:5+3945::Freigabe ohne VOP-Bestätigung nicht möglich.'HIVPP:6:1:3+++@36@6b1a5ec1-9af5-4398-b0da-6526cbf210dd+++++2'HNSHA:7:2+5013915''HNHBS:8:1+3'

Leider ist mir nicht ganz klar, wie man von hier aus weitermachen kann...

witschko avatar Oct 08 '25 09:10 witschko

Hast du den Zwischenstand aus #499 mal ausprobiert?

Ich habe es mit dem Zwischenstand getestet. Es fehlten noch Annotations in den Segmenten, aber ich bin einen Schritt weitergekommen. Als Rückmeldung erhalte ich nun nicht mehr die Meldung "Namensabgleich erforderlich", sondern:

Vielen Dank, ebenfalls getestet mit Zwischenstand aus #499 mit folgendem Fehler:

Call to undefined method Fhp\Segment\VPP\ParameterNamensabgleichPruefauftrag::getDescriptor()

wienen-it-dev avatar Oct 08 '25 11:10 wienen-it-dev

Ich habe es mit dem Zwischenstand getestet. Es fehlten noch Annotations in den Segmenten, aber ich bin einen Schritt weitergekommen. Als Rückmeldung erhalte ich nun nicht mehr die Meldung "Namensabgleich erforderlich", sondern:

Danke, auf was hast du die Annotation bei $vopPflichtigerZahlungsverkehrsauftrag geändert? Welche Annotations fehlten noch?

ampaze avatar Oct 09 '25 07:10 ampaze

Ich habe es mit dem Zwischenstand getestet. Es fehlten noch Annotations in den Segmenten, aber ich bin einen Schritt weitergekommen. Als Rückmeldung erhalte ich nun nicht mehr die Meldung "Namensabgleich erforderlich", sondern:

Danke, auf was hast du die Annotation bei $vopPflichtigerZahlungsverkehrsauftrag geändert? Welche Annotations fehlten noch?

Habe in #499 darauf geantwortet.

Annotationen habe ich prinzipiell in allen Klassen in den Segmenten unter VPP hinzugefügt.

witschko avatar Oct 09 '25 08:10 witschko

Mal ein Vorschlag: Bis zum nächsten Release bauen wir VoP so weit ein, dass man dem Nutzer den Zusammenfassungs-Text zur Bestätigung vorlegen kann und dass man dann die Zahlung durchboxen kann.

Erst in einem zukünftigen Release bauen wir diese Feinheiten:

  1. Zahlung nach Durchsicht der Details ablehnen.
  2. Detaillierte Informationen zur VoP-Prüfung (ggf. pro Empfänger / pro Teil-Auftrag) auslesen.
  3. Reports von der Bank die so groß sind, dass sie in Teilstücken übertragen werden müssen.

Für alle diese Fälle brauchen wir ohnehin erst Testdaten, also die realen Antworten einer Bank.

Philipp91 avatar Oct 17 '25 20:10 Philipp91

Hallo zusammen! Ich war leider eine Weile etwas aus dem Thema draußen und habe den Überblick verloren. Gibt es etwas, das man testen oder bei dem man unterstützen kann? Wann wird voraussichtlich das nächste Release erscheinen?

witschko avatar Nov 18 '25 12:11 witschko

Ja man kann testen:

"nemiah/php-fints": "dev-master#a1b3f9d"

Und den Beispielcode hier anschauen.

Release kommt drauf an, wann @nemiah dafür Zeit hat.

Philipp91 avatar Nov 18 '25 21:11 Philipp91