【问题标题】:Coinspot REST API - C#Coinspot REST API - C#
【发布时间】:2017-11-18 06:14:08
【问题描述】:

我正在尝试访问 Coinspot REST API,但我收到了一个错误返回。我与 Bittrex 和 Independent Reserve 交谈没有问题,但 Coinspot 有点不同。这是我的代码:

    protected override RESTClient RESTClient { get; } = new RESTClient(new NewtonsoftSerializationAdapter(), new Uri("https://www.coinspot.com.au/api"));

    public class postdata
    {
        public string nonce { get; set; }
    }

    public string CalculateMD5Hash(string input)
    {
        //step 1, calculate MD5 hash from input

        MD5 md5 = MD5.Create();
        var inputBytes = Encoding.ASCII.GetBytes(input);
        var hash = md5.ComputeHash(inputBytes);

        // step 2, convert byte array to hex string
        var sb = new StringBuilder();

        for (int i = 0; i < hash.Length; i++)
        {
            sb.Append(hash[i].ToString("X2"));
        }

        return sb.ToString();
    }

    /// <summary>
    /// Private IR Call: GetAccounts
    /// </summary>
    /// <returns></returns>
    private async Task<List<AccountHolding>> Balances()
    {

        //https://github.com/geekpete/py-coinspot-api/blob/master/coinspot/coinspot.py

        //var nonce = new Date().getTime();

        //var postdata = postdata || { };
        //postdata.nonce = nonce;

        //var stringmessage = JSON.stringify(postdata);
        //var signedMessage = new hmac("sha512", self.secret);

        //signedMessage.update(stringmessage);

        // 'sign': sign,
        //'key': self.key

        var nonce = APIHelpers.GetNonce();

        var postdata = new postdata { nonce = nonce };
        var json = JsonConvert.SerializeObject(postdata);

        System.Diagnostics.Debug.WriteLine(json);

        var sign = APIHelpers.GetHMACSHAHash(ApiSecret, json, APIHelpers.HMACSHAType.NineBit);

        //Do we do this?
        //The JavaScript samples seem to hash with MD5 afterwards for double encryption?
        sign = CalculateMD5Hash(sign);

        RESTClient.Headers.Clear();
        RESTClient.Headers.Add("sign", sign);
        RESTClient.Headers.Add("key", ApiKey);

        try
        {
            var retVal = await RESTClient.PostAsync<string, postdata>(postdata, "/my/balances");

            System.Diagnostics.Debug.WriteLine(retVal);
        }
        catch (Exception ex)
        {

        }

        throw new NotImplementedException();
    }

doco 太少了!我被困住了。 https://www.coinspot.com.au/api

我现在手头没有该错误,但这是一个完全无法描述的错误,其中包含有关问题所在的信息。这就像“无效呼叫”。但是,我知道它在某种程度上被接受了我发布的数据,因为如果我将属性“nonce”的名称更改为“noncey”,我会收到一个有意义的错误,上面写着“no nonce”。

【问题讨论】:

  • 您想告诉我们错误吗?
  • 抱歉,我本来想包含它,但我现在不在电脑旁。这是非常不起眼的。这就像“无效”,没有任何解释。
  • 可以确认,错误(在 json 中)看起来像 '{ "status": "invalid" }'

标签: c# json rest api bitcoin


【解决方案1】:

你有没有设法让这个 API 工作。 CoinSpot 对此不太支持。我只能让 3 个硬币 API 工作,这没有多大帮助

【讨论】:

  • 不。看起来它可以正常工作,但我永远无法连接。如果你联系他们并且他们回复你,我想听听。同时我已经要求他们通过 api 密钥禁用,他们甚至没有管理。
【解决方案2】:

我最近设法让它工作并在 .NET 中组合了一个简单的 SDK

https://github.com/QuintinHumphreys/CoinspotAPI

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
【解决方案3】:

tl:dr 没有记录,但你需要使用端口 443,我通过挖掘他们的节点 SDK 找到了它。

我遇到了同样的问题,得到了非常非描述性的 {status: invalid} 响应,在我的情况下使用的是 Elixir 而不是 C#。我通过查看他们的节点 SDK 来让它工作——我的详细信息使用他们的 SDK 工作,所以我知道这一定是我没有正确做的事情(尽管他们的文档非常令人震惊)。他们使用端口 443,只要我设置它就可以了。

我尝试了 2 件事,我 90% 确定这是端口号,但在我让它工作的中途,我打印了他们的节点 sdk 创建的 sha512 标志,并将其与我使用 Cryptex 生成的标志进行比较我看到他们正在生成相同的 sha512 签名,但我的签名是大写字母,而节点一个是小写的 - 这可能会或可能不会有影响,但我最后确实使用了 String.downcase()。

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 2012-06-02
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2017-03-09
    • 2014-07-19
    相关资源
    最近更新 更多