【发布时间】:2016-04-17 16:48:17
【问题描述】:
我正在尝试使用 F# 访问 Kraken 私有 API。访问公共 API 的代码运行良好,但是当我尝试访问私有 API 时,我总是收到错误“EGeneral:Invalid arguments”。
#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
)
有人看到我做错了吗?
编辑: Kraken.com API 文档可在此处获取:https://www.kraken.com/help/api
我想标题签名不正确。文档要求在 header 中提交以下两个值:
API-Key = API 密钥 API-Sign = 使用 HMAC-SHA512 的消息签名 (URI 路径 + SHA256(nonce + POST 数据))和 base64 解码的秘密 API 关键
编辑 2: 剩下的参数需要用POST方法传输。在我的例子中,这只是 HTTP 请求正文部分中的“nonce”值。
【问题讨论】: