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 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
Von ErwinRieger vor 10 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
Von martin vor 10 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