为啥我无法通过官方 Binance REST API 使用 c# 进行 Binance 订单?
Posted
技术标签:
【中文标题】为啥我无法通过官方 Binance REST API 使用 c# 进行 Binance 订单?【英文标题】:Why I can't make a Binance order using c# with the official Binance REST API?为什么我无法通过官方 Binance REST API 使用 c# 进行 Binance 订单? 【发布时间】:2021-05-10 02:55:54 【问题描述】:我是 *** 的新手,但我听说有一些很棒且乐于助人的人可以帮助我。 ????
我的使命:
找到一种使用 c# 调用 Binance REST API 进行交易的方法 没有 dll,使用我自己的代码(用于速度更新)现在我使用 Binance.API 包,但我的机器人需要快一点,因为它的速度还不够。 此外,能够在没有任何外部资源(如 dll)的情况下做到这一点将是一件好事。不是吗? ????
我尝试了什么:
成功:我可以使用 "WebRequest" 毫无问题地调用公共 API,并且 不需要 身份验证。WebRequest webrequest = WebRequest.Create("https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT");
WebResponse Response = webrequest.GetResponse();
StreamReader reader = new StreamReader(Response.GetResponseStream());
MessageBox.Show(reader.ReadToEnd());
成功:我可以毫无问题地调用 REST API,“WebRequest” 并且需要身份验证。 但只有帐户信息。
string dataQueryString = "recvWindow=15000×tamp=" + Math.Round(Convert.ToDecimal(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds), 0).ToString();
WebRequest webrequest = WebRequest.Create("https://api.binance.com/api/v3/account?" + dataQueryString + "&signature=" + BitConverter.ToString(new HMACSHA256(Encoding.ASCII.GetBytes(tempAPI_Secret)).ComputeHash(Encoding.ASCII.GetBytes(dataQueryString))).Replace("-", string.Empty).ToLower());
webrequest.Method = "GET";
webrequest.Headers.Add("X-MBX-APIKEY", tempAPI_Key);
WebResponse Response = webrequest.GetResponse();
StreamReader reader = new StreamReader(Response.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
Response.Close();
!!!问题!!!我无法使用 "WebRequest" 调用 ORDER REST API,并且需要身份验证。我尝试了下面的代码。 (它的调用方式与帐户信息相同,但使用 POST 类型,当然还有所需的 plus 参数)
string dataQueryString = "symbol=BTCUSDT&side=SELL&type=LIMIT&quantity=0.00039&price=38878&newOrderRespType=RESULT&recvWindow=15000×tamp=" + Math.Round(Convert.ToDecimal(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds), 0).ToString();
WebRequest webrequest = WebRequest.Create("https://api.binance.com/api/v3/account?" + dataQueryString + "&signature=" + BitConverter.ToString(new HMACSHA256(Encoding.ASCII.GetBytes(tempAPI_Secret)).ComputeHash(Encoding.ASCII.GetBytes(dataQueryString))).Replace("-", string.Empty).ToLower());
webrequest.Method = "POST";
webrequest.Headers.Add("X-MBX-APIKEY", tempAPI_Key);
WebResponse Response = webrequest.GetResponse();
StreamReader reader = new StreamReader(Response.GetResponseStream());
string response = reader.ReadToEnd();
reader.Close();
Response.Close();
返回的错误码:
'远程服务器返回错误:(400) Bad Request.'
我不明白为什么这不起作用。 (我尝试使用来自网络客户端的这些参数手动执行订单,并且成功)
我检查了这些可能的问题:
我的现货账户有足够的资金 我试图卖出超过最低交易金额有官方币安REST API文档:HERE
我尝试用谷歌搜索,但即使在这里也找不到解决方案。
感谢阅读,如果您能帮助我,我将不胜感激。 ????
如果有不清楚的地方请提出来,我会回答的!
【问题讨论】:
您要从该文档中的所有端点中调用哪个端点?您可以从菜单链接到特定项目 @ADyson 他已经提到了确切的端点,即订购 @JitendraPancholi 但我们的工作不是为此在文档中进行挖掘,或者假设只有一种调用方式(例如,同一 URL 可能有获取、发布、修补和删除) .正如我自己所说,“订单”文档中有多个条目,因此不清楚是哪一个。 【参考方案1】:几天前,我在字面上做same thing,但我使用的是python。我也很高兴看到我不是唯一一个喜欢从头开始编码的人。
我的解决方案是将 url 保留为 https://api.binance.com/api/v3/account
,而不是将我的订单参数 symbol=BTCUSD&side=BUY&etc...
附加到 url 上,我不得不通过 python 内置函数 @987654328 的 data
参数编码和发送该数据@
我不太了解 C#,所以我不知道如何将我的 python 代码翻译成 C#,但我确实找到了这个 doc link,它提供了一个关于如何使用 POST 请求发送数据的example。你也可以看看我的问题和answer 作为另一个例子。
【讨论】:
嘿。感谢您的回答,您的想法更大,因为它更透明并且看起来更有条理。但是,我的问题有点其他。,现在我能够解决,所以我会更新我的帖子,我正在处理我将发布的文档。虽然我会使用 c#,但也许它对你也有帮助。 您好,您的问题是如何解决的?我对 Binance order endoint 有同样的错误。以上是关于为啥我无法通过官方 Binance REST API 使用 c# 进行 Binance 订单?的主要内容,如果未能解决你的问题,请参考以下文章