Bug #320
offenAqbanking VOP mit hbci/chipkarte/secoder: 9010:Erneute Auftragseinreichung für VOP-Bestätigung notwendig.
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
Von martin vor etwa 6 Stunden 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