AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ZVT - Reversal

Ein Thema von BerTa · begonnen am 4. Aug 2022 · letzter Beitrag vom 5. Aug 2022
Antwort Antwort
Seite 1 von 2  1 2   
BerTa

Registriert seit: 31. Aug 2004
Ort: Dinklage
77 Beiträge
 
Delphi 7 Enterprise
 
#1

ZVT - Reversal

  Alt 4. Aug 2022, 10:18
Hallo,

ich habe versucht einen BON-Storno (ZVT-Reversal Hex 06 30) an einem Verifone V400c über Com-Schnittstelle auszulösen und bin kläglich gescheitert.
Bei Kassenanschluss ist beim V400c keine Aktivierung der Softkeys mehr möglich. Darüber konnte man sonst einen Storno am Gerät erzeugen.

Bisher habe ich die Anmeldung, Betragsübergaben und Kassenschnitt hinbekommen, aber nun bin ich mit meinem Latein am Ende.
Mein letzter Versuch:

lBcdWert:=IntegerToBcd(liBonNr);
lAiBon[0] := lBCDWert.Fraction[0];
lAiBon[1] := lBCDWert.Fraction[1];
CRC_16B([6,48,6,00,00,00,135,(lAiBon[0]),(lAiBon[1]),3]);

oBBuffer[0] := Char($10); //DLE
oBBuffer[1] := Char($02); //STX
oBBuffer[2] := Char($06); //Reversal = Storno ---------- APDU
oBBuffer[3] := Char($30); // " Hex(30) = 48 "
oBBuffer[4] := Char($06); // Länge = 6 (für APDU nach Länge) "
oBBuffer[5] := Char($00); //Passwort (=000000) "
oBBuffer[6] := Char($00); // " "
oBBuffer[7] := char($00); // " "
oBBuffer[8] := char($87); // Hex(87) = Bon-Nr. folgend = 135 "
oBBuffer[9] := char(lAiBon[0]); // "
oBBuffer[10] := char(lAiBon[1]); // "
oBBuffer[11] := Char($10); //DLE
oBBuffer[12] := Char($03); //ETX
oBBuffer[13] := Char(StrToInt(osCrcLow));
oBBuffer[14] := Char(StrToInt(osCrcHigh));

ComPort.Write(oBBuffer,15);

Leider bekomme ich nur ein NAK (Hex 15) zurück, das ist alles!
Hat jemand eine Idee?

Gruß,
Bernd
alles läuft, aber nichts geht...
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: ZVT - Reversal

  Alt 4. Aug 2022, 13:05
Möchte behaupten, dass man dem ZVT-Terminal von Verifone per COM-Schnittstelle ein Array von Bytes schicken soll (array of byte oder TBytes) und kein Array mit einzelnen Zeichen/Chars.

Ab Delphi 2009 ist Char auch 2 Byte groß. Vorher 1 Byte. Mögliche Fehlerquelle!!! Red Flag!!!!!!^1^111!elf
  Mit Zitat antworten Zitat
BerTa

Registriert seit: 31. Aug 2004
Ort: Dinklage
77 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: ZVT - Reversal

  Alt 4. Aug 2022, 13:38
Ich arbeite noch mit Delphi 7; da ist Char 1 Byte.
Wie gesagt, Betragsübergaben usw. funktionieren ja auch...
alles läuft, aber nichts geht...
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.772 Beiträge
 
Delphi 12 Athens
 
#4

AW: ZVT - Reversal

  Alt 4. Aug 2022, 13:40
Die mögliche Fehlerquelle trifft aber bestimmt nur dann zu, wenn er das nicht mit dem in seinem Benutzerprofil
angegebenen D7 entwickelt hat sondern D2009+
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: ZVT - Reversal

  Alt 4. Aug 2022, 15:56
Die mögliche Fehlerquelle trifft aber bestimmt nur dann zu, wenn er das nicht mit dem in seinem Benutzerprofil
angegebenen D7 entwickelt hat sondern D2009+
Na danke für den unnötigen Beitrag! "Hast du das schon ins QP eingetragen?"

Wir wissen doch beide, dass der TE oder sein Nachfolger irgendwann mal wechseln wird und dann der Code sowas von gegen die Wand fährt.
Am Ende ist der Ansatz mit Char/Strings etc. falsch, weil:
Zitat:
Bei der ZVT Kassenschnittstelle handelt es sich um ein klassisches Byte-basiertes Kommunikationsprotokoll. In den Anfängen der Kassenschnittstelle wurde eine Liste von Feldern definiert. Einige müssen bei jedem Aufruf verbindlich übergeben werden, andere können optional transferiert werden.
https://www.treibauf.ch/kassenschnittstelle-zvt/

Wenn ich mir den Punkt Reversal (06 30) auf PDF-Seite 41/42 (https://www.terminalhersteller.de/do...9_final_en.pdf) anschaue, vermute ich, dass hier mit der Länge von sechs zu kurz gedacht ist.
Ich vermute die Length XX beziehen sich nicht nur auf das Password, sondern auch auf receipt-no, amount und restliche Elemente des Data block.
Also mindestens 10 statt 6, oder? Insofern bis zum Ende vom Array der Data block ist.
Und ob der Data block richtig gebaut ist, bedarf auch einer näheren Untersuchung. Da stecke ich nicht genug drin.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.010 Beiträge
 
Delphi 2009 Professional
 
#6

AW: ZVT - Reversal

  Alt 4. Aug 2022, 18:01
Muss man das nicht als ComPort.Write(oBBuffer[0],15); übergeben?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von PaPaNi
PaPaNi

Registriert seit: 31. Mär 2022
45 Beiträge
 
#7

AW: ZVT - Reversal

  Alt 4. Aug 2022, 18:15
Muss man das nicht als ComPort.Write(oBBuffer[0],15); übergeben?
Das würde ich auch als erstes ausprobieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#8

AW: ZVT - Reversal

  Alt 4. Aug 2022, 18:21
Mit [0] ist es nie falsch.

Ohne ginge eventuell auch, aber nur wenn oBBuffer ein statisches Array ist.


Natürlich kann man hier auch ein Array of AnsiChar, bzw. einen AnsiString (oder besser RawByteString, in Delphi's ab 2009) verwenden.
Oder eben eine Array of Byte, bzw. TBytes.



Was genau ist denn nun oBBuffer?
Es scheint ja irgendwas mit Char zu sein.




Ach ja, es sieht so aus, als wenn in oBBuffer[2] bis [12] das "Selbe" drin sterhen sollte, wie in dem Aray an bei CRC_16B?

Wieso ist es denn nicht das "Gleiche", bzw. besser sogar das "Selbe" ?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Aug 2022 um 18:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#9

AW: ZVT - Reversal

  Alt 4. Aug 2022, 18:38
Ach ja,

Code:
CRC_16B   = oBBuffer

-         = $10 // DLE
-         = $02 // STX
6         = $06 // Storno-APDU
48        = $30 // 48
6         = $06 // 6 = APDU-Length ( Password bis lAiBon ??? )
00        = $00 // 000000 = Password
00        = $00 // ...
00        = $00 // ...
135       = $87 // 135 = Bon-Nr.
lAiBon[0] = lAiBon[0]
lAiBon[1] = lAiBon[1]
3         = $10 // DLE <<<<<<<<<<<<<<<<<<<<<<<<<
-         = $03 // ETX <<<<<<<<<<<<<<<<<<<<<<<<<
CRC       = StrToInt(osCrcLow)
CRC       = StrToInt(osCrcHigh)

Bei CRC_16B fehlt eine $10 ?


Wieso kopiert man das Array von CRC_16B nicht direkt in oBBuffer?
Da wären dann nur noch die ersten beiden Bytes nötig und anschließend noch das CRC
und alles dazwischen gäbe es nur einmal, ohne Fehler dank doppelter Wuchhaltung.

Und wieso kommt jemand auf die komische Idee ALLES zwanghaft als Hexadezimal zu übergeben, und dann sinnlos als Kommentar nochmal den richtigen Wert,
anstatt gleich den richtgen Wert zu übergeben und so potentielle Übersetzung-/Umrechnungs-/Konvertierungsfehler auszuschließen?

Weshalb sind STX, ETX und DLE keine Konstanten?

Warum sind osCrcLow/High als String?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Aug 2022 um 18:47 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: ZVT - Reversal

  Alt 5. Aug 2022, 09:22
Ok, anhand dieses Repository (https://github.com/Portalum/Portalum...c/Portalum.Zvt) komm ich auch auf eine ähnliche Zusammenstellung für Reversal:
Code:
DLE
STX
06
30
06
PW
PW
PW
87
RN
RN
DLE
ETX
CS
CS
Die Länge mit sechs scheint sich tatsächlich nur auf drei Bytes Passwort, $87 als Marker für die Rechnungsnummer und zwei Byte für die Rechnungsnummer zu sein. Da ziehe ich meinen obigen Einwand zurück.
Daher kann es eigentlich nur sein, dass das Password, die Rechnungsnummer oder die Checksumme falsch sind.

EDIT: Oder das schreiben auf dem ComPort, wobei ich hoffentlich davon ausgehe, dass dies korrekt gehandelt wird?

Geändert von TiGü ( 5. Aug 2022 um 09:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz