幣安 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— 權重 1GET /api/v3/depth— 權重 1-50(取決於 limit 引數)GET /api/v3/account— 權重 10POST /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.com或ntp.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 安全最佳實踐
- 永遠不要在前端程式碼中暴露 Secret Key — 前端可以呼叫你自己的後端,後端再調幣安 API
- 程式碼倉庫 .gitignore 排除金鑰檔案 — 避免推送到 GitHub 後被自動掃描機器人竊取
- 生產環境使用 IP 白名單 — 只允許你的伺服器 IP
- 定期輪換金鑰 — 每 6 個月手動刪除舊金鑰重建一次
- 監控異常呼叫 — 在 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 許可權,盜號者只能下單不能提幣,資產損失通常可控。詳細的應對流程見 風控防護 分類。
需要檢視怎麼應對賬號風控?回到 分類導航 選擇「風控防護」分類檢視完整流程。