Здравствуйте, Passerby, Вы писали:
P>passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode() P>Как то же на C#?
Что делают твои api_secret — одному богу известно, а с Base64 надо работать так: Convert.ToBase64String
Здравствуйте, Passerby, Вы писали:
P>passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode() P>Как то же на C#?
Здравствуйте, Kolesiki, Вы писали: K>Что делают твои api_secret — одному богу известно, а с Base64 надо работать так: Convert.ToBase64String
Дело в том, что на stackoverflow есть есть работающий код:
Пытался аналогично получить message, но приходила ошибка "{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}". Потому и решил, что может не так сделало шифрование.
public async Task GetOpenOrders()
{
string url = "https://api.kucoin.com";
string endpoint = "/api/v1/orders";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url + endpoint));
var timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
var preSign = timestamp + "GET" + endpoint;
var hmac1 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
var signature = BitConverter.ToString(hmac1.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");
var hmac2 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET));
var phrase = BitConverter.ToString(hmac2.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");
request.Headers.Add("KC-API-KEY", API_KEY);
request.Headers.Add("KC-API-SIGN", signature);
request.Headers.Add("KC-API-TIMESTAMP", timestamp);
request.Headers.Add("KC-API-PASSPHRASE", phrase);
request.Headers.Add("KC-API-KEY-VERSION", "2");
HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
string message = await response.Content.ReadAsStringAsync();
return message;//"{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}"
}
неужели к этому кукоину нету документации
мне кажется что даже готовые либы для дот нета можно найти
имхо проще предметно разобраться, что нужно делать, чем пытаться переписать г@внокод с одного языка на другой
для начала сравни зашифрованный апи ключ на питоне и сишарпе. они точно одинаковые?
если нет по шагам разбери оба метода до точки где появятся расхождения.
выполни реверс-инежениринг
Здравствуйте, Passerby, Вы писали:
P>passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode() P>Как то же на C#?
кстати, читали ли вы фак?
.net SDK
Invalid Signature on POST Request
{"code":"400005", "msg":"Invalid KC-API-SIGN"}
There is a bug in the code:
var response = body == null ? await _restRepo.PostApi, SortedDictionary>(url, body, headers) : await _restRepo.PostApi>(url, headers);
After fixing:
var response = body != null ? await _restRepo.PostApi, SortedDictionary>(url, body, headers) : await _restRepo.PostApi>(url, headers);
Здравствуйте, varenikAA, Вы писали: AA>кстати, читали ли вы фак?
Читал. Но у меня другая ошибка. В факе примерно тот же код, что и я ранее представил. Только в факе еще ошибки: url = 'https://openapi-sandbox.kucoin.com/api/v1/accounts' — нет такого адреса. Сейчас новый адрес.
Здравствуйте, Ватакуси, Вы писали: В>Ты пошагово сравнил результат-то? Всё совпадает до точки вызова?
Я не знаю Python (иначе бы не задавал вопрос), какой там отладчик, классы там или нет, куда там встраивать код метода и т.д., потому не сравнивал. В>Ошибка говорит, что ты чё-то не так сделал.
Глубокая мысль...
Здравствуйте, Passerby, Вы писали:
P>Пытался аналогично получить message, но приходила ошибка "{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}". Потому и решил, что может не так сделало шифрование.
If you get such an error, then you did not (or not correctly) follow step 2 of the instructions:
Здравствуйте, Буравчик, Вы писали: Б>https://cointracking.freshdesk.com/en/support/solutions/articles/29000028973-kucoin-api-error-code-400004-msg-invalid-kc-api-passphrase-
Спасибо. Сегодня в пятый раз создал ключи и как указано в статье сделал еще одни ключ, секрет, название API и парольную фразу. Но чуда не произошло. Хотя, мне кажется, что дело, действительно, в ключах, а не в коде. "@kroitor, @IanFLee I just now tried to create a new API and I used the API Passphrase as password with @kroitors code above. Now it actually worked. This didn't work yesterday as I created 4 new API in the exact same way. That was very strange. I know I tried the exact same thing with the API Passphrase but now it worked. I am not sure if there was any temporary problem with their API?" https://github.com/ccxt/ccxt/issues/8994
В>>Ты пошагово сравнил результат-то? Всё совпадает до точки вызова? P>Я не знаю Python (иначе бы не задавал вопрос), какой там отладчик, классы там или нет, куда там встраивать код метода и т.д., потому не сравнивал.
Ну, это можно за 1 с установкой питона, среды какой-нить и отладки сделать. Никто кроме тебя этим не займётся. По крайней мере, бесплатно
В>>Ошибка говорит, что ты чё-то не так сделал. P>Глубокая мысль...
А то.
Здравствуйте, Passerby, Вы писали:
P>Дело в том, что на stackoverflow есть есть работающий код: P> signature = base64.b64encode(hmac.new(api_secret.encode(), str_to_sign.encode(), hashlib.sha256).digest()).decode() P> passphrase = base64.b64encode(hmac.new(api_secret.encode(), api_passphrase.encode(), hashlib.sha256).digest()).decode()
P>Пытался аналогично получить message, но приходила ошибка "{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}". Потому и решил, что может не так сделало шифрование.
P>var preSign = timestamp + "GET" + endpoint; P>var hmac1 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET)); P>var signature = BitConverter.ToString(hmac1.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", ""); P>var hmac2 = new HMACSHA256(Encoding.UTF8.GetBytes(API_SECRET)); P>var phrase = BitConverter.ToString(hmac2.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");
Не увидел у тебя ни строчки касательно Base64 — уверен, что правильно перевёл?
Здравствуйте, Kolesiki, Вы писали: K>Не увидел у тебя ни строчки касательно Base64 — уверен, что правильно перевёл?
Конечно, не уверен. Был бы уверен, не спрашивал бы.
public async Task<string> GetOpenOrdersForStackoverflow()
{
string url = "https://api.kucoin.com";
string endpoint = "/api/v1/orders";
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(url + endpoint));
var API_TIMESTAMP = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();
var preSign = API_TIMESTAMP + "GET" + endpoint;
var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
var API_SIGN = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");
// /*пробовал и так:*/ var API_SIGN = BitConverter.ToString(hmac.ComputeHash(Encoding.UTF8.GetBytes(preSign))).ToLower().Replace("-", "");
//Та же ошибкаvar API_PASSPHRASE = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");
// /*пробовал и так: */var API_PASSPHRASE = BitConverter.ToString(hmac.ComputeHash(Encoding.UTF8.GetBytes(PASSPHRASE))).ToLower().Replace("-", "");
//Та же ошибка
request.Headers.Add("KC-API-KEY", API_KEY);
request.Headers.Add("KC-API-SIGN", API_SIGN);
request.Headers.Add("KC-API-TIMESTAMP", API_TIMESTAMP);
request.Headers.Add("KC-API-PASSPHRASE", API_PASSPHRASE);
request.Headers.Add("KC-API-KEY-VERSION", "2");
HttpResponseMessage response = await httpClient.SendAsync(request).ConfigureAwait(false);
string message = await response.Content.ReadAsStringAsync();
return message;//"{\"code\":\"400004\",\"msg\":\"Invalid KC-API-PASSPHRASE\"}"
}
Здравствуйте, alexander_r, Вы писали:
_>Здравствуйте, Passerby, Вы писали:
P>>Неправильно?
_>А кто кроме вас может это проверить
Kolesiki написал, что у меня ошибка, поэтому и написал.
_>Еще один вариант -> https://github.com/shendongnian/code/blob/d29ee0b912c7213ff4b536ca0525807551bfd19b/code10/1720192-49954862-0.cs _>Вообще на github-е проектов достаточно много где этот kucoin изпользуют
Вы указали на проект со старым API.
_>https://github.com/search?l=C%23&q=%22https%3A%2F%2Fapi.kucoin.com%22&type=Code
Либо старый API, либо библиотека, либо предлагается свой nuget, либо что-то вообще не нужное (даже пустой проект встречался). _>и если уже совсем голову лень включать и читать доки, можно просто нагуглить готового кода и сделать по аналогии
Уже. А вы можете продемонстрировать, как включать голову?
Здравствуйте, Passerby, Вы писали:
P>Либо старый API, либо библиотека, либо предлагается свой nuget, либо что-то вообще не нужное (даже пустой проект встречался).
А в чем проблема взять готовую библиотеку или nuget и посмотреть будет она работать с вашими api_secret, api_key... или нет
если работает, то смотрите каким образом она создает заголовки, если не работает — пишите в поддержку