Projekt

Allgemein

Profil

Aktionen

Bug #320

offen

Aqbanking VOP mit hbci/chipkarte/secoder: 9010:Erneute Auftragseinreichung für VOP-Bestätigung notwendig.

Von ErwinRieger vor 14 Tagen hinzugefügt. Vor 11 Tagen aktualisiert.

Status:
Feedback
Priorität:
Normal
Kategorie:
AqBanking
Beginn:
16.10.2025
Abgabedatum:
Betriebssystem:
Linux
AqBanking-Version:
Git 132660f088b5aaeaf9154103ed02e71ebdc0b353 vom 16.10.25
Anwendung:
aqbanking-cli
Version der Anwendung:
AqBanking-CLI: 6.7.1 Gwenhywfar : 5.13.0.0 AqBanking : 6.6.4.0

Beschreibung

Hallo, ich versuche gerade eine sepa-einzelüberweisung bei der Volksbank Allgau-Oberschwaben (VBAO) zu
machen. Zugriff mit VOP über HBCI/Chipkarte/Secoder.

Nachdem der VOP-abgleich durchgeführt wurde, bekomme ich die folgende fehlermeldung und die transaktion wird abgebrochen:

HBCI: 9010:Erneute Auftragseinreichung für VOP-Bestätigung notwendig.

Dabei ist es egal, ob ein MATCH oder ein CLOSE-MATCH vorliegt.

Logdateien:
a_log_2.txt: Versuch mit ganzem empfängernamen, MATCH
a_log_4.txt: Versuch mit kurzem empfängernamen, CLOSE_MATCH

Laut FinTS_3.0_Messages_Geschaeftsvorfaelle_VOP_1.01_2025_06_27_FV.pdf, muss in diesem fall wohl der
auftrag erneut eingereicht werden. Siehe kapitel "E.8.2 VOP mit Kryptographie und ggf. Secoder", dort steht:

...werden HKVPA und der Zahlungsauftrag und die (Secoder-)Signatur immer zusammen eingereicht. Der HKVPA gilt
hier als die Bestätigung, dass der Auftrag ausgeführt werden soll.

Als workaround habe ich folgende änderung in cbox_vophbci.c eingebaut:

diff --git a/src/libs/plugins/backends/aqhbci/applayer/cbox_vophbci.c b/src/libs/plugins/backends/aqhbci/applayer/cbox_vophbci.c
index 05b4a69d..5d8d4f88 100644
--- a/src/libs/plugins/backends/aqhbci/applayer/cbox_vophbci.c
+++ b/src/libs/plugins/backends/aqhbci/applayer/cbox_vophbci.c
@@ -313,8 +313,14 @@ AH_JOBQUEUE *_createQueueForStage2(AB_USER *user, AH_JOB *vppJob, AH_JOB *vpaJob
     }
   }

-  if (vppJob && workJob) {
-    if (!AH_Job_HasResultWithCode(vppJob, 25) && !!AH_Job_HasResultWithCode(vppJob, 20)) {
+  if (vppJob && workJob && (AH_Job_HasResultWithCode(vppJob, 20) || AH_Job_HasResultWithCode(vppJob, 3090))) {
+
+    int resend = !AH_Job_HasResultWithCode(vppJob, 25);
+    if (!resend && getenv("AQ_VOP_FORCE"))
+      DBG_ERROR(AQHBCI_LOGDOMAIN, "_createQueueForStage2: force-hack active!!!");
+      resend = 1;
+
+    if (resend) {
       /* result "MATCH" not found, need to add workJob again */
       AH_Job_Attach(workJob);
       rv=AH_JobQueue_AddJob(jobQueue, workJob);

Nun kann ich das erneute versenden des auftrages mit hilfe der umgebungsvariable AQ_VOP_FORCE erzwingen.

Logdateien:
a_log_5.txt: Versuch mit ganzem empfängernamen, MATCH (bricht später ab wegen bug-xxx-kommtnoch)
a_log_6.txt: Versuch mit kurzem empfängernamen, CLOSE_MATCH (läuft durch, überweisung erfolgreich)


Dateien

a_log_2.txt (30,8 KB) a_log_2.txt Versuch mit ganzem empfängernamen, MATCH ErwinRieger, 16.10.2025 15:58
a_log_4.txt (32,8 KB) a_log_4.txt Versuch mit kurzem empfängernamen, CLOSE_MATCH ErwinRieger, 16.10.2025 15:59
FinTS_3.0_Messages_Geschaeftsvorfaelle_VOP_1.01_2025_06_27_FV.pdf (930 KB) FinTS_3.0_Messages_Geschaeftsvorfaelle_VOP_1.01_2025_06_27_FV.pdf ErwinRieger, 16.10.2025 16:19
a_log_5.txt (33,8 KB) a_log_5.txt Erneutes senden, versuch mit ganzem empfängernamen, MATCH, sepa-transaktion NOTOK ErwinRieger, 16.10.2025 16:29
a_log_6.txt (35,7 KB) a_log_6.txt Erneutes senden, versuch mit kurzem empfängernamen, CLOSE_MATCH, sepa-transaktion OK ErwinRieger, 16.10.2025 16:31
Aktionen #1

Von ErwinRieger vor 14 Tagen aktualisiert

bug-xxx-kommtnoch = Bug #321

Aktionen #2

Von martin vor 13 Tagen aktualisiert

Moin,

die Specs habe ich natuerlich, aber danke ;-)

+  if (vppJob && workJob && (AH_Job_HasResultWithCode(vppJob, 20) || AH_Job_HasResultWithCode(vppJob, 3090))) {
+
+    int resend = !AH_Job_HasResultWithCode(vppJob, 25);
+    if (!resend && getenv("AQ_VOP_FORCE"))
+      DBG_ERROR(AQHBCI_LOGDOMAIN, "_createQueueForStage2: force-hack active!!!");
+      resend = 1;
+
+    if (resend) {
       /* result "MATCH" not found, need to add workJob again */
       AH_Job_Attach(workJob);
       rv=AH_JobQueue_AddJob(jobQueue, workJob);

Was mir hier auffaellt: Da Du keine geschweifte Klammer gesetzt hast, wird

resend = 1;

immer ausgefuehrt.

Das Ergebnis ist aber trotzdem korrekt, sollte aber einfacher zu erreichen sein: In E.8.2 steht ja, dass immer auch der workJob in die Queue gestellt werden muss, also habe ich das mal so eingebaut. Geht das mit der aktuellen GIT Version bei Dir auch?

Gruss
Martin

Aktionen #3

Von martin vor 13 Tagen aktualisiert

  • Status wurde von New zu Feedback geändert
Aktionen #4

Von ErwinRieger vor 11 Tagen aktualisiert

Hallo Martin,

Was mir hier auffaellt: Da Du keine geschweifte Klammer gesetzt hast, wird

[...]

immer ausgefuehrt.

Ups, stimmt.

Das Ergebnis ist aber trotzdem korrekt, sollte aber einfacher zu erreichen sein: In E.8.2 steht ja, dass immer auch der workJob in die Queue gestellt werden muss, also habe ich das mal so eingebaut. Geht das mit der aktuellen GIT Version bei Dir auch?

Ja, funktioniert mit der GIT version von heute.

Wie ist das, wenn _handleStage1(), mit resultat 0, hier verlassen wird:

    else if (AH_Job_HasResultWithCode(vppJob, 9210)) {
      DBG_ERROR(AQHBCI_LOGDOMAIN, "Result of VOP: Transaction rejected (e.g. non-existent IBAN).");
      GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, I18N("Result of VOP: Transaction rejected (e.g. non-existent IBAN)."));
    }

, dann wird doch auch _handleStage2() aufgerufen und der job nochmals versendet. Ist das so gewollt?

Gruss
Martin

Gruss, Erwin

Aktionen #5

Von martin vor 11 Tagen aktualisiert

Moin Erwin,

da hast Du jetzt wieder Recht ;-)
Ab jetzt wird da ein Fehler zurueckgegeben.

Waere aber eh nix passiert, weil die Bank ja den Auftrag schon abgelehnt hat und sich vermutlich auch danach nicht ueberzeugen laesst, ihn doch noch anzunehmen ;-)

Gruss
Martin

Aktionen

Auch abrufbar als: Atom PDF