2017-11-18 6 views
2

Ich versuche, die Coinspot-REST-API zu erreichen, bekomme aber eine Fehlermeldung. Ich habe keine Probleme mit Bittrex und Independent Reserve zu sprechen, aber Coinspot ist ein bisschen anders. Das ist mein Code:Cospot-REST-API - C#

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(); 
    } 

Die Doco ist sehr knapp! Ich stecke fest.

Ich habe den Fehler gerade nicht handlich, aber es war ein völlig nicht beschreibender Fehler mit Informationen darüber, was schief gelaufen ist. Es war so etwas wie "ungültiger Anruf". Aber ich weiß, dass es meine geposteten Daten zu einem gewissen Grad akzeptiert, denn wenn ich den Namen der Eigenschaft "nonce" in "noncey" ändere, bekomme ich einen aussagekräftigen Fehler zurück, der "no nonce" sagt.

+2

Möchten Sie uns den Fehler mitteilen? – CodingYoshi

+1

Entschuldigung, ich wollte es hinzufügen, aber ich bin gerade von meinem Computer weg. Es war sehr unauffällig. Es war so etwas wie "ungültig" ohne jegliche Erklärung. –

+1

kann bestätigen, Fehler (in JSON) sieht aus wie '{ "Status": "ungültig" }' – wislon

Antwort

1

Haben Sie es jemals geschafft, diese API zum Laufen zu bringen? CoinSpot unterstützt das nicht sehr. Ich kann nur 3 der Münzen API arbeiten, die nicht viel Hilfe ist

+0

Nein. Es sieht so aus, als ob es halb funktioniert, aber ich konnte nie eine Verbindung herstellen. Wenn du sie kontaktierst und sie dir antworten, würde ich gerne etwas darüber erfahren. In der Zwischenzeit habe ich sie gebeten, sie per API-Schlüssel zu deaktivieren, und das haben sie nicht einmal geschafft. –

1

tl: dr Es ist undokumentiert, aber Sie müssen Port 443 verwenden, fand ich es durch Graben durch ihre Node SDK.

Ich hatte das gleiche Problem und erhielt die sehr nicht beschreibende {status: invalid} Antwort, in meinem Fall mit Elixir nicht C#. Ich habe es zum Laufen gebracht, indem ich in ihr Node-SDK geschaut habe - meine Details funktionierten mit ihrem SDK, also wusste ich, dass es etwas war, was ich nicht richtig machte (obwohl ihre Dokumentation ziemlich schockierend ist). Sie benutzen Port 443 und sobald ich es eingestellt habe, hat es funktioniert.

Ich habe versucht 2 Dinge, ich bin 90% sicher, dass es die Port-Nummer, aber auf halbem Weg durch meine es immer ich zu arbeiten, um das sha512 Zeichen gedruckt durch ihren Knoten sdk erstellt und verglichen es mit dem einen Erzeugen ich Cryptex ich mit sah, dass sie die gleiche sha512-Signatur erzeugten, aber meine war in Großbuchstaben, während der Knoten in Kleinbuchstaben war - das könnte oder sollte nicht am Ende sein, aber ich habe am Ende String.downcase() verwendet.