币安 FIX API 的接入卡点通常不在协议本身,而在认证环节。最常见的失败模式是:TCP 连接成功、TLS 握手也完成了,但发送 Logon 消息后服务器没有任何响应,几秒后直接断开。这种"静默断开"几乎总是意味着 Logon 消息里的某个字段不符合要求,而不是网络问题。
先确认账户和密钥资格
FIX API 不是所有币安用户都能直接用的。它只支持币安现货(Spot),不支持合约或杠杆交易。在访问 FIX 会话之前,你需要先在币安 API 管理页面创建一个 Ed25519 类型的 API 密钥,并给它添加对应的权限:"Enable FIX API Trading"(用于下单会话)或"Enable FIX API Reading"(用于只读会话)。
HMAC SHA-256 和 RSA 密钥无法用于 FIX 会话。如果你用的是这两类密钥,连接会被直接拒绝。
Logon 消息的构造规则
FIX 会话的第一条消息必须是 Logon(MsgType = A),而且必须满足几个硬性条件,否则服务器不会返回任何错误说明,只会静默断开。
协议版本必须是 FIX.4.4。这是最常见的静默断开原因。如果你在消息头里写了 8=FIX.4.2,服务器不会提示版本错误,只会不响应然后断开连接。
SenderCompID (49) 和 TargetCompID (56) 的格式需要与币安的要求匹配。对于现货下单会话,TargetCompID 通常是 SPOT。SenderCompID 则是你在 API 密钥管理中自己设置的值。
RawData (96) 签名是认证的核心。它是一个 Base64 编码的 Ed25519 签名,签名内容由五个字段按顺序拼接而成,中间用 SOH(ASCII 1)分隔:
- MsgType(即 A)
- SenderCompID(你的 49 字段值)
- TargetCompID(你的 56 字段值)
- MsgSeqNum(消息序号)
- SendingTime(发送时间)
你需要用创建 API 密钥时生成的 Ed25519 私钥对这个拼接字符串进行签名,然后 Base64 编码,填入 RawData 字段。
Username (553) 字段填入你的 API 密钥本身(不是私钥)。
TLS 连接的两个关键配置
FIX API 强制要求 TCP + TLS 连接。普通的明文 TCP 连接不会收到任何响应,因为服务器在等待 TLS 握手。
如果你用的客户端库不原生支持 TLS(比如某些 FIX 库只处理应用层消息),可以先用 stunnel 等本地代理来封装 TLS。配置 stunnel 时需要注意两个容易忽略的参数:
SNI(Server Name Indication)必须发送。币安在 2026 年 6 月更新了 FIX TLS 配置,要求客户端在 TLS 握手时发送 SNI,并对请求的 hostname 验证证书。不发送 SNI 的客户端会在握手阶段收到证书错误,导致连接失败。一些 Node.js 客户端如果不显式配置 SNI,就会触发这个问题。
证书验证不能跳过。stunnel 配置中需要设置 verifyChain = yes 和 checkHost = fix-oe.binance.com(或对应的 testnet/demo 域名),确保连接的是币安的合法服务器,而不是中间人。
连接核验:先走 Testnet,再上生产
币安提供了 Testnet 和 Demo Mode 两种环境用于验证 FIX 连接,不需要动用真实资金。
Testnet 的 FIX 下单会话端点是 fix-oe.testnet.binance.vision:9000。你需要先在 testnet.binance.vision 创建一个独立的 Ed25519 API 密钥,然后用这个密钥构造 Logon 消息。如果 Logon 成功,你会收到一个 MsgType = A 的 Logon 响应,包含服务器的 HeartBtInt 和 SessionStatus 信息。
Demo Mode 的端点与生产环境格式相同,只是域名不同:demo-fix-oe.binance.com:9000。Demo Mode 使用真实的 API 端点,但只做模拟撮合,适合在 Testnet 验证通过后、正式上线前做最后的连接稳定性测试。
核验成功的标准:发送 Logon 后,在合理时间内(通常 1 秒内)收到服务器的 Logon 响应。响应中 MsgType = A,且没有 Reject(MsgType = 3)消息。如果你收到 "Signature for this request is not valid" 的 Logon 拒绝,说明签名内容或编码有问题,需要检查拼接顺序、SOH 分隔符和 Base64 编码是否正确。
常见静默断开的原因排查
如果连接成功但 Logon 后没有任何响应就断开,按这个顺序检查:
- 消息头是否以 8=FIX.4.4 开头。这是最高频的原因。
- TLS 是否真的启用了。用抓包工具或 stunnel 日志确认握手确实完成,而不是你在明文端口上发消息。
- RawData 签名的拼接内容是否与文档一致。五个字段的顺序、SOH 分隔符、ASCII 编码都不能错。
- API 密钥是否具备 FIX 权限。在 API 管理页面确认勾选了对应的 FIX 权限。
- SenderCompID 是否与密钥配置匹配。币安要求你为 FIX 会话指定一个 SenderCompID,这个值需要和 API 密钥关联。
如果以上都确认无误但问题仍在,可以在币安开发者社区发帖,附上完整的 Logon 消息(用 | 替代 SOH 方便阅读)和 stunnel 日志,通常能得到更具体的诊断。
参考资料
- Binance Developer Community·Disconnected from FIX without feedback upon sending a LOGON message,页面发布或更新日期:2025-11-10;核查日期:2026-10-02。
- Binance Open Platform·FIX API,页面发布或更新日期:2026-09-24;核查日期:2026-10-02。
- Binance Support·币安现货API服务升级公告,页面发布或更新日期:2024-08-05;核查日期:2026-10-02。
- DeepWiki·FIX Connection and Authentication | binance/binance-spot-api-docs,页面发布或更新日期:2026-04-13;核查日期:2026-10-02。
- Binance Open Platform·FIX API,页面未标明更新日期;核查日期:2026-10-02。
- DeepWiki·FIX API | binance/binance-spot-api-docs,页面发布或更新日期:2026-04-13;核查日期:2026-10-02。
- Binance Developer Community·Problems getting responses on Fix API test server,页面发布或更新日期:2024-10-09;核查日期:2026-10-02。
- Binance ME·Notice on Binance Spot API Update (2026-03-12),页面发布或更新日期:2026-03-11;核查日期:2026-10-02。
- Binance·现货模拟交易,页面发布或更新日期:2026-09-10;核查日期:2026-10-02。
- Binance·Demo Mode for SPOT Trading,页面发布或更新日期:2026-09-14;核查日期:2026-10-02。
- Stack Overflow·Fix Protocol quickfix c++: RawData (tag 96) requires base64 encoded signature,页面发布或更新日期:2025-01-01;核查日期:2026-10-02。



