发起请求
所有REST请求头都必须包含以下内容:(公共数据不需要)
OK-ACCESS-KEY字符串类型的APIKey。
OK-ACCESS-SIGN使用HMAC SHA256哈希函数获得哈希值,再使用Base-64编码(请参阅签名)。
OK-ACCESS-TIMESTAMP发起请求的时间(UTC),如:2020-12-08T09:08:57.715Z
OK-ACCESS-PASSPHRASE您在创建API密钥时指定的Passphrase。
所有请求都应该含有application/json类型内容,并且是有效的JSON。
签名
生成签名
OK-ACCESS-SIGN的请求头是对timestamp + method + requestPath + body字符串(+表示字符串连接),以及SecretKey,使用HMAC SHA256方法加密,通过Base-64编码输出而得到的。
如:sign=CryptoJS.enc.Base64.Stringify(CryptoJS.HmacSHA256(timestamp + ‘GET’ + ‘/users/self/verify’, SecretKey))
其中,timestamp的值与OK-ACCESS-TIMESTAMP请求头相同,为ISO格式,如2020-12-08T09:08:57.715Z。
method是请求方法,字母全部大写:GET/POST。
requestPath是请求接口路径。如:/api/v5/account/balance
body是指请求主体的字符串,如果请求没有主体(通常为GET请求)则body可省略。如:{“instId”:“BTC-USDT”,“lever”:“5”,“mgnMode”:“isolated”}
SecretKey为用户申请APIKey时所生成。如:22582BD0CFF14C41EDBF1AB98506286D
一、返回Bad Request
通过HTTP请求GET /api/v5/market/history-candles
获取历史数据
instId=BTC-USDT-210924
bar=5m
after=2021-08-03T01:14:22.934Z
max_len=100
返回:{‘code’: ‘-1’, ‘msg’: ‘Bad Request’, ‘data’: None}
原因:
时间戳格式错误
after String 否 请求此时间戳之前(更旧的数据)的分页内容,传的值为对应接口的ts
其中:ts String 成交明细产生时间,Unix 时间戳的毫秒数格式,如 1597026383085
修改即可
after=1597026383085
二、GET/POST方法签名
OK-ACCESS-SIGN的请求头是对timestamp + method + requestPath + body字符串(+表示字符串连接),以及SecretKey,使用HMAC SHA256方法加密,通过Base-64编码输出而得到的。
GET方法签名:
参数写在requestPath 里,?&分隔,没有body
/api/v5/trade/order?ordId=2510789768709120&instId=BTC-USDT
POST方法签名:
body是指请求主体的字符串,如果请求没有主体(通常为GET请求)则body可省略。如:{“instId”:“BTC-USDT”,“lever”:“5”,“mgnMode”:“isolated”}
即requestPath 不带参数,参数直接写成body的字符串
dict转字符串:json.dump(body)(不用去掉空格,如果去掉空格,下面请求data也要去掉空格)
同时POST请求的data,也要写成字符串格式(binan是直接传dict格式)
self.client.post(url, headers=headers, data=json.dumps(kwargs))
三、OK_ACCESS_KEY为空
{‘msg’: “Request header “OK_ACCESS_KEY“ can’t be empty.”, ‘code’: ‘50103’}
问题:请求头"OK_ACCESS_KEY"不能为空
必须用apikey才能获取的数据,private:1
‘get_trade_fee’: {‘url’: ‘/api/v5/account/trade-fee’, ‘method’: ‘get’, ‘private’: 1},
四、asset_withdrawal转账提示需要withdrawal地址
{‘code’: ‘58203’, ‘data’: [], ‘msg’: ‘Please add a withdrawal address.’} asset_withdrawal
ok内部账号,A向B转账
B要在A的地址簿里,而且必须是免验证
如果在地址簿,但需要验证,弹出:
{‘code’: ‘58207’, ‘data’: [], ‘msg’: ‘Withdrawal failed due to address error’} asset_withdrawal
五、同一个账户下,全仓逐仓都开仓过
getget_account_positions获取持仓时
即使逐仓已经平了
还是会一直显示
不要手贱,
全仓仓位排在逐仓仓位后面,过24小时看看会不会消失
s090账号
通用类
错误提示 | HTTP 状态码 | 错误码 | title 4 |
---|---|---|---|
操作成功 | 200 | 0 | |
操作全部失败 | 200 | 1 | |
批量操作部分成功 | 200 | 2 | |
body不能为空 | 400 | 50000 | |
撮合引擎正在升级,请稍后重试 | 503 | 50001 | |
非法的json数据 | 400 | 50002 | |
接口请求超时(不代表请求成功或者失败,请检查请求结果) | 504 | 50004 | |
接口已下线或无法使用 | 410 | 50005 | |
无效的Content_Type,请使用"application/json"格式 | 400 | 50006 | |
用户被冻结 | 200 | 50007 | |
用户不存在 | 200 | 50008 | |
用户处于爆仓冻结 | 200 | 50009 | |
用户ID为空 | 200 | 50010 | |
用户请求频率过快,超过该接口允许的限额 | 429 | 50011 | |
用户状态无效 | 200 | 50012 | |
当前系统繁忙,请稍后重试 | 429 | 50013 | |
必填参数{0}不能为空 | 400 | 50014 | |
参数{0}和{1}不能同时为空 | 400 | 50015 | |
参数{0}和{1}不匹配 | 400 | 50016 | |
当前仓位处于ADL冻结中,无法进行相关操作 | 200 | 50017 | |
{0}币种处于ADL冻结中,无法进行相关操作 | 200 | 50018 | |
当前账户处于ADL冻结中,无法进行相关操作 | 200 | 50019 | |
当前仓位处于强平冻结中,无法进行相关操作 | 200 | 50020 | |
{0}币种处于强平冻结中,无法进行相关操作 | 200 | 50021 | |
当前账户处于强平冻结中,无法进行相关操作 | 200 | 50022 | |
资金费冻结,无法进行相关操作 | 200 | 50023 | |
参数{0}和{1}不能同时存在 | 200 | 50024 | |
参数{0}传值个数超过最大限制{1} | 200 | 50025 | |
系统错误 | 500 | 50026 | |
当前账户已被限制交易 | 200 | 50027 | |
账户异常无法下单 | 200 | 50028 | |
你的账户已经触发风控体系,禁止该标的{0}交易,请联系客服进行处理 | 200 | 50029 |
API类
错误提示 | HTTP 状态码 | 错误码 | 错误提示 |
---|---|---|---|
Api 已被冻结,请联系客服处理 | 400 | 50100 | Api 已被冻结,请联系客服处理 |
APIKey 与当前环境不匹配 | 401 | 50101 | APIKey 与当前环境不匹配 |
请求时间戳过期 | 401 | 50102 | 请求时间戳过期 |
请求头"OK_ACCESS_KEY"不能为空 | 401 | 50103 | 请求头"OK_ACCESS_KEY"不能为空 |
请求头"OK_ACCESS_PASSPHRASE"不能为空 | 401 | 50104 | 请求头"OK_ACCESS_PASSPHRASE"不能为空 |
请求头"OK_ACCESS_PASSPHRASE"错误 | 401 | 50105 | 请求头"OK_ACCESS_PASSPHRASE"错误 |
请求头"OK_ACCESS_SIGN"不能为空 | 401 | 50106 | 请求头"OK_ACCESS_SIGN"不能为空 |
请求头"OK_ACCESS_TIMESTAMP"不能为空 | 401 | 50107 | 请求头"OK_ACCESS_TIMESTAMP"不能为空 |
券商ID不存在 | 401 | 50108 | 券商ID不存在 |
券商域名不存在 | 401 | 50109 | 券商域名不存在 |
无效的ip | 401 | 50110 | 无效的ip |
无效的OK_ACCESS_KEY | 401 | 50111 | 无效的OK_ACCESS_KEY |
无效的OK_ACCESS_TIMESTAMP | 401 | 50112 | 无效的OK_ACCESS_TIMESTAMP |
无效的签名 | 401 | 50113 | 无效的签名 |
无效的授权 | 401 | 50114 | 无效的授权 |
无效的请求类型 | 405 | 50115 | 无效的请求类型 |
错误提示 | HTTP 状态码 | 错误码 | 错误提示 |
Api 已被冻结,请联系客服处理 | 400 | 50100 | Api 已被冻结,请联系客服处理 |
APIKey 与当前环境不匹配 | 401 | 50101 | APIKey 与当前环境不匹配 |
请求时间戳过期 | 401 | 50102 | 请求时间戳过期 |
请求头"OK_ACCESS_KEY"不能为空 | 401 | 50103 | 请求头"OK_ACCESS_KEY"不能为空 |
请求头"OK_ACCESS_PASSPHRASE"不能为空 | 401 | 50104 | 请求头"OK_ACCESS_PASSPHRASE"不能为空 |
请求头"OK_ACCESS_PASSPHRASE"错误 | 401 | 50105 | 请求头"OK_ACCESS_PASSPHRASE"错误 |
请求头"OK_ACCESS_SIGN"不能为空 | 401 | 50106 | 请求头"OK_ACCESS_SIGN"不能为空 |
请求头"OK_ACCESS_TIMESTAMP"不能为空 | 401 | 50107 | 请求头"OK_ACCESS_TIMESTAMP"不能为空 |
券商ID不存在 | 401 | 50108 | 券商ID不存在 |
券商域名不存在 | 401 | 50109 | 券商域名不存在 |
无效的ip | 401 | 50110 | 无效的ip |
无效的OK_ACCESS_KEY | 401 | 50111 | 无效的OK_ACCESS_KEY |
无效的OK_ACCESS_TIMESTAMP | 401 | 50112 | 无效的OK_ACCESS_TIMESTAMP |
无效的签名 | 401 | 50113 | 无效的签名 |
无效的授权 | 401 | 50114 | 无效的授权 |