Skip to content

Binance JavaScript 现货交易连接器

开放的问题代码风格: Prettiernpm 版本npm 下载量Node.js 版本已知漏洞文档许可证: MIT

这是一个用于 Binance 现货交易 API 的客户端库,允许开发者通过编程方式与 Binance 的现货交易平台进行交互。该库通过以下三个不同的端点提供获取市场数据、执行交易和管理订单的工具:

目录

支持的功能

  • REST API 端点:
    • /api/*
  • WebSocket 端点:实时数据流和请求-响应通信。
  • 包含测试用例和示例,便于快速上手。

安装

要使用该库,请确保你的环境运行的是 Node.js 22.12.0 或更高版本。如果你使用 nvm(Node 版本管理器),可以按如下方式设置正确的版本:

bash
nvm install 22.12.0
nvm use 22.12.0

然后使用 npm 安装库:

bash
npm install @binance/spot

文档

如需详细信息,请参考 Binance API 文档

REST API

所有 REST API 接口均可通过 rest-api 模块访问。REST API 可用于获取市场数据、管理交易以及访问账户信息。请注意,部分接口需要使用您的 Binance API 凭证进行身份验证。

typescript
import { Spot, SpotRestAPI } from '@binance/spot';

const configurationRestAPI = {
    apiKey: 'your-api-key',
    apiSecret: 'your-api-secret',
};
const client = new Spot({ configurationRestAPI });

client.restAPI
    .exchangeInfo({ symbol: 'BNBUSDT' })
    .then((res) => res.data())
    .then((data: SpotRestAPI.ExchangeInfoResponse) => console.log(data))
    .catch((err) => console.error(err));

更多示例可以在 examples/rest-api 文件夹中找到。

配置选项

REST API 支持以下高级配置选项:

  • timeout:请求的超时时间(以毫秒为单位,默认值:1000 毫秒)。
  • proxy:代理配置:
    • host:代理服务器主机名。
    • port:代理服务器端口。
    • protocol:代理协议(http 或 https)。
    • auth:代理身份验证凭据:
      • username:代理用户名。
      • password:代理密码。
  • keepAlive:启用 HTTP 长连接(默认值:true)。
  • compression:启用响应压缩(默认值:true)。
  • retries:失败请求的重试次数(默认值:3 次)。
  • backoff:重试之间的延迟时间(以毫秒为单位,默认值:1000 毫秒)。
  • httpsAgent:用于高级 TLS 配置的自定义 HTTPS 代理。
  • privateKey:用于身份验证的 RSA 或 ED25519 私钥。
  • privateKeyPassphrase:私钥的密码(如果私钥已加密)。
  • timeUnit:指定时间戳的时间单位(例如,毫秒或微秒)。
超时

您可以配置请求的超时时间(以毫秒为单位)。如果请求超过指定的超时时间,则会被中止。有关详细用法,请参阅 超时示例

代理

REST API 支持 HTTP/HTTPS 代理配置。有关详细用法,请参阅 代理示例

长连接(Keep-Alive)

为持久连接启用 HTTP 长连接。有关详细用法,请参阅 长连接示例

压缩

启用或禁用响应压缩。有关详细用法,请参阅 压缩示例

重试

为失败的请求配置重试次数和每次重试之间的延迟时间(以毫秒为单位)。有关详细用法,请参阅 重试示例

HTTPS 代理

为高级 TLS 配置自定义 HTTPS 代理。有关详细用法,请参阅 HTTPS 代理示例

基于密钥对的身份验证

REST API 支持基于密钥对的安全通信身份验证。您可以使用 RSAED25519 密钥对请求进行签名。有关详细用法,请参阅 基于密钥对的身份验证示例

时间单位

REST API 支持不同的时间戳时间单位。有关详细信息,请参阅 时间单位示例

证书锁定

为了增强安全性,您可以在配置中使用 httpsAgent 选项进行证书锁定。这可以确保客户端仅与使用特定证书的服务器通信。有关详细用法,请参阅 证书锁定示例

错误处理

REST API 提供了详细的错误类型,以帮助您有效地处理问题:

  • ConnectorClientError:通用客户端错误。
  • RequiredError:缺少必填参数时抛出。
  • UnauthorizedError:表示缺少或无效的身份验证凭据。
  • ForbiddenError:禁止访问请求的资源。
  • TooManyRequestsError:超出速率限制。
  • RateLimitBanError:IP 地址因超过速率限制而被封禁。
  • ServerError:内部服务器错误。
  • NetworkError:网络连接问题。
  • NotFoundError:资源未找到。
  • BadRequestError:无效的请求。

有关详细用法,请参阅 错误处理示例

测试网(Testnet)

出于测试目的,可以在 Spot Testnet 中使用 /api/* 端点。请在配置中更新 basePath

typescript
import { 现货, 现货RestAPI, 现货_REST_API_TESTNET_URL } from '@binance/现货';

const 配置RestAPI = {
    apiKey: '你的-api-密钥',
    apiSecret: '你的-api-密钥',
    basePath: 现货_REST_API_TESTNET_URL,
};
const 客户端 = new 现货({ 配置RestAPI });

如果未提供 basePath,则默认使用 https://api.binance.com

WebSocket API

WebSocket API 为市场数据和交易操作提供请求-响应通信。可以使用 websocket-api 模块与这些端点进行交互。

typescript
import { 现货, 现货网络套接字API } from '@binance/spot';

const 配置网络套接字API = {
    apiKey: 'your-api-key',
    apiSecret: 'your-api-secret',
};
const 客户端 = new 现货({ 配置网络套接字API });

客户端.网络套接字API
    .connect()
    .then((连接: 现货网络套接字API.网络套接字API连接) =>
        连接.exchangeInfo({ symbol: 'BNBUSDT' })
    )
    .then((res: 现货网络套接字API.ApiResponse<现货网络套接字API.交易所信息响应>) =>
        console.log(res.data)
    )
    .catch((err) => console.error(err));

更多示例可在 examples/websocket-api 文件夹中找到。

配置选项

WebSocket API 支持以下高级配置选项:

  • timeout:设置 WebSocket 请求的超时时间(默认值:5000 毫秒)。
  • reconnectDelay:指定重新连接尝试之间的延迟时间(默认值:5000 毫秒)。
  • compression:启用或禁用 WebSocket 消息的压缩(默认值:true)。
  • agent:为高级配置自定义 WebSocket 代理。
  • mode:选择连接模式,singlepool
    • single:单个 WebSocket 连接。
    • pool:一组 WebSocket 连接。
  • poolSize:在池模式下定义 WebSocket 连接的数量。
  • privateKey:用于身份验证的 RSA 或 ED25519 私钥。
  • privateKeyPassphrase:如果私钥已加密,则提供其密码短语。
  • timeUnit:指定时间戳的时间单位(例如,毫秒或微秒)。
超时

以毫秒为单位设置 WebSocket API 请求的超时时间。有关详细用法,请参阅 超时示例

重新连接延迟

指定 WebSocket 重新连接尝试之间的延迟时间(以毫秒为单位)。有关详细用法,请参阅 重新连接延迟示例

压缩

启用或禁用 WebSocket 消息的压缩。有关详细用法,请参阅 压缩示例

WebSocket 代理

为高级配置自定义代理。有关详细用法,请参阅 WebSocket 代理示例

连接模式

选择 WebSocket 连接的 singlepool 连接模式。single 模式使用单个 WebSocket 连接,而 pool 模式使用一组 WebSocket 连接。有关详细用法,请参阅 连接模式示例

基于密钥对的身份验证

使用 RSA 或 ED25519 私钥进行 WebSocket API 身份验证。有关详细用法,请参阅 密钥对身份验证示例

证书锁定

为了增强安全性,您可以在配置中使用 agent 选项启用证书锁定。这确保了客户端仅与使用特定证书的服务器通信。有关详细用法,请参阅 证书锁定示例

时间单位

指定 WebSocket API 时间戳的时间单位(例如,毫秒或微秒)。有关详细用法,请参阅 时间单位示例

订阅用户数据流

您可以订阅用户数据流,它会发送账户级别的事件,例如账户和订单更新。首先通过 WebSocket API 对 WebSocket 连接执行 logon 操作;然后:

typescript
import { Spot, SpotWebsocketAPI } from '@binance/spot';

const configurationWebsocketAPI = {
    apiKey: 'your-api-key',
    apiSecret: 'your-api-secret',
};
const client = new Spot({ configurationWebsocketAPI });

client.websocketAPI
    .connect()
    .then((connection) => connection.sessionLogon().then(() => connection))
    .then((connection) => connection.userDataStreamSubscribe())
    .then(({ stream }) => {
        stream.on('message', (data) => {
            switch (data.e) {
                case 'balanceUpdate':
                    console.log('余额更新流', data);
                    break;
                case 'outboundAccountPosition':
                    console.log('出站账户头寸流', data);
                    break;
                // …处理其他类型…
                default:
                    console.log('未知流', data);
                    break;
            }
        });
    })
    .catch((err) => console.error(err));

测试网

出于测试目的,Websocket API 还支持测试网环境。请在你的配置中更新 wsURL

typescript
import { 现货, 现货网络套接字API, 现货网络套接字API测试网URL } from '@binance/spot';

const 配置网络套接字API = {
    apiKey: '你的API密钥',
    apiSecret: '你的API密钥机密',
    wsURL: 现货网络套接字API测试网URL,
};
const 客户端 = new 现货({ 配置网络套接字API });

如果未提供 wsURL,则默认使用 wss://ws-api.binance.com:443/ws-api/v3

WebSocket 流

WebSocket 流为市场交易、K线图等提供实时数据推送。请使用 websocket-streams 模块订阅这些流数据。

typescript
import { Spot, SpotWebsocketStreams, SPOT_WS_STREAMS_PROD_URL } from '@binance/spot';

const configurationWebsocketStreams = {
    wsURL: SPOT_WS_STREAMS_PROD_URL,
};
const client = new Spot({ configurationWebsocketStreams });

client.websocketStreams
    .connect()
    .then((connection: SpotWebsocketStreams.WebsocketStreamsConnection) => {
        const stream = connection.aggTrade({ symbol: 'BNBUSDT' });
        stream.on('message', (data: SpotWebsocketStreams.AggTradeResponse) => console.info(data));
    })
    .catch((err) => console.error(err));

更多示例可在 examples/websocket-streams 文件夹中找到。

配置选项

WebSocket Streams API 支持以下高级配置选项:

  • reconnectDelay:指定重连尝试之间的延迟时间(默认值:5000 毫秒)。
  • compression:启用或禁用 WebSocket 消息的压缩(默认值:true)。
  • agent:为高级配置自定义 WebSocket 代理。
  • mode:在 singlepool 连接模式之间选择。
    • single:单个 WebSocket 连接。
    • pool:一组 WebSocket 连接。
  • poolSize:在池模式下定义 WebSocket 连接的数量。
  • timeUnit:指定时间戳的时间单位(例如毫秒或微秒)。
重连延迟

为流指定 WebSocket 重连尝试之间的延迟时间(以毫秒为单位)。详细用法请参见重连延迟示例

压缩

启用或禁用 WebSocket Streams 消息的压缩。详细用法请参见压缩示例

WebSocket 代理

为高级配置自定义代理。详细用法请参见WebSocket 代理示例

连接模式

在 WebSocket Streams 中选择 singlepool 连接模式。single 模式使用单个 WebSocket 连接,而 pool 模式使用一组 WebSocket 连接。详细用法请参见连接模式示例

证书锁定

为了增强安全性,可以在配置中使用 agent 选项进行证书锁定。这可以确保客户端仅与使用特定证书的服务器通信。详细用法请参见证书锁定示例

时间单位

指定 WebSocket Streams 时间戳的时间单位(例如毫秒或微秒)。详细用法请参见时间单位示例

从流中取消订阅

您可以使用 unsubscribe 方法取消订阅特定的 WebSocket 流。这在无需关闭连接的情况下管理活动订阅时非常有用。

typescript
import { Spot, SpotWebsocketStreams, SPOT_WS_STREAMS_PROD_URL } from '@binance/spot';

const configurationWebsocketStreams = {
    wsURL: SPOT_WS_STREAMS_PROD_URL,
};
const client = new Spot({ configurationWebsocketStreams });

client.websocketStreams
    .connect()
    .then((connection: SpotWebsocketStreams.WebsocketStreamsConnection) => {
        const stream = connection.aggTrade({ symbol: 'BNBUSDT' });
        stream.on('message', (data: SpotWebsocketStreams.AggTradeResponse) => console.info(data));

        setTimeout(() => {
            stream.unsubscribe();
            console.log('已取消订阅 BNBUSDT 交易流');
        }, 10000);
    })
    .catch((err) => console.error(err));

测试网

WebSocket 流也支持用于开发和测试的测试网环境。请更新配置中的 wsURL

typescript
import { Spot, SpotWebsocketStreams, SPOT_WS_STREAMS_TESTNET_URL } from '@binance/spot';

const configurationWebsocketStreams = {
    wsURL: SPOT_WS_STREAMS_TESTNET_URL,
};
const client = new Spot({ configurationWebsocketStreams });

如果未提供 wsURL,则默认使用 wss://stream.binance.com:9443

自动连接续期

在 API 密钥 24 小时过期之前,WebSocket API 和 WebSocket 流连接的 WebSocket 连接都会自动续期,以确保持续连接。

测试

要运行测试:

bash
npm 安装

npm 运行测试

测试覆盖内容:

  • REST API 端点
  • WebSocket API 和数据流
  • 错误处理和边界情况

迁移指南

如果你要升级到新的模块化结构,请参考 迁移指南 以获取详细步骤。

贡献

我们欢迎贡献!

由于此仓库包含自动生成的代码,我们建议你首先在 GitHub 上创建一个 issue 来讨论你的想法或提出改进建议。这有助于确保所做的更改符合项目目标和自动生成流程。

贡献步骤如下:

  1. 在 GitHub 上创建一个 issue,描述你的建议或发现的 bug。
  2. 如果确认需要更改,维护人员会将更改合并到主分支。

如果你进行直接贡献,请确保所有测试都能通过。请在讨论并确认更改后再提交 pull request。

感谢你的贡献!

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。