币安的批量撤单接口,发送 DELETE 协议,进行批量撤单。
使用 aiohttp 进行撤单,也就是注释块 1 的那部分代码,直接返回签名无效。
而使用 requests 进行撤单,也就是注释块 2 的这部分代码,返回订单不存在,因为订单已经不存在了,所以返回订单不存在,符合预期,如果是有效的订单,会直接撤单成功。
很奇怪的是为什么两个库在 delete 协议有这样的差异,别的 post ,get 请求没问题。
import requests
import hmac
import hashlib
import time
import os
from aiohttp import ClientSession
import asyncio
api_key = "网站的 apikey"
secret_key = "网站的 secretkey"
base_url = 'https://fapi.binance.com'
symbol = "ETHUSDT"
def _signature(params):
params_query_string = urlencode(params)
return hmac.new(
secret_key.encode("utf-8"), params_query_string.encode("utf-8"), hashlib.sha256
).hexdigest()
async def _delete(url, params):
headers = {"X-MBX-APIKEY": api_key,
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json"}
params_encoded = urlencode(params)
url = url + '?' + params_encoded
#1 async with ClientSession() as session:
#1 async with session.delete(url, headers=headers) as response:
#1 text = await response.text()
#1 print('result', text)
#2 response = requests.delete(url, headers=headers)
#2 print('result', response.json())
def run():
params = {
"symbol": symbol,
"origClientOrderIdList": '["aaa-220117222620000008","aaa--220117222620000009"]',
"timestamp": int(time.time()*1000)
}
params["signature"] = _signature(params)
url = urljoin(base_url, "/fapi/v1/batchOrders")
return _delete(url, params)
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.