Skip to content

Atruvia / VoP / Decoupled transfer gets stuck after confirmVop() with needsTan=true, no polling possible #568

Description

@2k9

Hi,

I am using phpFinTS with an Atruvia/VR bank and I can reproduce a problem when submitting a SEPA transfer that requires SecureGo plus direct approval.

Environment

  • phpFinTS via PHP worker
  • Bank: VerbundVolksbank OWL eG
  • TAN mode reported by the bank: 946
  • TAN procedure name: SecureGo plus (Direktfreigabe)
  • technischeIdentifikationTanVerfahren = DECOUPLED
  • bezeichnungDesTanMediumsErforderlich = 0
  • manuelleBestaetigungMoeglich = 1
  • automatisierteStatusabfragenErlaubt = 1

Expected behavior
After the transfer is executed and the user confirms the push request in the SecureGo plus app, phpFinTS should continue polling or otherwise reach a final success state so that the transfer can be marked as completed.

Actual behavior
The flow gets stuck after VOP confirmation:

  • execute() returns needsPollingWait=true
  • initial polling leads to needsVopConfirmation=true
  • confirmVop() is called successfully
  • after that:
  • isDone=false
  • needsTan=true
  • needsPollingWait=false
  • needsVopConfirmation=false
  • successMessage=NULL
  • pollingInfo=NULL

At that point, phpFinTS seems unable to continue the transfer.
If I try to call submitTan() I get:
Cannot submit TAN for a decoupled TAN mode

If I try to call pollAction() after confirmVop(), I get:
This action is not awaiting polling for a long-running operation

So the transfer remains in an unresolved state even though the app approval was already granted.

Reproduction log

[2026-06-29 11:43:18] ID 1 AFTER EXECUTE isDone=false
[2026-06-29 11:43:18] ID 1 AFTER EXECUTE needsTan=false
[2026-06-29 11:43:18] ID 1 AFTER EXECUTE needsPollingWait=true
[2026-06-29 11:43:20] ID 1 INITIAL AFTER POLL 1 needsVopConfirmation=true
[2026-06-29 11:43:20] ID 1 INITIAL AFTER POLL 1 vopConfirmationRequest=...
[2026-06-29 11:43:21] ID 1 AFTER CONFIRM_VOP isDone=false
[2026-06-29 11:43:21] ID 1 AFTER CONFIRM_VOP needsTan=true
[2026-06-29 11:43:21] ID 1 AFTER CONFIRM_VOP needsPollingWait=false
[2026-06-29 11:43:21] ID 1 AFTER CONFIRM_VOP needsVopConfirmation=false
[2026-06-29 11:43:21] ID 1 AFTER CONFIRM_VOP pollingInfo=NULL
[2026-06-29 11:43:21] ID 1 UNSUPPORTED_DECOUPLED_STATE isDone=false
[2026-06-29 11:43:21] ID 1 UNSUPPORTED_DECOUPLED_STATE needsTan=true
[2026-06-29 11:43:21] ID 1 UNSUPPORTED_DECOUPLED_STATE needsPollingWait=false
[2026-06-29 11:43:21] ID 1 UNSUPPORTED_DECOUPLED_STATE needsVopConfirmation=false

The bank only reports one TAN mode for this access:

[946] => SecureGo plus (Direktfreigabe)
technicalIdentification = DECOUPLED
bezeichnungDesTanMediumsErforderlich = 0

1.) Is this a known limitation or bug in phpFinTS for Atruvia banks / decoupled SecureGo plus flows after confirmVop()?

2.) If yes, is there a supported way to continue the flow after VOP approval, or should the library stay in polling mode instead of ending up in needsTan=true?

I also verified that this is not caused by a wrong TAN mode selection. The bank only reports mode 946, and getTanMedia() is not applicable because bezeichnungDesTanMediumsErforderlich = 0.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions