簡體   English   中英

具有MTGOX API的內部服務器

[英]Internal server with MTGOX api

我在調用MTGox HTTP api v2時遇到問題。 我編寫了一個sendrequest函數來處理我的所有請求。 它非常適合MONEY / INFO或MONEY / ORDERS,但是當我嘗試使用MONEY / ORDER / QUOTE或MONEY / ORDER / ADD方法時,我收到500個內部服務器錯誤。

似乎當post_data除了隨機數之外還包含其他任何內容時,都會出錯。 我該怎么做才能解決這個問題?

sendrequest函數:

private string sendRequest(string action, NameValueCollection query)
    {

        NameValueCollection nvc = new NameValueCollection();
        nvc.Add("nonce", DateTime.Now.Ticks.ToString());
        nvc.Add(query);

        String post_data = "";
        for (int i = 0; i < nvc.Count; i++)
        {
            post_data += "&";
            post_data += nvc.Keys[i];
            post_data += "=";
            post_data += nvc[i];
        }
        post_data = post_data.Substring(1);


        action = "BTCEUR/money/" + action;
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(sBasePath + action);
        action += "\0"+post_data;
        req.Method = "POST";

        HMACSHA512 hmac = new HMACSHA512(GetBytes(action));
        hmac.Key = Convert.FromBase64String(secret);
        String sign = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(action)), Base64FormattingOptions.None);


        req.Headers.Add("Rest-Key", apikey);
        req.Headers.Add("Rest-Sign", sign);

        req.UserAgent = "Mozilla/4.0 (compatible; MtGoxTradeCLI)";
        req.ContentType = "application/x-www-form-urlencoded";

        StreamWriter reqStream = new StreamWriter(req.GetRequestStream());
        reqStream.Write(post_data);
        reqStream.Close();

        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

        StreamReader respStream = new StreamReader(resp.GetResponseStream());
        String response = respStream.ReadToEnd();
        respStream.Close();

        return response;
    }

對於任何需要參數的請求,請確保簽名中的隨機數在簽名中排在最后,例如,貨幣/錢包/歷史貨幣為USD時,您的簽名應為:

money/wallet/history\0currency=USD&nonce=xxxxxxxxxx

(\\ 0為空字符,以防萬一您想知道)

此外,MtGox的API現在似乎還在不斷變化-例如,對於上述錢包歷史記錄,我們曾經調用過:

BTCUSD/money/wallet/history

作為API端點,但這似乎不再起作用。 現在我們調用:

money/wallet/history

因此,如果曾經為您服務的電話現在失敗了,也可以看看。 但是我可以肯定地說,將隨機數作為簽名中QS的最后一個參數很關鍵,否則API調用將不再起作用。

我還建議在MtGox中重新創建一個新的API密鑰-為了使我們的代碼也能正常工作,我們必須這樣做。 我有一種直覺,這是因為MtGox最近對API所做的更改已使舊密鑰無效(可能使交易機器人陷入困境,而他們卻想出了如何在不使機器人殺死其API的情況下處理它們)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM