0

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;
    }
4

1 に答える 1

-1

署名の nonce がパラメーターを受け取るリクエストの署名の最後にあることを確認してください。

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

(\0 はヌル文字です。念のため)

また、MtGox の API は現在流動的なようです。たとえば、上記のウォレットの履歴については、次のように呼び出していました。

BTCUSD/money/wallet/history

APIエンドポイントとして使用されていますが、これは機能していないようです。ここで、次のように呼び出します。

money/wallet/history

そのため、以前は機能していた通話が現在失敗している場合は、それも調べてください。しかし、署名の QS の最後のパラメーターとして nonce を使用することが重要であると断言できます。そうしないと、API 呼び出しが機能しなくなります。

また、MtGox で新しい API キーを再作成することをお勧めします。これは、コードが適切に機能するためにも行う必要がありました。これは、MtGox の最近の API の変更によって古いキーが無効になっているためだと思います (ボットに API を強制終了させずに処理する方法を理解する間、ボットの取引を寄せ付けない可能性が高い)。

于 2013-04-24T02:29:00.627 に答える