API接入

币安API怎么申请?密钥签名一般要怎么生成

币安 API 密钥申请的完整流程:从 KYC 通过到密钥创建、IP 白名单设置、HMAC-SHA256 签名生成,附 Python 和 Node.js 代码示例。

币安 API 申请的核心流程是:完成 KYC L2 实名 → 进入 币安官网 后台 API 管理页 → 创建密钥 → 设置 IP 白名单 → 在代码中用 HMAC-SHA256 对参数签名调用。整个过程约 15 分钟,密钥创建后立即可用,免费且无每月费用。如果你还没安装币安手机端方便管理 2FA 验证,可以用 币安官方APP 安装安卓版;iPhone 用户参考 iOS安装教程。本文按 4 个部分把申请、签名、报错处理、限频策略讲清,附 Python 和 Node.js 完整代码。

一、申请 API 密钥的前置条件

1. 完成 KYC L2 实名认证

币安 API 要求账号至少完成 L2 中级身份认证(提交身份证 + 人脸识别)。L1 基础认证的账号无法创建 API 密钥。L2 通常 24 小时内审核完成。

2. 启用 2FA(必须)

API 密钥创建过程中需要 2FA 验证码确认。如果还没绑定,先到 安全中心 → 双重身份验证 → Google Authenticator 完成绑定。

3. 充值 / 持仓不强制要求

账户为零余额也可以创建 API 密钥,方便提前准备好密钥再充值。

二、创建 API 密钥(5 个步骤)

第一步:进入 API 管理页

登录 币安官网 → 右上角头像 → API 管理。直接 URL 是 binance.com/zh-CN/my/settings/api-management

第二步:选择密钥类型

币安提供两种 API 密钥类型:

类型 用途 推荐场景
System generated 系统自动生成密钥对 90% 用户首选,简单稳定
Self-generated 你提供 Ed25519 公钥 高级用户,密钥永不离开本地

新手选 System generated 即可。

第三步:填写密钥标签

给密钥取个名字(标签),便于以后管理。例如:

  • python-grid-bot — 网格交易机器人
  • nodejs-monitor — 价格监控脚本
  • quantitative-strategy-v2 — 量化策略 v2

标签只对你自己可见,币安不会基于标签做任何区分。

第四步:通过 2FA 验证

输入:

  • 邮箱 6 位验证码
  • 手机短信 6 位验证码
  • Google Authenticator 6 位动态码

三个码都正确后,密钥生成完成。

第五步:保存 Secret Key(关键)

密钥页面会显示:

  • API Key:永久可见,可以随时回来查
  • Secret Key只显示这一次,关闭页面后再也看不到

必须立即把 Secret Key 复制到本地安全位置(密码管理器或加密笔记),否则只能删除重建。

三、配置密钥权限和 IP 白名单

密钥创建后,默认所有权限关闭,必须手动启用:

权限选项

权限 用途 风险等级
Enable Reading 查询余额、订单、行情
Enable Spot & Margin Trading 现货 / 杠杆下单
Enable Futures 合约下单
Enable Withdrawals 提币(必须配合 IP 白名单) 极高
Permits Universal Transfer 资金账户互转

安全建议:只开启你需要的权限。读取行情数据只勾 Enable Reading;做现货量化只勾 Enable Reading + Enable Spot & Margin Trading永远不要 在不必要的情况下开启 Enable Withdrawals。

IP 白名单(强烈推荐)

在密钥设置页面填写允许使用此密钥的服务器 IP 地址(最多 5 个)。配置后,只有来自这些 IP 的请求 才能用此密钥操作账户。

如果服务器是动态 IP(家用宽带),可以选择 Unrestricted (Less Secure) 不限制 IP,但权限会自动降级——Enable Withdrawals 在不限制 IP 的密钥上无法启用,这是币安强制的安全规则。

四、生成签名调用 API

币安 REST API 中,所有涉及账户操作的请求都需要签名。签名算法是 HMAC-SHA256。

签名规则

签名内容 = 所有请求参数按 URL 编码后用 & 拼接的字符串

例如查询账户余额的接口:

GET /api/v3/account
参数: timestamp=1712876400000

签名内容: timestamp=1712876400000
签名: HMAC_SHA256(secret_key, "timestamp=1712876400000")

最终请求:

GET /api/v3/account?timestamp=1712876400000&signature=<计算出的签名>
Header: X-MBX-APIKEY: <你的API Key>

Python 完整示例

import hmac, hashlib, time, requests

API_KEY = "你的API Key"
SECRET_KEY = "你的Secret Key"
BASE_URL = "https://api.binance.com"

def sign(params: dict) -> str:
    query = "&".join([f"{k}={v}" for k, v in params.items()])
    return hmac.new(SECRET_KEY.encode(), query.encode(), hashlib.sha256).hexdigest()

def get_account():
    params = {"timestamp": int(time.time() * 1000)}
    params["signature"] = sign(params)
    headers = {"X-MBX-APIKEY": API_KEY}
    r = requests.get(f"{BASE_URL}/api/v3/account", params=params, headers=headers)
    return r.json()

print(get_account())

Node.js 完整示例

const crypto = require('crypto');
const axios = require('axios');

const API_KEY = '你的API Key';
const SECRET_KEY = '你的Secret Key';
const BASE_URL = 'https://api.binance.com';

function sign(params) {
  const query = Object.keys(params).map(k => `${k}=${params[k]}`).join('&');
  return crypto.createHmac('sha256', SECRET_KEY).update(query).digest('hex');
}

async function getAccount() {
  const params = { timestamp: Date.now() };
  params.signature = sign(params);
  const r = await axios.get(`${BASE_URL}/api/v3/account`, {
    params,
    headers: { 'X-MBX-APIKEY': API_KEY }
  });
  return r.data;
}

getAccount().then(console.log);

五、限频与权重

币安 API 用 权重(Weight) 控制调用频率:

限制项 默认值
每分钟权重上限 6000
每 10 秒下单上限 100 单
每天下单上限 200,000 单
WebSocket 单连接订阅数上限 1024
单 IP WebSocket 连接数上限 300

常见接口的权重

  • GET /api/v3/ticker/price — 权重 1
  • GET /api/v3/depth — 权重 1-50(取决于 limit 参数)
  • GET /api/v3/account — 权重 10
  • POST /api/v3/order — 权重 1(但占用下单频次)

响应头会返回当前权重

  • X-MBX-USED-WEIGHT-1m:当前 1 分钟内已用权重
  • X-MBX-ORDER-COUNT-10s:当前 10 秒内已下单次数

超出权重会返回 429 Too Many Requests,严重违规会返回 418 并临时封 IP(2 分钟到 3 天不等)。

六、常见报错及处理

报错: -1022 Signature for this request is not valid

原因:签名错误。最常见的是参数顺序不一致,或 URL 编码方式不对。 处理

  • 确保签名时用的字符串与请求时的查询字符串 完全一致
  • 数字类型的参数不要加引号(如 timestamp=1712876400000 而不是 timestamp="1712876400000"
  • 对特殊字符做正确的 URL 编码

报错: -1021 Timestamp for this request was 1000ms ahead of the server's time

原因:本地时间与币安服务器时间差超过 1 秒。 处理

  • 同步本地系统时间(NTP)
  • 或在请求中加 recvWindow=10000 参数把容差调到 10 秒
  • 服务器在中国大陆推荐使用 time.windows.comntp.aliyun.com

报错: -2014 API-key format invalid

原因:密钥字符串错误。 处理:检查是否复制时多了空格、换行;密钥应为 64 位字母数字。

报错: -1003 Too many requests; current limit is X requests per minute

原因:超出权重上限。 处理

  • 减少调用频率或合并请求(例如用 /api/v3/ticker/24hr 一次拿所有交易对而不是逐个查询)
  • 改用 WebSocket 接收实时数据,减少 REST 调用
  • 等待 1 分钟后重试

七、API 安全最佳实践

  1. 永远不要在前端代码中暴露 Secret Key — 前端可以调用你自己的后端,后端再调币安 API
  2. 代码仓库 .gitignore 排除密钥文件 — 避免推送到 GitHub 后被自动扫描机器人窃取
  3. 生产环境使用 IP 白名单 — 只允许你的服务器 IP
  4. 定期轮换密钥 — 每 6 个月手动删除旧密钥重建一次
  5. 监控异常调用 — 在 API 管理页查看每日调用统计,发现异常立即停用

常见问题 FAQ

Q1: API 密钥是免费的吗?

A: 完全免费。币安不对 API 调用收费(只在实际下单成交时收手续费),创建密钥也不需要任何押金。但每个账号最多创建 30 个 API 密钥,到达上限需要先删除旧的。

Q2: 用 API 下单的手续费比手动低吗?

A: 不会自动更低。手续费只与你的 VIP 等级和持有的 BNB 数量相关,无论是手动下单还是 API 下单都按同一个费率表。但 API 适合做高频交易,能享受更精准的成交价。

Q3: 测试环境可以模拟交易吗?

A: 可以。币安提供 Spot Testnet(现货测试网)和 Futures Testnet(合约测试网),免费拿测试币练习 API 调用,不会影响真实账户。

Q4: 用 ccxt 这类第三方库简单还是直接调 API 简单?

A: 看场景。ccxt 适合需要支持多个交易所的项目,封装好了签名和参数转换;直接调 API 适合只用币安、性能敏感的场景(少了一层抽象,调试也更直接)。新手推荐先用 ccxt 跑通流程,再决定是否切换到原生调用。

Q5: 我的 API 密钥被盗了怎么办?

A: 立即币安官网 → API 管理 中删除该密钥(删除操作秒级生效)。然后检查最近的交易和提币记录,发现异常通过客服申诉。如果没开启 Enable Withdrawals 权限,盗号者只能下单不能提币,资产损失通常可控。详细的应对流程见 风控防护 分类。

需要查看怎么应对账号风控?回到 分类导航 选择「风控防护」分类查看完整流程。

继续浏览

对币安使用还有疑问?回到分类页查找同主题的其它教程。

分类导航

相关教程

币安Spot API怎么用?从零到第一单的可运行代码 2026-04-14 币安Futures和Spot API有什么区别?端点参数权重对比 2026-04-14 币安API会被封IP吗?限频策略与权重计算详解 2026-04-14 币安WebSocket怎么订阅行情?单流多流生产级代码 2026-04-14