Ich versuche, mit F # auf die private API von Kraken zuzugreifen. Der Code für den Zugriff auf die öffentliche API läuft einwandfrei, aber wenn ich auf die private API zugreife, erhalte ich immer den Fehler "General: Ungültige Argumente".Kraken private API mit F # gibt EGeneral zurück: ungültige Argumente
#r "FSharp.Data.dll"
open FSharp.Data
open System
open System.Text
open System.Security.Cryptography
let baseUri = "https://api.kraken.com"
let key = MY_KRAKEN_API_KEY
let secret = MY_KRAKEN_API_SECRET
let path = "/0/private/Balance"
let nonce = DateTime.UtcNow.Ticks
let bodyText = "nonce=" + nonce.ToString()
let hmac (key : byte []) (data : byte[]) =
use hmac = new HMACSHA512(key)
hmac.ComputeHash(data)
let sha256 (data : string) =
use sha = SHA256Managed.Create()
sha.ComputeHash(Encoding.UTF8.GetBytes(data))
let createSignature (nonce : int64) body (path : string) secret =
let shaSum = nonce.ToString() + body |> sha256
let data = Array.append (Encoding.UTF8.GetBytes path) shaSum
let key = Convert.FromBase64String secret
hmac key data |> Convert.ToBase64String
let signature = createSignature nonce bodyText path secret
let response = Http.RequestString (
url = baseUri + path,
httpMethod = "POST",
headers = ([("API-Key", key); ("API-Sign", signature)] |> Seq.ofList),
body = TextRequest bodyText
)
Sieht jemand, was ich falsch mache?
EDIT: Die Kraken.com API-Dokumentation ist awailable hier: https://www.kraken.com/help/api
Ich nehme an, die Header-Signatur nicht korrekt ist. Die Doku erfordert die folgenden zwei Werte im Header vorgelegt werden:
API-Key = API-Schlüssel API-Sign = Nachricht Signatur HMAC-SHA512 von (URI-Pfad + SHA256 (nonce + POST-Daten)) und Base64 decodierten Geheimschlüssel API
EDIT 2: Die übrigen Parameter müssen mit einer POST-Verfahren übertragen werden. In meinem Fall ist dies nur der "nonce" -Wert im Körperteil der HTTP-Anfrage.