bitstamp yeni kimlik diyor şu:Bitstamp - C# yeni bir kimlik doğrulama - imza
Signature is a HMAC-SHA256 encoded message containing: nonce, client ID and API key. The HMAC-SHA256 code must be generated using a secret key that was generated with your API key. This code must be converted to it's hexadecimal representation (64 uppercase characters).Example (Python): message = nonce + client_id + api_key signature = hmac.new(API_SECRET, msg=message, digestmod=hashlib.sha256).hexdigest().upper()
Kaynak: Yeni imza (ve diğer parametreleri eklemek için aşağıdaki kodu var link
):
public void AddApiAuthentication(RestRequest restRequest)
{
var nonce = DateTime.Now.Ticks;
var signature = GetSignature(nonce, apiKey, apiSecret, clientId);
restRequest.AddParameter("key", apiKey);
restRequest.AddParameter("signature", signature);
restRequest.AddParameter("nonce", nonce);
}
private string GetSignature(long nonce, string key, string secret, string clientId)
{
string msg = string.Format("{0}{1}{2}", nonce,
clientId,
key);
return ByteArrayToString(SignHMACSHA256(secret, StrinToByteArray(msg))).ToUpper();
}
public static byte[] SignHMACSHA256(String key, byte[] data)
{
HMACSHA256 hashMaker = new HMACSHA256(Encoding.ASCII.GetBytes(key));
return hashMaker.ComputeHash(data);
}
public static byte[] StrinToByteArray(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
public static string ByteArrayToString(byte[] hash)
{
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
sonra bu hatayı alıyorum:
{"error": "Invalid signature"}
Sorunun ne olabileceği hakkında bir fikriniz var mı? Parametrelerimi 100 kez kontrol ettim ve bunlar yanlış değil. Belki birileri yeni kimlik doğrulama için çalışan bir kod parçası (C#) var mı? Çalışma kodudur:
GÜNCELLEME
Abhinav StringToByteArray yöntemi (P sadece yazım hatası): yanlıştı, haklıydı yanlıştır StrinToByteArray
Sen str.ToCharArray()
kullanıyorsunuz
public static byte[] StrinToByteArray(string str)
{
return System.Text.Encoding.ASCII.GetBytes(str);
}
KIRMIZI, REST için hangi yığını kullanıyorsunuz? – LamonteCristo
@ makerofthings7 RESTSharp kullanıyorum. – Julian
@Julian Bitstamp API'sini anlamaya zor bir zaman geçiriyorum, bana yardımcı olabilir misiniz? http://stackoverflow.com/questions/21612185/restsharp-bitstamp-authentication-fails – Freddy