1

Crypto.com 提供了一个API,据说你可以访问他们的交易平台。但是,就 C# 示例而言,他们的文档极差且不准确。我无法使用 C# 验证我的 REST 调用。

对于所有private(与帐户相关的)调用,您需要通过向有效负载 JSON添加参数来对请求进行签名。sig

计算private/get-account-summarysig方法参数的代码的简化版本如下所示(.net50):

private static string GetSignature()
{
    string sigPayload = "private/get-account-summary" + 1 + API_KEY + "currencyCRO" + DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

    var hash = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
    var computedHash = hash.ComputeHash(Encoding.UTF8.GetBytes(sigPayload));

    return Convert.ToHexString(computedHash);
}

,而使用此签名的请求如下所示:

POST https://api.crypto.com/v2/private/get-account-summary

{
    "id": "1",
    "method": "private/get-account-summary",
    "api_key": "[api_key]",
    "params": {
        "currency": "CRO"
    },    
    "nonce": "1615048530368",
    "sig": "1A7C7183CAF2E71F7F7DAB6A5C7F74319E692F2638710292BDB4FDFAC6C864D6"
}

据我所知,我已经正确地应用了他们的算法来创建签名,并且还使用了正确的参数来调用有问题的方法(https://exchange-docs.crypto.com/spot/index.html#private-获取帐户摘要)。但是,我得到的回复告诉我我做错了:

{
    "id": 1,
    "method": "private/get-account-summary",
    "code": 10002,
    "message": "UNAUTHORIZED"
}

我开始怀疑 API 是否适用于private方法。他们的支持很糟糕,让我再次阅读文档。我将不胜感激任何语言的任何帮助。如果我至少听到其他人用另一种语言做这件事,我可以用他们的例子来找出我做错了什么。

4

1 回答 1

3

示例中的最后一行需要像这样更改:

Convert.ToHexString(computedHash).ToLower();

最后,我按照自己的建议尝试使用其他示例语言之一调用该服务。当我使用 JavaScript(在文档中有更好的示例)时,我注意到结果sig是小写的。

于 2021-03-15T06:35:45.867 回答