请求鉴权类型
- 每个接口都有一个鉴权类型,指示所需的 API 密钥权限,显示在接口名称旁边(例如,下新订单 (TRADE))。
- 如果未指定,则鉴权类型为
NONE。 - 除了为
NONE外,所有具有鉴权类型的接口均视为SIGNED请求(即包含signature)。 - 具有鉴权类型的接口需要提供有效的 API 密钥并验证通过。
- API 密钥可在您的 Binance 账户的 API 管理 页面创建。
- API 密钥和密钥对均为敏感信息,切勿与他人分享。 如果发现账户有异常活动,请立即撤销所有密钥并联系 Binance 支持。
- API 密钥可配置为仅允许访问某些鉴权接口。
- 例如,您可以拥有具有
TRADE权限的 API 密钥用于交易,同时使用具有USER_DATA权限的另一个 API 密钥来监控订单状态。 - 默认情况下,API 密钥无法进行
TRADE,您需要先在 API 管理中启用交易权限。
- 例如,您可以拥有具有
| 鉴权类型 | 描述 |
|---|---|
NONE | 公开市场数据 |
TRADE | 在交易所交易,下单和取消订单 |
USER_DATA | 私人账户信息,例如订单状态和交易历史 |
USER_STREAM | 管理用户数据流订阅 |
需要签名的接口
- 调用
SIGNED接口时,除了接口本身所需的参数外,还需要在query string或request body中传递signature, 即签名参数。
签名是否是大小写敏感的
- HMAC: 使用 HMAC 生成的签名不区分大小写。 这意味着无论字母大小写如何,签名字符串都可以被验证。
- RSA: 使用 RSA 生成的签名是大小写敏感的。
- Ed25519: 使用 Ed25519 生成的签名也是大小写敏感的。
请参阅已签名请求示例 (HMAC)、已签名请求示例 (RSA) 和已签名请求示例 (Ed25519),了解如何根据您使用的 API 密钥类型计算签名。
时间同步安全
SIGNED请求还需要一个timestamp参数,该参数应为当前时间戳,单位为毫秒或微秒。(参见 通用 API 信息)- 另一个可选参数
recvWindow,用以指定请求的有效期,只能以毫秒为单位。recvWindow扩展为三位小数(例如 6000.346),以便可以指定微秒。- 如果未发送
recvWindow,则 默认值为 5000 毫秒。 recvWindow的最大值为 60000 毫秒。
- 请求处理逻辑如下:
serverTime = getCurrentTime()
if (timestamp < (serverTime + 1 second) && (serverTime - timestamp) <= recvWindow) {
// 开始处理请求
serverTime = getCurrentTime()
if (serverTime - timestamp) <= recvWindow {
// 将请求转发到撮合引擎
} else {
// 拒绝请求
}
// 结束处理请求
} else {
// 拒绝请求
}
关于交易时效性
互联网状况并不100%可靠,不可完全依赖,因此你的程序本地到币安服务器的时延会有抖动. 这是我们设置recvWindow的目的所在,如果你从事高频交易,对交易时效性有较高的要求,可以灵活设置recvWindow以达到你的要求。
不推荐使用5秒以上的recvWindow。最大值不能超过60秒!
POST /api/v3/order 的签名示例
HMAC Keys
不使用分隔符,把查询字符串与 HTTP body
连接在一起将生成请求的签名 payload。任何非 ASCII 字符在签名前都必须进行百分比编码(percent-encoded)。
以下示例分步演示如何使用 echo、openssl 和 curl
从 Linux 命令行发送有效的签名 payload。其中一个例子中的交易对名称完全由 ASCII 字符组成,另一个例子中的交易对名称则包含非 ASCII 字符。
API 密钥和密钥示例:
| Key | Value |
|---|---|
apiKey | vmPUZE6mv9SD5VNHk4HlWFsOr6aKE2zvsw0MuIgwCIPy6utIco14y7Ju91duEh8A |
secretKey | NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j |
警告:请勿与任何人分享您的 API 密钥和秘钥。
此处提供的示例密钥仅用于示 范说明目的。
交易对名称完全由 ASCII 字符组成的请求示例:
| 参数 | 取值 |
|---|---|
symbol | LTCBTC |
side | BUY |
type | LIMIT |
timeInForce | GTC |
quantity | 1 |
price | 0.1 |
recvWindow | 5000 |
timestamp | 1499827319559 |
交易对名称包含非 ASCII 字符的请求示例:
| 参数 | 取值 |
|---|---|
symbol | 123456 |
side | BUY |
type | LIMIT |
timeInForce | GTC |
quantity | 1 |
price | 0.1 |
recvWindow | 5000 |
timestamp | 1499827319559 |
第一步: 构建签名 payload。
- 将参数格式化为
参数=取值对并用&分隔每个参数对。 - 对字符串进行百分比编码(percent-encoded)。
对于第一组示例参数(仅限 ASCII 字符), parameter=value 字符串将如下所示:
symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
对字符串进行百分比编码(percent-encoded)后,签名 payload 如下所示:
symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
对于第二组示例参数(包含一些 Unicode 字符),parameter=value 字符串将如下所示:
symbol=123456&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559
对字符串进行百分比编码(percent-encoded)后,签名 payload 如下所示:
symbol=%EF%BC%91%EF%BC%92%EF%BC%93%EF%BC%94%EF%BC%95%EF%BC%96&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=5000×tamp=1499827319559