MEXC API 接入指南
1. 概述
MEXC API 是一套强大的接口,允许开发者以编程方式与 MEXC 交易所进行交互,从而实现自动化交易、数据分析和账户管理等多种功能。通过 API,开发者可以实时获取市场深度数据、执行买卖订单、查询账户余额、跟踪交易历史等。接入 API 后,您可以构建个性化的交易策略、开发高效的数据分析工具,或者将 MEXC 的服务无缝集成到您现有的交易平台或管理系统中。MEXC API 提供了多种编程语言的支持,方便不同背景的开发者使用。本文档旨在提供关于如何接入 MEXC API 的详尽指南,包括API密钥的获取、认证机制、常用接口的调用方法以及注意事项。
2. 准备工作
在开始接入 MEXC API 之前,为了确保顺利集成和安全使用,您需要完成以下关键准备工作:
- 注册 MEXC 账户: 如果您尚未拥有 MEXC 账户,请访问 MEXC 官方网站,按照注册流程创建一个账户。这是使用 MEXC API 的前提条件。
- 完成 KYC 认证: 为了符合监管要求并提升账户安全级别,在使用 API 进行交易之前,您需要完成 KYC(Know Your Customer)身份验证。请登录您的 MEXC 账户,根据平台指引提交必要的身份证明文件,完成 KYC 认证。不同级别的 KYC 认证可能对应不同的 API 使用权限和交易限额。
-
创建 API 密钥:
登录您的 MEXC 账户,导航至 API 管理页面,创建一个新的 API 密钥对。在创建过程中,务必仔细配置 API 密钥的权限。例如,如果您计划使用 API 进行交易,则必须启用交易权限;如果您只需要获取市场数据,则只需启用读取权限。谨慎选择权限能够最大限度地降低潜在的安全风险。创建完成后,请务必安全地存储您的
API Key
和Secret Key
。API Key
用于标识您的身份,而Secret Key
用于对您的请求进行签名验证。切勿将您的API Key
和Secret Key
泄露给任何第三方,因为他们可以使用这些密钥访问您的账户。强烈建议您启用双因素认证(2FA)以增强账户的安全性。
3. API 密钥管理
在 MEXC 交易所进行 API 交易,您需要生成并妥善管理 API 密钥。MEXC API 密钥由两个关键部分组成:
API Key
(API 密钥)和
Secret Key
(私钥)。
-
API Key (API 密钥):
API Key
类似于您的用户名,用于唯一标识您的身份,方便 MEXC 服务器识别您的请求来源。每次发起 API 请求时,都需要提供API Key
。 -
Secret Key (私钥):
Secret Key
类似于您的密码,用于对 API 请求进行数字签名,确保请求的完整性和真实性。请务必安全地保存您的Secret Key
,切勿泄露给任何第三方。一旦泄露,他人可以使用您的密钥进行交易操作,造成资产损失。如果怀疑Secret Key
泄露,请立即撤销旧的密钥并生成新的密钥对。Secret Key
的安全性至关重要,MEXC 强烈建议您采取适当的安全措施来保护它。
4. API 接口类型
MEXC API 提供两种类型的接口,以满足不同用户的需求和应用场景:
-
REST API:
这是一种基于 HTTP 协议的请求/响应式接口。它采用 JSON (JavaScript Object Notation) 格式进行数据传输,易于解析和处理。REST API 适用于各种需要同步交互的操作,例如:
- 获取市场数据: 查询交易对的最新价格、成交量、历史K线数据等。
- 查询账户信息: 查看账户余额、持仓情况、交易历史记录等。
- 下单交易: 创建、修改、取消限价单、市价单等。
- 资金划转: 在不同账户之间进行资金转移。
-
WebSocket API:
这是一种基于 WebSocket 协议的全双工通信接口。它允许服务器主动向客户端推送数据,无需客户端频繁请求。WebSocket API 特别适用于对实时性要求极高的应用,例如:
- 获取实时行情: 接收交易对的最新成交价格、成交量等实时更新。
- 获取深度数据: 订阅交易对的实时买卖盘口信息,了解市场深度。
- 接收订单更新: 实时追踪订单状态的变化,如订单创建、成交、取消等。
5. REST API 接入
5.1 请求方式
MEXC REST API 采用标准的 HTTP 协议进行通信,支持多种 HTTP 请求方法,以便于执行不同的操作。 这些方法包括:
- GET: 用于从服务器检索数据。 通常用于查询信息,例如账户余额、订单详情或市场数据。 GET 请求的参数通常附加在 URL 中。
- POST: 用于向服务器发送数据,通常用于创建新的资源或执行某些操作。 例如,POST 请求可以用于提交订单、创建提现请求或注册 API 密钥。 POST 请求的参数通常包含在请求的主体中。
- PUT: 用于更新服务器上的现有资源。 例如,PUT 请求可以用于修改订单的参数或更新账户信息。 PUT 请求的参数通常包含在请求的主体中,并且需要指定要更新资源的唯一标识符。
- DELETE: 用于从服务器删除资源。 例如,DELETE 请求可以用于取消订单或删除 API 密钥。 DELETE 请求需要指定要删除资源的唯一标识符。
理解和正确使用这些 HTTP 方法对于成功地与 MEXC REST API 交互至关重要。 具体使用哪种方法取决于你要执行的操作。
5.2 请求 URL
MEXC REST API 的请求 URL 遵循特定的结构,以便客户端能够准确地访问所需的数据或执行特定的操作。其标准格式如下:
https://api.mexc.com/api/{版本号}/{接口路径}
其中:
-
https://api.mexc.com/api/
是 MEXC REST API 的根域名,所有请求都必须以该域名开头。 -
{版本号}
表示 API 的版本号。MEXC 可能会随着时间的推移更新 API,版本号用于区分不同的 API 版本,例如v3
。使用正确的版本号对于确保请求与服务器的预期行为匹配至关重要。 -
{接口路径}
指定要访问的具体 API 接口。不同的接口路径对应于不同的功能,例如获取市场行情、下单交易等。接口路径通常采用 RESTful 风格,清晰地表达请求的目的。
例如,以下 URL 用于获取 BTCUSDT 交易对的最新价格信息:
https://api.mexc.com/api/v3/ticker/price?symbol=BTCUSDT
在这个例子中:
-
v3
是 API 的版本号。 -
ticker/price
是接口路径,表示获取指定交易对的价格信息。 -
?symbol=BTCUSDT
是查询参数,用于指定要查询的交易对为 BTCUSDT。不同的接口可能需要不同的查询参数,这些参数用于进一步筛选或定制请求的结果。
构建有效的请求 URL 对于成功调用 MEXC REST API 至关重要。 务必确保 URL 的格式正确,并且包含了所有必需的参数。 查阅 MEXC 官方 API 文档以获取关于可用接口路径、版本号和所需参数的详细信息。
5.3 请求参数
API 请求通常需要携带参数来指定操作的具体细节。这些参数允许客户端向服务器传递必要的信息,以便服务器能够正确处理请求并返回期望的结果。请求参数主要通过两种方式传递:查询字符串和请求体。
查询字符串:
查询字符串是将参数以键值对的形式附加到 URL 之后。每个键值对之间用等号(=)分隔,多个键值对之间用和号(&)连接。例如:
https://api.example.com/resource?param1=value1¶m2=value2
。 使用查询字符串的优势在于简单直接,易于实现和调试。但其缺点是参数长度受到 URL 长度的限制,且不适合传递复杂或敏感数据。对于只需要少量参数或进行简单的 GET 请求时,查询字符串是一种常用的选择。
请求体:
请求体是指包含在 HTTP 请求消息体中的数据。当需要传递大量数据、复杂数据结构,或进行涉及数据修改的 POST、PUT、PATCH 请求时,通常使用请求体。 JSON (JavaScript Object Notation) 是一种常用的数据格式,易于解析和生成,适合作为请求体的内容。在 POST 请求中,客户端会将参数以 JSON 格式编码后放入请求体中,并通过
Content-Type
头部声明为
application/
,告知服务器请求体的格式。例如:
{"param1": "value1", "param2": "value2"}
。使用请求体可以克服 URL 长度限制,更安全地传递敏感数据,并支持更复杂的数据结构。选择何种方式传递请求参数取决于具体的 API 设计和应用场景。
5.4 请求头
部分 API 接口需要添加请求头,例如 Content-Type
、X-MEXC-APIKEY
等。
Content-Type
: 用于指定请求 body 的数据格式。例如,application/
表示 JSON 格式。X-MEXC-APIKEY
: 用于指定 API Key。
5.5 签名
为了保障 API 请求的安全性与完整性,防止恶意篡改或未经授权的访问,所有 API 请求都需要进行签名验证。签名机制确保请求的真实来源,并验证数据在传输过程中是否被修改。以下是详细的签名算法说明:
-
参数排序:
将所有参与签名的请求参数,包括 URL 查询参数和 POST 请求体中的参数(Content-Type 为
application/x-www-form-urlencoded
或multipart/form-data
时),按照参数名称的字母顺序进行升序排列。如果参数名相同,则按照参数值进行排序。 -
构建签名字符串:
将排序后的参数按照
key=value&key=value
的格式拼接成一个字符串。注意:-
每个键值对之间使用
&
符号连接。 -
参数名称 (
key
) 和参数值 (value
) 之间使用=
符号连接。 -
URL 编码:如果参数值包含特殊字符(例如空格、
&
、=
等),需要进行 URL 编码,以确保字符串的正确性。 - 空值处理:如果参数值为 null 或空字符串,可以选择忽略该参数,或者将其值视为空字符串参与签名。具体策略取决于 API 的具体实现。
-
每个键值对之间使用
- HMAC-SHA256 加密: 使用您的 Secret Key 作为密钥,对拼接后的字符串进行 HMAC-SHA256 加密。HMAC (Hash-based Message Authentication Code) 是一种消息认证码算法,它结合了哈希函数和密钥,用于验证数据的完整性和真实性。
- 转换为大写: 将 HMAC-SHA256 加密后的结果(十六进制字符串)转换为大写形式。这是为了统一签名的格式,避免大小写敏感问题。
-
添加签名到请求头:
将生成的大写签名字符串添加到 HTTP 请求头中。通常,请求头的键 (Header Key) 为
signature
。服务器端会读取该请求头,并使用相同的算法验证签名是否有效。
示例代码 (Python):
import hashlib
import hmac
import urllib.parse
def generate_signature(secret_key, params):
"""
为给定的参数生成签名,使用提供的 Secret Key。
Args:
secret_key (str): 您的 Secret Key.
params (dict): 包含参数的字典 (key-value 对).
Returns:
str: 生成的签名 (大写字符串).
"""
query_string = urllib.parse.urlencode(sorted(params.items()))
signature = hmac.new(secret_key.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256).hexdigest().upper()
return signature
代码解释:
-
hashlib
,hmac
, 和urllib.parse
模块被导入,用于哈希计算、消息认证和 URL 编码。 -
generate_signature
函数接收 Secret Key 和参数字典作为输入。 -
sorted(params.items())
对参数字典按照键名进行排序。 -
urllib.parse.urlencode()
将排序后的参数编码为 URL 查询字符串格式 (key=value&key=value
)。 -
hmac.new()
创建一个新的 HMAC 对象,使用 Secret Key 和 SHA256 哈希算法。 -
digest()
方法返回二进制格式的哈希值,而hexdigest()
方法返回十六进制格式的哈希值。 -
upper()
方法将十六进制字符串转换为大写。
注意事项:
- Secret Key 必须妥善保管,避免泄露。
- 签名算法的细节可能因 API 提供商而异,请务必仔细阅读 API 文档。
- 在实际应用中,建议对请求参数进行必要的验证,例如检查参数类型、长度和范围,以提高安全性。
- 为了防止重放攻击,可以引入时间戳参数,并设置签名的有效期限。
示例:生成加密货币交易签名
在加密货币交易中,安全地验证请求至关重要。通常,交易所会要求使用签名来验证交易请求的真实性和完整性。以下示例展示了如何使用密钥(
secret_key
)和交易参数生成签名。
定义一个密钥。请务必妥善保管此密钥,切勿泄露给他人。这是保护您的交易安全的关键。
secret_key = "YOUR_SECRET_KEY"
接下来,准备交易参数。这些参数包含了交易的具体信息,例如交易的币种(
symbol
)、买卖方向(
side
)、交易类型(
type
)、交易数量(
quantity
)和时间戳(
timestamp
)。时间戳用于防止重放攻击。
params = {
"symbol": "BTCUSDT", // 交易的币种,例如BTCUSDT表示比特币兑美元
"side": "BUY", // 交易方向,BUY表示买入,SELL表示卖出
"type": "MARKET", // 交易类型,MARKET表示市价交易
"quantity": 0.01, // 交易数量,例如0.01个比特币
"timestamp": 1678886400000 // 时间戳,表示交易发生的时间,通常是Unix时间戳(毫秒)
}
然后,使用密钥和交易参数生成签名。生成签名的方法取决于交易所的具体要求。通常,会使用哈希算法(例如HMAC-SHA256)对参数进行加密处理。
以下是一个使用Python生成签名的示例代码(需要根据交易所的API文档进行调整):
import hashlib
import hmac
import urllib.parse
def generate_signature(secret_key, params):
"""
生成签名。
Args:
secret_key (str): 密钥。
params (dict): 交易参数。
Returns:
str: 签名。
"""
# 将参数按照键名进行排序,并转换为查询字符串格式
query_string = urllib.parse.urlencode(sorted(params.items()))
# 使用HMAC-SHA256算法生成签名
hashed = hmac.new(secret_key.encode('utf-8'), query_string.encode('utf-8'), hashlib.sha256)
signature = hashed.hexdigest()
return signature
signature = generate_signature(secret_key, params)
print(f"Signature: {signature}")
将生成的签名添加到交易请求中,并发送到交易所。交易所会验证签名,以确保请求的真实性和完整性。
5.6 响应
MEXC REST API 使用 JSON (JavaScript Object Notation) 作为标准数据交换格式。每个API请求的结果都将以JSON对象的形式返回。理解响应的结构对于有效地利用API至关重要。响应中包含以下关键字段:
-
code
: 状态码,表示API请求的处理结果。0
(零) 表示请求成功,数据已成功返回。任何非零值都表示发生了错误或异常情况,需要根据msg
字段进一步排查问题。建议您的应用程序能够正确解析并处理不同的状态码,以实现更健壮的错误处理机制。 -
msg
: 错误信息。当code
字段指示请求失败时,msg
字段会提供详细的错误描述信息。这些信息通常包含错误的原因,有助于开发者快速定位和解决问题。请注意,错误信息可能因具体的API端点和错误类型而有所不同。 -
data
: 返回的数据。此字段包含API请求的实际结果数据。数据的具体结构和内容取决于所调用的API端点。例如,获取交易对信息的API可能会返回包含交易对代码、价格、交易量等信息的JSON对象;而提交订单的API可能会返回订单ID和订单状态等信息。 开发者需要参考API文档了解每个端点返回的data
字段的具体结构。
6. WebSocket API 接入
6.1 连接
与MEXC WebSocket API建立连接至关重要,这通过WebSocket客户端实现。客户端通过特定的endpoint接入,从而实现实时数据流的接收与发送。
MEXC WebSocket API的统一接入点(endpoint)是:
wss://wbs.mexc.com/ws
。务必使用安全的
wss
协议,它提供了加密的通信通道,确保数据传输的安全性及完整性。
客户端在连接时应确保网络连接稳定,并正确配置WebSocket客户端库。 连接成功后,客户端可以发送订阅消息以接收特定的市场数据或账户信息。 建议根据应用程序的需求,合理管理连接,避免频繁建立和断开连接,以提高效率和降低资源消耗。
6.2 订阅
为了获取实时加密货币市场数据,你需要向 WebSocket 服务器发送订阅消息。订阅功能允许你指定感兴趣的数据流,服务器会持续推送相关更新。以下详细解释了订阅消息的结构和参数:
订阅消息采用 JSON 格式,其基本结构如下:
{
"method": "SUBSCRIPTION",
"params": [
"[email protected]@BTCUSDT"
],
"id": 1
}
该 JSON 对象包含以下关键字段:
-
method
: 这是一个字符串字段,用于指定消息的类型。对于订阅请求,其值必须严格为SUBSCRIPTION
。 -
params
: 这是一个数组字段,包含一个或多个订阅主题。每个订阅主题定义了你希望接收的数据类型和交易对。 例如,"[email protected]@BTCUSDT"
表示订阅 BTCUSDT 交易对的现货交易的公开成交数据,版本为 v3。不同的交易所或数据提供商可能使用不同的主题格式,务必参考其官方文档。 -
id
: 这是一个数字字段,用于唯一标识每个订阅请求。当服务器响应你的订阅请求时,会使用相同的 ID。 这有助于你将响应与相应的请求进行关联,便于跟踪和管理你的订阅。每个新的订阅请求都应使用不同的 ID。
更详细地解释
params
中的订阅主题:
-
spot
: 指定数据类型,这里表示现货交易数据。 也可能是 futures (期货),swap (永续合约)等。 -
public.deals.v3
: 指定数据频道,这里表示公开成交数据, 版本为v3。 不同频道包含不同的信息,如深度数据(depth),K线数据(kline)。 -
BTCUSDT
: 指定交易对,这里表示比特币兑美元。
6.3 取消订阅
当您不再需要接收特定交易对的实时数据时,需要向 WebSocket 服务器发送取消订阅消息。此操作可以有效减少服务器资源消耗,并避免客户端接收到不必要的信息,从而优化网络带宽的使用。
取消订阅消息的格式如下,它遵循 JSON 格式,包含三个关键字段:
method
、
params
和
id
。
{
"method": "UNSUBSCRIPTION",
"params": [
"[email protected]@BTCUSDT"
],
"id": 1
}
字段解释:
-
method
: 指定操作类型,此处为"UNSUBSCRIPTION"
,表示取消订阅操作。该字段必须准确无误,以便服务器正确解析并执行相应的逻辑。 -
params
: 包含一个数组,数组中包含了要取消订阅的频道名称。在本例中,"[email protected]@BTCUSDT"
代表取消订阅 BTCUSDT 交易对的现货交易公共成交数据频道。 您可以订阅多个频道,只需要在数组中添加对应的频道名称即可,例如["[email protected]@BTCUSDT", "[email protected]@ETHUSDT"]
。 -
id
: 一个用于标识请求的唯一 ID。此 ID 可以是任意数字,服务器会在响应消息中返回相同的 ID,以便客户端能够将请求与响应进行匹配。对于取消订阅操作,即使服务器不返回响应,也建议包含此字段以方便追踪。
请确保发送的取消订阅消息格式正确,频道名称与之前订阅时使用的名称完全一致,才能成功取消订阅。 如果频道名称不正确,服务器可能无法识别,从而导致无法取消订阅。
7. 常见问题
- API 密钥无效: 请仔细检查您的 API 密钥是否正确无误。确认您复制和粘贴密钥时没有遗漏任何字符,并且没有包含额外的空格。请务必确认您的 API 密钥已在 MEXC 平台上激活,并且已启用执行您所请求操作所需的相应权限。例如,如果您尝试进行交易,需要确保您的 API 密钥已启用交易权限。您可以登录您的 MEXC 账户,在 API 管理页面查看和修改密钥的权限设置。
- 签名错误: 签名错误通常表示您在生成请求签名时出现问题。请检查您使用的签名算法是否与 MEXC API 文档中指定的算法一致(通常为 HMAC-SHA256)。同时,确保您使用的 Secret Key 是正确的,并且没有被泄露。Secret Key 用于对请求进行签名,以验证请求的真实性和完整性。仔细检查您的代码,确保签名过程中的所有参数都已正确排序和编码,并且与 API 文档中的示例一致。
- 请求频率限制: MEXC API 为了保护系统稳定性和公平性,对请求频率进行了限制(Rate Limit)。如果您的请求频率超过了限制,您将会收到错误信息,通常是 HTTP 429 Too Many Requests。请合理控制您的请求频率,避免在短时间内发送过多的请求。您可以考虑使用队列或者延迟机制来平滑请求流量。不同的 API 接口可能有不同的频率限制,请参考 MEXC API 文档了解详细的频率限制规则。您可以监控 API 返回的响应头信息,其中可能包含有关剩余请求次数和重置时间的信息,以便更好地管理您的请求。
- 网络连接问题: 网络连接问题可能导致您无法访问 MEXC API。请检查您的网络连接是否正常,确保您可以访问互联网。您可以尝试使用 `ping` 命令或者其他网络诊断工具来测试您的网络连接。如果您在使用代理服务器,请确保您的代理服务器设置正确,并且可以正常访问 MEXC API。防火墙设置也可能阻止您访问 MEXC API,请检查您的防火墙设置,确保允许访问 MEXC API 的流量通过。如果问题仍然存在,您可以尝试联系您的网络服务提供商寻求帮助。
8. 示例代码
以下是一个使用 Python 接入 MEXC REST API 获取 BTCUSDT 最新价格的示例代码。这段代码演示了如何通过 HTTP 请求从 MEXC 交易所获取实时的 BTCUSDT 交易对的价格信息。为确保代码的健壮性,我们包含了错误处理机制,以应对网络请求可能出现的异常情况。
import requests
import
def get_btc_usdt_price():
"""
从 MEXC API 获取 BTCUSDT 的最新价格。
此函数向 MEXC 的公共 API 发送 GET 请求,
并解析返回的 JSON 数据以提取 BTCUSDT 的价格。
如果请求失败,将捕获异常并返回 None。
"""
url = "https://api.mexc.com/api/v3/ticker/price?symbol=BTCUSDT"
try:
response = requests.get(url)
response.raise_for_status() # 为错误的响应(4xx 或 5xx)引发 HTTPError
data = response.()
return float(data["price"])
except requests.exceptions.RequestException as e:
print(f"获取价格时出错: {e}")
return None
if __name__ == "__main__":
price = get_btc_usdt_price()
if price:
print(f"BTCUSDT 价格: {price}")
else:
print("未能检索到 BTCUSDT 价格。")
代码详解:
-
导入库:
requests
库用于发送 HTTP 请求,response.()
依赖它)。 -
get_btc_usdt_price()
函数: 该函数负责向 MEXC API 发送请求并处理响应。 -
API Endpoint:
https://api.mexc.com/api/v3/ticker/price?symbol=BTCUSDT
是 MEXC 提供的公共 API 端点,用于获取指定交易对的最新价格。symbol=BTCUSDT
指定了要查询的交易对为 BTCUSDT。 -
错误处理:
使用
try...except
块来捕获可能发生的requests.exceptions.RequestException
异常,例如网络连接错误或 HTTP 错误。response.raise_for_status()
会在响应状态码指示错误时 (4xx 或 5xx) 抛出一个 HTTPError 异常,确保程序能够及时发现并处理 API 请求失败的情况。 -
JSON 解析:
response.()
方法将 API 返回的 JSON 格式的响应数据解析为 Python 字典。 -
价格提取:
data["price"]
从解析后的字典中提取 "price" 键对应的值,即 BTCUSDT 的最新价格。float()
函数将价格转换为浮点数类型。 -
主程序:
if __name__ == "__main__":
确保代码只在作为主程序运行时执行。 -
结果输出:
根据
get_btc_usdt_price()
函数的返回值,打印 BTCUSDT 的最新价格或错误消息。
注意事项:
-
确保你的 Python 环境中安装了
requests
库。如果没有安装,可以使用pip install requests
命令进行安装。 - MEXC API 可能会有访问频率限制。如果需要频繁获取数据,请参考 MEXC API 的官方文档,了解相关的频率限制和身份验证方法。
- 此示例代码仅用于演示目的。在实际应用中,建议根据具体需求进行修改和扩展,例如添加更完善的错误处理、数据验证和日志记录等功能。
9. API 文档
为方便开发者接入 MEXC 交易所,我们提供了全面的 API 文档。该文档详细描述了如何通过编程方式与 MEXC 交易平台进行交互,包括获取市场数据、进行交易操作、管理账户信息等。
MEXC API 文档包含了 REST API 和 WebSocket API 两部分。REST API 适用于请求频率较低的场景,例如查询账户余额或下单等。WebSocket API 则适用于需要实时数据更新的场景,例如实时行情订阅或深度数据获取。
您可以在 MEXC 官方网站查阅更详细的 API 文档,其中涵盖了所有可用接口的详细说明、请求参数、响应格式以及示例代码。同时,文档中也包含了API的使用限制、错误代码说明等重要信息,帮助开发者更好地理解和使用 MEXC API。
请访问 MEXC 官方网站获取最新的 API 文档: https://mexc.com/api/document