Hallo,
ich stehe gerade vor einem Problem, dass ich zur Nutzung der API-Schnittstelle (REST) der Kryptobörse Bittrex da bei Funktionen, die eine Authentifizierung benötigen (z.B. Guthaben seines Accounts abfragen oder Trades setzen) da beim Web Request einen Hash im Header mitschicken muss.
Beschrieben ist das ganze bei denen nur sehr kurz mit einem Code-Beispiel in php:
support.bittrex.com/hc/en-us/a…-Guide-API#authentication
Einen API-Key sowie das dazugehörige API-Secret habe ich mir im meinem Account erstellt (der den ich weiter unten in meinem Code stehen habe ist der reale, allerdings ist der Key nur auf Lesen geschaltet und selbst wenn es nicht so wäre ist auf dem Account eh nicht viel zu holen)
Soweit ich das verstehe muss ich an die URL bzw URI die Parameter API-Key und Nonce anhängen, wobei Nonce ein Unix-Zeitstempel bezogen auf UTC-Zeit ist (dafür habe ich mir eine Funktion Zeit gebaut):
Diese komplette URI muss ich mit dem API-Secret als Schlüssel HMAC SHA 256 verschlüsseln, dafür habe ich mir auch eine Funktion gebaut:
Und diese Hashsignatur muss ich als Header "apisign" beim Webrequest hinzufügen. Meine komplette Funktion sieht dafür dann so aus am Beispiel des Befehls getbalances:
SetAccount ist dabei die Funktion mit der ich das ganze aufrufe.
Als Ergebnis kriege ich aus den debug.prints folgendes:
Erste Zeile die URI mit APi-Key und Nonce,
zweite Zeile den HMAC SHA 256 Hash der URI mit API-Secret
drite Zeile die Antwort des Webrequest. Der Hinweis APIKEY_NOT_PROVIDED sollte eigentlich einen Hinweis liefern was der Fehler ist, aber weiß trotzdem nicht woran es liegen könnte. Mein API-Key ist auf Read eingestellt, also sollte das zum Balance auslesen ausreichen. Zumindst bin ich schon ein Stück weiter, als ich angefangen hatte war die Fehlermeldung noch NONCE_NOT_PROVIDED. Es könnte beispielsweise ja auch ein Problem mit der Nonce sein dass der Zeitstempel nicht mehr aktuell ist.
Hat jemand noch eine Idee was falsch sein könnte? Wie kann ich bei dem Web Request überprüfen ob das apisign auch richtig in den Header gepackt wurde?
Bzw. eine weitere frage, hat jemand noch erfahrung mit der REST-API von Bittrex? die nächste Frage bei anderen Befehlen wäre nämlich, ob man die einzelnen Parameter in einer bestimmtem Reihenfolge angeben muss, da dann beim hashen ja jedesmal was anderes rauskommen würde.
Wie gesagt der API-Key und Secret im Beispiel sind real und aktiv also kann das jeder damit ausprobieren wenn es hilft, Zugang zum Account hat man damit trotzdem nicht.
Danke im Voraus
*Topic verschoben*
ich stehe gerade vor einem Problem, dass ich zur Nutzung der API-Schnittstelle (REST) der Kryptobörse Bittrex da bei Funktionen, die eine Authentifizierung benötigen (z.B. Guthaben seines Accounts abfragen oder Trades setzen) da beim Web Request einen Hash im Header mitschicken muss.
Beschrieben ist das ganze bei denen nur sehr kurz mit einem Code-Beispiel in php:
support.bittrex.com/hc/en-us/a…-Guide-API#authentication
Einen API-Key sowie das dazugehörige API-Secret habe ich mir im meinem Account erstellt (der den ich weiter unten in meinem Code stehen habe ist der reale, allerdings ist der Key nur auf Lesen geschaltet und selbst wenn es nicht so wäre ist auf dem Account eh nicht viel zu holen)
Soweit ich das verstehe muss ich an die URL bzw URI die Parameter API-Key und Nonce anhängen, wobei Nonce ein Unix-Zeitstempel bezogen auf UTC-Zeit ist (dafür habe ich mir eine Funktion Zeit gebaut):
Diese komplette URI muss ich mit dem API-Secret als Schlüssel HMAC SHA 256 verschlüsseln, dafür habe ich mir auch eine Funktion gebaut:
VB.NET-Quellcode
- 'verschlüsselt und konvertiert einen String in HMAC SHA256
- Public Function StringToHMACSHA256(sData As String, sKey As String) As String
- Dim SHA As New HMACSHA256
- SHA.Key = System.Text.Encoding.Default.GetBytes(sKey)
- SHA.ComputeHash(System.Text.Encoding.Default.GetBytes(sData))
- Dim Rückgabe As String = BitConverter.ToString(SHA.Hash)
- 'Bindestriche zwischen den einzelnen Bytes entfernen und die Buchstaben des Hex-Codes in kleine umwandeln
- Rückgabe = Replace(Rückgabe, "-", "")
- Rückgabe = Rückgabe.ToLower
- StringToHMACSHA256 = Rückgabe
- End Function
Und diese Hashsignatur muss ich als Header "apisign" beim Webrequest hinzufügen. Meine komplette Funktion sieht dafür dann so aus am Beispiel des Befehls getbalances:
VB.NET-Quellcode
- Public Function Bittrex_API_URL(URL As String) As String
- 'zum testen:
- API_KEY = "037e7a76d6d0480a90801fbe1e31a298"
- API_Secret = "83774e73cd6b4f75b45ef863657eef63"
- Dim URI As String = URL & "?apikey=" & API_KEY & "&nonce=" & Time()
- Debug.Print(URI)
- Dim Sign = StringToHMACSHA256(URI, API_Secret)
- Debug.Print(Sign)
- Dim request As WebRequest
- request = WebRequest.Create(URL)
- Dim response As WebResponse
- request.Method = "GET"
- request.Headers.Add("apisign:" & Sign)
- response = request.GetResponse()
- Dim reader As New StreamReader(response.GetResponseStream())
- Dim streamText As String = reader.ReadToEnd()
- Bittrex_API_URL = streamText
- End Function
- Public Sub SetAccount()
- ''Abfrage Balances
- Dim API_URL As String = "https://bittrex.com/api/v1.1/account/getbalances"
- 'Debug.Print(API_URL)
- Dim Answer As String = Bittrex_API_URL(API_URL)
- Debug.Print(Answer)
- End If
- End Sub
SetAccount ist dabei die Funktion mit der ich das ganze aufrufe.
Als Ergebnis kriege ich aus den debug.prints folgendes:
Erste Zeile die URI mit APi-Key und Nonce,
zweite Zeile den HMAC SHA 256 Hash der URI mit API-Secret
drite Zeile die Antwort des Webrequest. Der Hinweis APIKEY_NOT_PROVIDED sollte eigentlich einen Hinweis liefern was der Fehler ist, aber weiß trotzdem nicht woran es liegen könnte. Mein API-Key ist auf Read eingestellt, also sollte das zum Balance auslesen ausreichen. Zumindst bin ich schon ein Stück weiter, als ich angefangen hatte war die Fehlermeldung noch NONCE_NOT_PROVIDED. Es könnte beispielsweise ja auch ein Problem mit der Nonce sein dass der Zeitstempel nicht mehr aktuell ist.
Hat jemand noch eine Idee was falsch sein könnte? Wie kann ich bei dem Web Request überprüfen ob das apisign auch richtig in den Header gepackt wurde?
Bzw. eine weitere frage, hat jemand noch erfahrung mit der REST-API von Bittrex? die nächste Frage bei anderen Befehlen wäre nämlich, ob man die einzelnen Parameter in einer bestimmtem Reihenfolge angeben muss, da dann beim hashen ja jedesmal was anderes rauskommen würde.
Wie gesagt der API-Key und Secret im Beispiel sind real und aktiv also kann das jeder damit ausprobieren wenn es hilft, Zugang zum Account hat man damit trotzdem nicht.
Danke im Voraus
*Topic verschoben*
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()