使用BingX API V2永续合约下单报错(code100001)求助
代码问题分析及修正方案
以下是你的代码存在的问题及对应修正:
缺少必填参数
BingX API V2永续合约市价单(MARKET)要求必须传入quantity参数(下单数量),你的代码未包含该参数,会触发接口参数校验失败。请求参数位置错误
下单接口为POST请求,所有业务参数(含timestamp、signature)需放在请求体(body)中,而非URL的query部分。你的代码将参数拼接到URL,不符合API规范。签名生成时参数未按字典序排序
生成签名前,需将除signature外的所有参数按字典序升序排列后拼接,你的代码直接按原有顺序拼接,会导致签名不匹配,这是code:100001(签名/参数错误)的常见原因。POST请求未传递请求体
你的post函数创建Request对象时,未传入body数据,导致接口无法接收下单参数。冗余模块导入
代码重复导入json模块,可删除其中一个。
修正后的代码示例
import urllib.request import json import hmac import time APIURL = "https://open-api.bingx.com" APIKEY = "MyApiKEY" SECRETKEY = "MySecretKey" def genSignature(paramsStr): return hmac.new(SECRETKEY.encode("utf-8"), paramsStr.encode("utf-8"), digestmod="sha256").digest() def post(url, body): req = urllib.request.Request( url, data=body.encode("utf-8"), # 传递请求体数据 headers={ 'User-Agent': 'Mozilla/5.0', 'X-BX-APIKEY': APIKEY, 'Content-Type': 'application/x-www-form-urlencoded' # 添加表单类型头 }, method="POST" ) return urllib.request.urlopen(req).read() def tradeOrder(symbol, side, tradeType, quantity): paramsMap = { "symbol": symbol, "side": side, "type": tradeType, "quantity": quantity, # 添加必填数量参数 "timestamp": int(time.time()*1000), } # 按字典序排序参数 sorted_params = sorted(paramsMap.items(), key=lambda x: x[0]) paramsStr = "&".join(["%s=%s" % (k, v) for k, v in sorted_params]) signature = genSignature(paramsStr).hex() # 将signature加入参数体 paramsStr += "&signature=" + signature url = "%s/openApi/swap/v2/trade/order" % APIURL return post(url, paramsStr) def main(): # 传入具体下单数量,例如0.001 BTC tradeOrder("BTC-USDT", "BUY", "MARKET", 0.001) if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

