Mr.Davidwater Geschrieben 7. Januar 2021 Teilen Geschrieben 7. Januar 2021 vor 4 Stunden schrieb Tyler_Durden: Hallo David, ich gehe davon aus, du nutzt auch Python als Sprache? Ich habe keine hilfreiche Antwort vom bitcoin.de-Team bekommen. Wenn ich zu Hause bin, schaue ich mal, wo ich bei dem Code aufgehört habe daran zu arbeiten, da auch dieser Thread hier eher... weniger hilfreich war. Letztes mal war es die response "message: Invalid signature", "code: 5" und meine credits. Hi, ich probiere es auch mit Python und bekomme die selbe Error Message. Ich schaue mich grade für Lösungen und alternative um, wenn ich es nicht mit der API von Bitcoin.de hin bekomme, würde ich auf die Kraken API wechseln. Jedoch ist mein Englisch für solch ein Fachbereich leicht eingeschränkt. Vielleicht können wir uns zusammen tun und gemeinsam ein Fehler freien Request bekommen. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
fox42 Geschrieben 7. Januar 2021 Teilen Geschrieben 7. Januar 2021 (bearbeitet) Sicher, dass ihr die Signatur richtig baut? In der API Doku ist das ganz gut beschrieben: Zitat Schritt 1: Aufsteigendes Sortieren der POST-Parameter anhand ihres Namens¹ { 'max_amount' : 5.3, 'price' : 255.50, 'type' : 'buy' } Schritt 2: Einen validen URL-encoded Query-String aus den POST-Parametern generieren¹ url_encoded_query_string = 'max_amount=5.3&price=255.5&type=buy' Schritt 3: md5-Hash über den in Schritt 2 erstellten Query-String der POST-Parameter bilden post_parameter_md5_hashed_url_encoded_query_string = md5(url_encoded_query_string) // Es wird der MD5-Hash in hexadezimaler Form benötigt => '5f4aece1d75c7adfc5ef346216e9bb11' Schritt 4: Konkatinieren der HMAC-Eingabedaten hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+post_parameter_md5_hashed_url_encoded_query_string => 'POST#https://api.bitcoin.de/v4/orders#MY_API_KEY#1234567#5f4aece1d75c7adfc5ef346216e9bb11' Schritt 5: Bilden des eigentlichen sha256-HMACs hmac = HMAC('sha256', hmac_data, api_secret) => '' edit: Da ist sogar ein Beispiel. Testet mal eure Signatur-Generation mit dem Beispiel durch. Bearbeitet 7. Januar 2021 von fox42 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
¯\_(ツ)_/¯ Geschrieben 7. Januar 2021 Teilen Geschrieben 7. Januar 2021 (bearbeitet) Hab schon ewig nichts mehr mit der bitcoin.de API gemach, aber mein Account geht sogar noch... Hab mir mal eben die Abschnitte mit der Signature angeschaut und mal deinen python code entsprechend angepasst. Die Stelle hast du wohl überlesen " Als Konsequenz kann bei GET- und DELETE-Requests der md5-Hash d41d8cd98f00b204e9800998ecf8427e für Variable post_parameter_md5_hashed_url_encoded_query_stringverwendet werden." und auch den Schritt 4 nicht mit übernommen ?! Viel spass damit... get_parameter_url_encoded_query_string = "type=buy" uri = uri + '?' + get_parameter_url_encoded_query_string post_parameter_md5_hashed_url_encoded_query_string = md5(''.encode("UTF-8")).hexdigest() hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+ post_parameter_md5_hashed_url_encoded_query_string h = hmac.new(bytes(api_secret, 'utf-8'), b'', hashlib.sha256) h.update(bytes(hmac_data, 'utf-8')) get_parameter = {'type': 'buy'} head ={'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()} r = requests.get(uri, headers=head) print(r.text) Bearbeitet 7. Januar 2021 von ¯\_(ツ)_/¯ 1 1 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Davidwater Geschrieben 7. Januar 2021 Teilen Geschrieben 7. Januar 2021 vor 12 Minuten schrieb ¯\_(ツ)_/¯: Hab schon ewig nichts mehr mit der bitcoin.de API gemach, aber mein Account geht sogar noch... Hab mir mal eben die Abschnitte mit der Signature angeschaut und mal deinen python code entsprechend angepasst. Die Stelle hast du wohl überlesen " Als Konsequenz kann bei GET- und DELETE-Requests der md5-Hash d41d8cd98f00b204e9800998ecf8427e für Variable post_parameter_md5_hashed_url_encoded_query_stringverwendet werden." und auch den Schritt 4 nicht mit übernommen ?! Viel spass damit... Wait, what. Danke Es funktioniert wirklich! Habe aber bei mir noch nicht den Fehler gefunden, aber das war schon mal eine große Hilfe.😅👌 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Davidwater Geschrieben 7. Januar 2021 Teilen Geschrieben 7. Januar 2021 okay, habe meinen Fehler gefunden. Bei mir lag es nur daran das ich keine Parameter mit gesendet habe. Ich dachte bei dieser Url braucht man keine Parameter, anscheinend aber schon. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 7. Januar 2021 Autor Teilen Geschrieben 7. Januar 2021 vor 49 Minuten schrieb ¯\_(ツ)_/¯: Hab schon ewig nichts mehr mit der bitcoin.de API gemach, aber mein Account geht sogar noch... Hab mir mal eben die Abschnitte mit der Signature angeschaut und mal deinen python code entsprechend angepasst. Die Stelle hast du wohl überlesen " Als Konsequenz kann bei GET- und DELETE-Requests der md5-Hash d41d8cd98f00b204e9800998ecf8427e für Variable post_parameter_md5_hashed_url_encoded_query_stringverwendet werden." und auch den Schritt 4 nicht mit übernommen ?! Viel spass damit... Vielen vielen Dank. Ich hatte offentsichtlich einen anderen Fehler als Davidwater, aber du hast mir hiermit sehr geholfen. Zusätzlich hatte ich aber auch einen Nonce, der anscheinend mal mit einem zu großen Faktor multipliziert war, das heißt es gab noch mehere Probleme bei mir Ich habe gerade keine Orders, daher ist meine response leer. Ich will also das orderbook aufrufen, und da klappt es wieder nicht. Bin vielleicht mit den Parametern nicht fit genug, aber das bekommeich hoffentlich auch noch hin Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 7. Januar 2021 Autor Teilen Geschrieben 7. Januar 2021 vor 1 Stunde schrieb Mr.Davidwater: Hi, ich probiere es auch mit Python und bekomme die selbe Error Message. Ich schaue mich grade für Lösungen und alternative um, wenn ich es nicht mit der API von Bitcoin.de hin bekomme, würde ich auf die Kraken API wechseln. Jedoch ist mein Englisch für solch ein Fachbereich leicht eingeschränkt. Vielleicht können wir uns zusammen tun und gemeinsam ein Fehler freien Request bekommen. Also mein Request ist jetzt sauber durchgelaufen. Interessanterweise klappt es, wenn ich die uri als variable übergebe, nicht aber, wenn ich sie noch einmal als string an der gleichen Stelle eintrage. Weiß nciht warum, aber jetzt geht es. 1 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 17. Januar 2021 Autor Teilen Geschrieben 17. Januar 2021 Wahrscheinlich bin ich wieder irgendwie bescheuert, und der Fehler ist offentsichtlich. Aber ich habe es gegengecheckt und sehe ihn nicht. Ich wollte nun, wo meine Get-Prozeduren laufen und ich die Daten soweit verarbeite und abspeichere eine manuelle Post-Prozedur schreiben. Sinn ist quasi einfach der ersten Posten der Kaufen-Seite zu kaufen (in diesem Fall die minimal mögliche Menge) Code sieht sinngemäß so aus: nonce = str(int(time.time() * 1000000)) uri = "https://api.bitcoin.de/v4/btceur/trades/" #URL aus Trades - executeTrade http_method = 'POST' ID = buy.json()["orders"][0]["order_id"] #ID der günstigsten Oder ermitteln Menge = str(buy.json()["orders"][0]["min_amount_currency_to_trade"]) #Minimalmenge ermitteln url = uri + ID #Ergänzen um die Ordernummer url_encoded_query_string = "amount_currency_to_trade="+Menge+"&payment_option=1&type=buy" #POST - Parameter in alph. Reihenfolge post_parameter_md5_hashed_url_encoded_query_string = hashlib.md5(bytes(url_encoded_query_string.encode())).hexdigest() #md5 encoding - leerer String gibt korrrekt "d41d8cd98f00b204e9800998ecf8427e" aus hmac_data = http_method + '#' + url + '#' + api_key + '#' + nonce + '#' + post_parameter_md5_hashed_url_encoded_query_string#Aus Schritt 4 h = hmac.new(bytes(api_secret, 'utf-8'), hmac_data.encode(encoding='utf-8'), hashlib.sha256) #Aus funktionierender Get-Methode headers = {'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()} r = requests.post(url, headers=headers) print(r.json()) Vielleicht müsste ich es meiner Gummiente erklären, aber die ist gerade nicht zugegen. Daher hoffe ich, dass einer von euch direkt mit der Hand vor die Stirn schlägt und mir den Fehler zeigt und am besten erklärt. PS: r.json() = {'errors': [{'message': 'Invalid signature', 'code': 5}], 'credits': 43} Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Davidwater Geschrieben 17. Januar 2021 Teilen Geschrieben 17. Januar 2021 (bearbeitet) Also ich sehe bei der Dokumentation, das hier beim hmac_data die uri verwendet wird: hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+post_parameter_md5_hashed_url_encoded_query_string Du verwendest die url ! Bin jetzt mir nicht sicher ob das der Fehler ist, aber irgendwas mit deiner Signature wieder. Edit: Bin echt überrascht das du 43 Credits hast, ich habe nur 23. Bearbeitet 17. Januar 2021 von Mr.Davidwater Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 17. Januar 2021 Autor Teilen Geschrieben 17. Januar 2021 (bearbeitet) vor einer Stunde schrieb Mr.Davidwater: Also ich sehe bei der Dokumentation, das hier beim hmac_data die uri verwendet wird: hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+post_parameter_md5_hashed_url_encoded_query_string Du verwendest die url ! Bin jetzt mir nicht sicher ob das der Fehler ist, aber irgendwas mit deiner Signature wieder. Das ist glaube ich eine Variablenbezeichnungfrage. Mein Code ist natürlich etwas stümperhaft und ungelenk. Meine Varaible url ist final: https://api.bitcoin.de/v4/btceur/trades/[ID] Stimmt also mit der URL inTrades - executeTrade überein: https://api.bitcoin.de/v4/:trading_pair/trades/:order_id Aber auch mit der uri in der hmac_data, also https://api.bitcoin.de/v4/btceur/trades/ kommt der code 5 Fehler. Zitat Edit: Bin echt überrascht das du 43 Credits hast, ich habe nur 23. Je nach Trust-Level auf Bitcoin.de hast du ein anderes Maximum. Bearbeitet 17. Januar 2021 von Tyler_Durden Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Davidwater Geschrieben 17. Januar 2021 Teilen Geschrieben 17. Januar 2021 vor 2 Stunden schrieb Tyler_Durden: Wahrscheinlich bin ich wieder irgendwie bescheuert, und der Fehler ist offentsichtlich. Aber ich habe es gegengecheckt und sehe ihn nicht. Ich wollte nun, wo meine Get-Prozeduren laufen und ich die Daten soweit verarbeite und abspeichere eine manuelle Post-Prozedur schreiben. Sinn ist quasi einfach der ersten Posten der Kaufen-Seite zu kaufen (in diesem Fall die minimal mögliche Menge) Code sieht sinngemäß so aus: nonce = str(int(time.time() * 1000000)) uri = "https://api.bitcoin.de/v4/btceur/trades/" #URL aus Trades - executeTrade http_method = 'POST' ID = buy.json()["orders"][0]["order_id"] #ID der günstigsten Oder ermitteln Menge = str(buy.json()["orders"][0]["min_amount_currency_to_trade"]) #Minimalmenge ermitteln url = uri + ID #Ergänzen um die Ordernummer url_encoded_query_string = "amount_currency_to_trade="+Menge+"&payment_option=1&type=buy" #POST - Parameter in alph. Reihenfolge post_parameter_md5_hashed_url_encoded_query_string = hashlib.md5(bytes(url_encoded_query_string.encode())).hexdigest() #md5 encoding - leerer String gibt korrrekt "d41d8cd98f00b204e9800998ecf8427e" aus hmac_data = http_method + '#' + url + '#' + api_key + '#' + nonce + '#' + post_parameter_md5_hashed_url_encoded_query_string#Aus Schritt 4 h = hmac.new(bytes(api_secret, 'utf-8'), hmac_data.encode(encoding='utf-8'), hashlib.sha256) #Aus funktionierender Get-Methode headers = {'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()} r = requests.post(url, headers=headers) print(r.json()) Vielleicht müsste ich es meiner Gummiente erklären, aber die ist gerade nicht zugegen. Daher hoffe ich, dass einer von euch direkt mit der Hand vor die Stirn schlägt und mir den Fehler zeigt und am besten erklärt. PS: r.json() = {'errors': [{'message': 'Invalid signature', 'code': 5}], 'credits': 43} Hast du schon versucht bei ID, Menge und den Rest mal manuell einzugeben. Die Umwandlung sieht für mich was ich sehe eigentlich richtig aus, habe es jetzt noch nicht selbst ausgeführt. Ich würde jetzt erst mal versuchen, alles was geht, manuell einzugeben um das erstmal auszuschließen. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Davidwater Geschrieben 17. Januar 2021 Teilen Geschrieben 17. Januar 2021 (bearbeitet) Vielleicht versuch es noch mal mit dem: post_parameter_md5_hashed_url_encoded_query_string = md5(''.encode("UTF-8")).hexdigest() Mir fällt nur auf das du nicht UTF-8 hier verwendest hast. Bearbeitet 17. Januar 2021 von Mr.Davidwater Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 17. Januar 2021 Autor Teilen Geschrieben 17. Januar 2021 vor 2 Stunden schrieb Mr.Davidwater: Hast du schon versucht bei ID, Menge und den Rest mal manuell einzugeben. Die Umwandlung sieht für mich was ich sehe eigentlich richtig aus, habe es jetzt noch nicht selbst ausgeführt. Ich würde jetzt erst mal versuchen, alles was geht, manuell einzugeben um das erstmal auszuschließen. Gute Idee, das versuche ich morgen mal. Wenn ich die Daten in ein Print gebe sieht es gut aus, aber wer weiß. Du hast also Post-Methoden noch nicht in Angriff genommen? Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mr.Davidwater Geschrieben 17. Januar 2021 Teilen Geschrieben 17. Januar 2021 Ich habe derzeit viel mit der Schule zu tun, da ich dieses Jahr meinen Abschluss mache. Werde entweder nur ganz wenig machen bzw. ich analysiere derzeit noch die Kurse, um später einen funktionierenden Algorithmus zu schreiben. Wahrscheinlich werde ich mich jedoch leider erst ab Juni richtig rein hängen. Aber dann werde ich mich nicht nur an der API von Bitcoin.de versuchen, sondern auch an anderen APIs von Wechselstuben. Konnte jetzt nur den kleinen Teil von Bitcoin.de schreiben, weil ich Winter Ferien hatte. Edit: Versuche hier aber zu Unterstützen, dann kann ich hoffentlich später bei mir selber ein paar Fehler vermeiden. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 17. Januar 2021 Autor Teilen Geschrieben 17. Januar 2021 (bearbeitet) Kleines Update auch für dich, wenn du dann so weit bist: Die Post-Parameter müssen im Body übergeben werden. Das habe ich jetzt gemacht und es kommt auch alles so wie es soll beim Server an: Zitat API-Aktion: executeTrade Angelegt am: 17. Januar 2021 23:13:45 CET API-Key: RED Request-URI: https://api.bitcoin.de/v4/btceur/trades/TESTETSTETSTETSTETS HTTP-Methode: POST POST-Parameter: { "amount_currency_to_trade":"0.01", "payment_option":"1", "type":"buy" } Jetzt bekomme ich 'errors': [{'message': 'Invalid order_id', 'code': 26, 'field': 'order_id'}]. Also quasi das, was ich provoziert habe mit der Test-Order. Ich denke, dass der Trade dann durchgehen sollte, wenn die Order ID korrekt ist. Bearbeitet 18. Januar 2021 von Tyler_Durden 1 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flynk Geschrieben 22. Januar 2021 Teilen Geschrieben 22. Januar 2021 Hi, könntest du mal den kompletten Code zeigen mit dem du die Bitcoin API zu dieser Fehlermeldung bringst. Ich hab versucht den Code zu rekonstruieren, scheitere jedoch. Vielen Dank schonmal im voraus. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Tyler_Durden Geschrieben 24. Januar 2021 Autor Teilen Geschrieben 24. Januar 2021 Am 22.1.2021 um 17:10 schrieb flynk: Hi, könntest du mal den kompletten Code zeigen mit dem du die Bitcoin API zu dieser Fehlermeldung bringst. Ich hab versucht den Code zu rekonstruieren, scheitere jedoch. Vielen Dank schonmal im voraus. Ich hatte die Post-Parameter nicht im body des Requests: headers = {'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()} body = {'amount_currency_to_trade': Menge,'payment_option': 1, 'type': Typ} r = requests.post(url, headers=headers, data=body) Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lhdsfkjhsdf Geschrieben 16. März 2022 Teilen Geschrieben 16. März 2022 Hallo, kann mal jemand den kompletten Code posten? Ich bekomme die Schnipsel nicht alle korrekt zusammengesetzt und würde mich freuen wenn mal jemand den aktuellen Stand bereit stellen könnte. Danke. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lhdsfkjhsdf Geschrieben 17. März 2022 Teilen Geschrieben 17. März 2022 Ich konnte mein Problem zwischenzeitlich beheben. Ich habe einfach das btcde Modul aus Python genommen und die fehlenden Abfragen ergänzt die ich gerade benötigt habe. Das Script ist recht einfach gehalten und gut zu verstehen. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden