2013-04-23 2 views
1

MTGox HTTP api v2를 호출하는 데 문제가 있습니다. 일반적으로 모든 요청을 처리하기 위해 sendrequest 함수를 작성했습니다. MONEY/INFO 또는 MONEY/ORDERS에 잘 작동하지만 MONEY/ORDER/QUOTE 또는 MONEY/ORDER/ADD를 시도 할 때 500 내부 서버 오류가 발생합니다.MTGOX API가있는 내부 서버

post_data에 nonce 외에 아무것도 포함되어 있지 않은 것처럼 보이는 것은 잘못되었습니다. 이 문제를 해결하려면 무엇을해야합니까?

있는 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; 
    } 

답변

0

이 서명에 비표가 PARAMS 걸리는 모든 요청, 예를 들어, 귀하의 서명에 마지막을 제공해야합니다 돈/지갑/통화 USD와 역사는 당신의 서명이 있어야한다 :

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

또한

, MtGox의 API는 것 같다 (는 \ 0 당신이 궁금해하는 경우, 널 문자) 이 API 엔드 포인트로

BTCUSD/money/wallet/history 

을, 그러나 이것은 더 이상 작동하는 것 같다 : - 지금 플럭스 예를 들어, 지갑 역사를위한 이상, 우리는 호출하는 데 사용합니다. 이제 우리는 다음과 같이 부릅니다.

그래서 지금까지 작동했던 전화가 실패한 경우이를 살펴보십시오. 그러나 귀하의 서명에 대한 귀하의 QS에서 귀하의 nonce를 마지막 매개 변수로 사용하는 것이 중요하거나 API 호출이 더 이상 작동하지 않는다고 말할 수 있습니다.

MtGox에서 새 API 키를 다시 만드는 것이 좋습니다. 우리 코드가 제대로 작동하려면 그렇게해야했습니다. MtGox의 최근 API 변경으로 인해 오래된 키가 무효화 되었기 때문에 (예 : 봇을 API를 죽이지 않고 처리하는 방법을 알아내는 동안 거래 봇을 유지할 가능성이 높음)

+0

답변 해 주셔서 감사합니다. 그러나 불행히도 그것은 나를 돕지 않습니다. nonce가 마지막으로오고 BTCEUR/money/... 및 money/...를 시도하여 매개 변수 순서를 변경하여 새로운 API 키를 만들었지 만 여전히 500 내부 서버 오류가 발생했습니다. 다른 API 호출은 언급 한 점을 제외하고 여전히 작동합니다. –