oh stimmt.. ich hatte das dictionary vorher noch durch ksort gejagt, weil das bei anderen APIs nötig war. Nach ksort hat man sie dort dann mittels urllib.parse.urlencode(params) in einen string verwandelt. Aber sowas steht in unserer aktuellen Doku ja nicht drin, dass man das machen soll...
Also diesen Kram komplett weglassen ^^
Dann mal komplett losgelöster Code.. wobei wir damit dann eigentlich wieder bei meinem ersten Post wären, oder nicht?
Code: Alles auswählen
import json
import hmac,hashlib
params = {"api_key":"789","nonce":555}
message = json.dumps(params).encode()
print(message)
print (hmac.new("123".encode(), message, hashlib.sha256).hexdigest())
es printet:
PS C:\Users\Serpens66\desktop> python test2.py
b'{"api_key": "789", "nonce": 555}'
33009128e8495b0240323f222203af6fb156de51a77dced41ee1ee467257e5f1
PS C:\Users\Serpens66\desktop> python test2.py
b'{"nonce": 555, "api_key": "789"}'
5bfc2958d4de79e3158981f0e687c7799081723618b6ebec8da43ce7b1c08462
Während der vermeintlich identische PHP code:
https://3v4l.org/FM0Mq
{"api_key":"789","nonce":555}
c0a21fbf41349371c297cc78ddcacc9cb7850a21fe70bcd0b7ce7df7789a3519
Habe mir collections und OrderedDict angeschaut.
Aus irgendeinem Grund ändert es dennoch die Reihenfolge, wenn ich
params2 = collections.OrderedDict({"api_key":"789","nonce":555})
mache.
Aber das ist aktuell tatsächlich auch egal, da es bei 2 Einträgen im Dictionary ja nur 2 mögliche Anordnungen gibt. Und wie wir im obigen Code sehen, ist keine der beiden signaturen von PYthon, identisch zu der in PHP.
Bleibt nur die Frage, was du mit folgendem Satz meinst:
Und wenn bei PHP keine Leerzeichen nach ':' und ',' beim serialisieren als JSON vorkommen: *das* kannst Du in Python mit den entsprechenden Argumenten auch erreichen.
Wo ist denn im PHP Code ein ":" und ein "," ?? EDIT: ahcso, habs gesehen ^^ ich schaus mir mal and und editiere dann dazu
Edit2:
Ah jetzt hab ich dasselbe raus
Lag wirklich an den Leerzeichen, wäre ich nie draf gekommen
Code: Alles auswählen
import json
import hmac,hashlib
params = {"api_key":"789","nonce":555}
message = json.dumps(params)
message = message.replace(" ","")
message = message.encode()
print(message)
print (hmac.new("123".encode(), message, hashlib.sha256).hexdigest())
Wie wende ich OrderedDict richtig an, damit einfach die Reihenfolge einbehalten wird, die ich zu anfang vorgebe? In der Doku stehen nur Beispiele mit "sorted", aber was wenn ich keine solche Sortierung will, sondern eine chaotische die ich selbst festlege?
Obwohl wir nun aber in 50% der Fälle (ohne identische Sortierung zur zeit) exakt dasselbe Ergebnis habem wie mit PHP, bekomme ich weiterhin die Fehlermeldung, dass die signatur falsch wäre...
Wir sind zwar einen guten Schritt weiter gekommen ,danke dir dafür!
Aber mir bleibt wohl trotzdem nichts anderes übrig, als weiterhin auf den support zu warten -.-