c# - C# 中用于硬币点的 REST API
问题描述
我正在做一些研究来构建一个使用澳大利亚加密交易平台 Coinspot 的程序。我过去使用过 API,但大麦使用“POST”方法,Coinspots 信息和文档太差了(可能是因为他们不想让你使用它),但我想我还是试一试。
问题:如果您不知道发送数据的顺序,如何使用 POST 方法?(是否有标准或者每个 API 都不同)。
我有一个 API 密钥和一个秘密 API 密钥要发送以进行授权,但仍然被拒绝访问。无论如何,您是否可以使用代码来请求订单或类似将 json 拉到字符串时所做的事情?
WebRequest request = WebRequest.Create("https://www.coinspot.com.au/api/ro/balances");
request.Method = "POST";
request.Headers.Add("key", APIKEY);
request.ContentType = "application/json";
request.GetResponse(); //THIS IS WHERE IT ERRORS WITH AUTHENTICATION
抱歉,如果这是一个擦洗问题,但我认为我以正确的方式看待这个问题,我也在使用 .NET 库 json newtonsoft 所以任何关于这方面的信息都会很棒!
解决方案
.NET Core 对有点过时但功能强大的CoinSpot node.js api 客户端的解释
var nonce = Utility.GetEpochTime();
var postData = new { nonce };
var jsonMessage = postData.ToJson();
var hmac = new HMACSHA512(Encoding.ASCII.GetBytes("CoinSpotSecret"));
var byteArray = Encoding.ASCII.GetBytes(jsonMessage);
using (var stream = new MemoryStream(byteArray)) {
var hash = hmac.ComputeHash(stream).Aggregate("", (s, e) => s + String.Format("{0:x2}", e), s => s);
var uri = new Uri("https://www.coinspot.com.au/api/ro/my/balances", UriKind.Absolute);
var content = new StringContent(
jsonMessage,
System.Text.Encoding.UTF8,
"application/json"
);
content.Headers.Add("sign", hash);
content.Headers.Add("key", "CoinSpotKey");
var response = await httpClient.PostAsync(uri, content);
if (response.IsSuccessStatusCode) {
return await response.Content.ReadAsStringAsync();
}
}