Epson TSE Anmeldung -> error (gelöst)

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Epson TSE Anmeldung -> error (gelöst)

Beitrag von Peter Schweizer »

Hallo Wissende,
ich versuche nach dem TSE Setup (Puk,Pin setzen) das Login als Administrator und bekomme als JSON-Antwort:

{"error":{"errorinfo":"syntax error at line 8 near: ","fact":""},"function":"","output":{},"result":"JSON_ERROR_WRONG_JSON_FORMAT"}

Code: Alles auswählen

FUNCTION TSE_AuthAdmin()
	LOCAL C2H, cHash
	LOCAL aParameter := {}
	scHash :=''		// STATIC zur Sicherheit leermachen
	AADD(aParameter, {'userId','Administrator'}  )
	TSE_Befehl('GetChallenge', aParameter )
	* als Ergebniss ist der challenge-String  der Static  scHash zugewiesen
	* scHash = "fb5ff0b51bf0fd97"
	*-------------------------------------------------------------
	* Hash berechnen
	Set( _SET_HASH, 256 )     // sha256 einstellen
	C2H := Char2Hash( scHash + 'EPSONKEY')
	* c2h = 'DF5436A3C42216BB3E73D79D22E773EFFB255A7EFE7CEF76C073CCFFA2011F05'
	cHash := bin2Base64( c2h )
	* chash='REY1NDM2QTNDNDIyMTZCQjNFNzNENzlEMjJFNzczRUZGQjI1NUE3RUZFN0NFRjc2QzA3M0ND
RkZBMjAxMUYwNQ=='
	AADD(aParameter, {'pin' , pin })  // Administrator PIN
	AADD(aParameter, {'hash',  cHash  }  )

	IF TSE_Befehl('AuthenticateUserForAdmin', aParameter )
[b]-->  jetzt kommt der oben genannte Fehler	[/b]
...
der Json Befehlsstring, der in xml-verpackt an die TSE geschickt wird, sieht so aus:

Code: Alles auswählen

{ 	"storage": { "type": "TSE","vendor": "TSE1"	},
  		"function": "AuthenticateUserForAdmin",
  		"input": { "userId":"Administrator","pin":"12345","hash":"REY1NDM2QTNDNDIyMTZCQjNFNzNENzlEMjJFNzczRUZGQjI1NUE3RUZFN0NFRjc2QzA3M0ND
RkZBMjAxMUYwNQ=="},
  	"compress": { "required": false, "type": "" }
}
Hat da einer eine Idee was das Falsch sein könnte ?
Gruß Peter
Zuletzt geändert von Peter Schweizer am Fr, 08. Mai 2020 9:28, insgesamt 1-mal geändert.
Gruss Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Epson TSE Anmeldung -> error

Beitrag von Jan »

Peter,

ich glaube der mag entgegen der Doku das "type": "" nicht. Mach da doch mal ein "type":"zip_deflate" draus.

Ich muß allerdings gestehen, das ich das Setzen von PIN und PUK über das Webinterface gemacht hatte. Das war es mir einfach nicht wert, dafür Code zu schreiben. Weil das nur interne Kassen sind, muß das nicht ständig gemacht werden. Wären das Kassen zum Verkauf wäre das natürlich was anderes. Und bevor jetzt da was kommt: Ja, ich weiß da sich den letzten Satz zweideutig ausgedrückt habe.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Epson TSE Anmeldung -> error

Beitrag von Peter Schweizer »

Jan,
der direkte xml Antwortstring sieht nach deiner vorgeschlagenen Änderung wie vorher aus:

Code: Alles auswählen

  <device_data>
    <sequence>0</sequence>
    <device_id>local_TSE</device_id>
    <data>
      <type>operateresult</type>
      <success>true</success>
      <code>SUCCESS</code>
      <resultdata>{&quot;error&quot;:{&quot;errorinfo&quot;:&quot;syntax error at line 8 near: &quot;,&quot;fact&quot;:&quot;&quot;},&quot;function&quot;:&quot;&quot;,&quot;output&quot;:{},&quot;result&quot;:&quot;JSON_ERROR_WRONG_JSON_FORMAT&quot;}</resultdata>
      <resultformat>string</resultformat>
    </data>
    <data_id>0</data_id>
  </device_data>
Json:
{"error":{"errorinfo":"syntax error at line 8 near: ","fact":""},"function":"","output":{},"result":"JSON_ERROR_WRONG_JSON_FORMAT"}

Gruß Peter
Gruss Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Epson TSE Anmeldung -> error

Beitrag von Jan »

Peter,

was steht denn in Zeile 8 der XML drin?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Epson TSE Anmeldung -> error

Beitrag von Peter Schweizer »

Jan,
jetzt kommt der fehler in zeile 6.
{"error":{"errorinfo":"syntax error at line 6 near: ","fact":""},"function":"","output":{},"result":"JSON_ERROR_WRONG_JSON_FORMAT"}

wie ich jetzt noch im fiscal-community-forum gelesen habe, gibt es da für diesen Fehler die Aussage, daß etwas mit den "white spaces"
nicht stimmt, die offensichtlich wichtig sind.
Nur wo und an welchen Stellen Leerzeichen stehen müßen steht da nicht.

So sieht mein xml String aus der an die TSE gesendet wird:

Code: Alles auswählen

{ "storage": { "type": "TSE", "vendor": "TSE1" } ,
"function": "AuthenticateUserForAdmin",
"input": { "userId": "Administrator", 
"pin": "12345", 
"hash": "RDY5NDI3MEZBNDlGMUZEQkRCMzE3MzIwREU0MUIyODU3MjA1MEQ1M0RCNDM3OTI4ODc4ODdBQTVCRjMyOEFBNQ==" },
"compress": { "required":false, "type": "" }
}
Peter
Gruss Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Epson TSE Anmeldung -> error

Beitrag von Jan »

Peter,

das ist die Funktions-JSON, die Du mit der XML sendest. Nicht die XML selber.

Wenn Du von "white spaces" sprichst: Ich habe bei mir keine Leerzeichen in der JSON stehen. Weder hinter bzw. vor den { }, noch nach Kommata. Das sieht dann z. B. so aus:

Code: Alles auswählen

{"storage":{"type":"TSE","vendor":"TSE1"},"function":"GetStorageInfo", "input":{},"compress":{"required":false,"type":"zip_deflate"}}
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Epson TSE Anmeldung -> error

Beitrag von Peter Schweizer »

Jan,
habs jetzt im Json String, wie Du, auch alle Leerzeichen entfernt , das Ergebnis ist nach wie vor:

{"error":{"errorinfo":"syntax error at line 2 near: ","fact":""},"function":"","output":{},"result":"JSON_ERROR_WRONG_JSON_FORMAT"}

Mir ist dabei nicht klar auf welche "line 2" sich diese Antwort bezieht ?
Wenn dies der xml String wäre, dann ja die Zeile mit <device_id>.

Code: Alles auswählen

<device_data>
	<device_id>local_TSE</device_id>
	<data>
		<type>operate</type>
		<timeout>50000</timeout>
		<requestdata>
{"storage":{"type":"TSE","vendor":"TSE1"},"function":"AuthenticateUserForAdmin","input":{"userId":"Administrator","pin":"12345","hash":"NzBFMDdEQTFDMDU5NEQ5RjlEQ0FGMkFFMTYwNTNGOUVBMjM2M0YxQTRCQTAyNTBGOEI5Nzc5
MjZDNTMzNDRCNQ=="},"compress":{"required":false,"type":""}}
		</requestdata>
	</data>
</device_data>
Ob ich "type":"" oder "type":"zip_deflate" eintrage ist egal.
Peter
Gruss Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Epson TSE Anmeldung -> error

Beitrag von Jan »

Peter,

stimmt die Schreibweise der device_id? Vielleicht mag der keine Abweichungen in Groß/kleinschreibung?

Und hast Du das mal mit dem compress-type versucht, wie ich das weiter oben beschrieben ? Wie gesagt, ich hatte da stellenweise Probleme mit wenn der leer war.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Epson TSE Anmeldung -> error

Beitrag von Peter Schweizer »

Jan,
die Zeilen-Nr muß sich, meiner meinung nach, auf den JSON String, der in der XML gesendet wird, beziehen, weil ja die Fehlermeldung
sagt, daß der JSON-String nicht korrekt sei.

Habe jetzt noch mal meinen Code genau angesehen und glaube daß die ursprüngliche cHash Erstellung falsch war.

Ich hatte die Variable c2h direkt an bin2Base64() übergeben, ohne c2h vorher mit var2bin(c2h) umzuwandeln.

Code: Alles auswählen

	* Hash berechnen
	c2h := Char2Hash( scHash + 'EPSONKEY', 256)  //Hash per SHA2-256  nBitLen=256  Len(c2h)=64
	c2h_bin := var2bin(c2h)
	cHash := bin2Base64( c2h_bin )
Ist meine jetzige Vorgehensweise (zumindest für die Hash Erstellung) richtig ?
Peter
Gruss Peter
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Epson TSE Anmeldung -> error

Beitrag von Jan »

Peter,

die Doku zu ePos sagt zum Fehler JSON_ERROR_WRONG_JSON_FORMAT: "JSON message is not in JSON format"

Und eine Powerpoint von Epson sagt, das der Eintrag so aussehen muß: "hash":"{base64 encoded hash}". Du mußt also den String ebenfalls in {} setzen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Peter Schweizer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 153
Registriert: Do, 06. Apr 2006 10:51
Danksagung erhalten: 3 Mal

Re: Epson TSE Anmeldung -> error

Beitrag von Peter Schweizer »

Jan,
ein Vergleich der über das EpsonTSEdemo.exe erstellten Sendedaten bestätigt deine Vermutung nicht. Auch dort sind keine { } vorhanden.
Habe in der Zwischenzeit ja einen neuen Formenbeitrag eröffnet, weil etwas mit der erstellung des Hashs nicht stimmt.
Kopiere ich mir nämlich die Epson-Hash-Daten in mein Testprogramm so kommt kein JSON-Format-Fehler mehr, dafür natürlich ein anderer Fehler der aber dann Sinn macht.

Danke für deine Unterstützung.
Gruß Peter

Nachtrag: Der zurückgegebnen Fehler: JSON_ERROR_WRONG_JSON_FORMAT ist falsch.
Ursache war die zu große, falsche Hash-Länge von 90 Zeichen es werden aber nur 44 Zeichen erwartete.
Gruss Peter
Antworten