HTX API 使用指南
HTX (原火币全球站) API 允许开发者以编程方式访问 HTX 交易所,进行交易、获取市场数据和管理账户。 本文将介绍如何使用 HTX API,包括认证、常见接口以及示例代码。
1. API 认证
访问和使用 HTX API 必须进行身份认证,这是确保账户安全和数据完整性的关键步骤。认证过程主要依赖于一对密钥:API 密钥 (API Key) 和私钥 (Secret Key)。
API 密钥 (API Key): 这是一个公开的标识符,用于识别您的 API 请求来源。它类似于您的用户名,方便 HTX 服务器识别您的账户。
私钥 (Secret Key): 这是一个高度机密的密钥,类似于您的密码。它与 API 密钥配对使用,用于对您的 API 请求进行签名,验证请求的真实性和完整性。绝对不要与任何人分享您的私钥。泄露私钥将导致您的账户面临被盗用的风险。
您可以通过登录 HTX 官方网站,进入账户安全设置页面来创建和管理您的 API 密钥。在创建 API 密钥时,您可以设置相应的权限,例如交易权限、提现权限等,以控制 API 密钥的使用范围,从而进一步提高账户安全性。请务必根据您的实际需求设置合理的权限。
在您成功创建 API 密钥后,请务必妥善保管您的 Secret Key。建议将其存储在安全的地方,例如加密的密码管理器或硬件钱包中。不要将其明文存储在代码库或配置文件中,更不要通过电子邮件或即时通讯工具发送给他人。
一旦您的 Secret Key 泄露,请立即撤销当前的 API 密钥,并重新生成新的密钥对,以防止您的账户遭受损失。同时,密切关注您的账户活动,及时发现并处理任何可疑行为。
1.1 获取 API 密钥
- 登录您的 HTX (火币) 账户。
- 导航至账户安全设置。通常,您可以在用户个人资料或账户设置中找到安全相关的选项。
- 找到 "API 管理" 或类似的选项。不同的交易所可能使用略有不同的术语,但目标是找到允许您创建和管理 API 密钥的部分。
- 创建一个新的 API 密钥。 在此过程中,您需要为此密钥指定权限。权限至关重要,请根据您的需求 carefully 选择。常见的权限包括:交易 (允许您进行买卖操作)、读取市场数据 (获取实时价格、交易量等信息)、提现 (允许您从账户中提取资金, 强烈建议除非绝对必要,否则不要启用此权限 )。 您还需要设置 IP 地址限制 (可选,但强烈建议)。 IP 地址限制可以显著提高安全性,通过只允许来自特定 IP 地址的请求来访问您的 API 密钥,从而防止未经授权的访问。请指定您运行交易机器人或应用程序的服务器的 IP 地址。
- 创建成功后,您将获得 API Key (也称为 API 密钥) 和 Secret Key (也称为私钥或密钥)。 务必妥善保管您的 Secret Key,不要与任何人分享,并且不要将其存储在不安全的地方。 API Key 用于标识您的账户,而 Secret Key 用于对请求进行签名,确保请求的真实性和完整性。 如果您的 Secret Key 泄露,您的账户可能会面临风险。
1.2 API 请求签名
HTX API 为了确保请求的安全性与完整性,采用了 HMAC-SHA256 算法对所有 API 请求进行签名验证。签名是验证请求来源,防止篡改的关键机制,客户端必须严格遵循签名流程。
-
构建请求字符串:
请求字符串的构建方式取决于您所调用的具体 API 端点以及所使用的 HTTP 方法 (GET 或 POST)。 构建正确的请求字符串是生成有效签名的前提。
-
GET 请求:
收集所有需要传递给 API 的请求参数,这些参数包括但不限于业务参数、身份验证参数(如
AccessKeyId
)、签名算法参数 (SignatureMethod
)、签名版本参数 (SignatureVersion
) 和时间戳参数 (Timestamp
)。 接着,按照参数名称的字母顺序对这些参数进行排序。 然后,使用&
符号将这些参数按照 "参数名=参数值" 的形式连接起来,形成一个初始的请求字符串。 特别需要注意的是,如果任何参数值中包含特殊字符,例如空格、正斜杠/
、加号+
等,必须使用 URL 编码对这些字符进行转义,以确保请求字符串的格式正确。 URL 编码会将特殊字符转换为百分号 (%) 后跟两位十六进制数的形式,例如空格会被编码为%20
。 -
POST 请求:
对于 Content-Type 为
application/
的 POST 请求,签名的生成将基于整个 JSON 请求体的字符串内容。 换言之,你需要将整个 JSON 字符串视为一个整体,对其进行 HMAC-SHA256 哈希,并进行后续的 URL 编码等步骤。 确保JSON格式的正确性,避免多余的空格或者换行符,否则会影响签名结果。
-
GET 请求:
收集所有需要传递给 API 的请求参数,这些参数包括但不限于业务参数、身份验证参数(如
- 生成字符串签名: 在构建好请求字符串之后,使用您的 Secret Key 作为密钥,对请求字符串进行 HMAC-SHA256 哈希运算。 Secret Key 是您访问 HTX API 的凭证,务必妥善保管,切勿泄露。 HMAC-SHA256 算法会生成一个固定长度的哈希值,该哈希值将作为请求的签名。
- URL 编码签名: 生成的签名通常包含一些特殊字符,为了确保签名能够安全地在 URL 或请求头中传递,需要对签名进行 URL 编码。 同样,URL 编码会将签名中的特殊字符转换为百分号 (%) 后跟两位十六进制数的形式。
-
添加签名到请求:
完成签名生成和 URL 编码后,需要将签名添加到实际的 API 请求中,以便 HTX 服务器能够验证请求的有效性。
-
GET 请求:
将名为
Signature
的参数添加到 URL 的查询字符串中,并将 URL 编码后的签名值作为该参数的值。 例如:https://api.htx.com/v1/endpoint?param1=value1¶m2=value2&Signature=EncodedSignature
。 -
POST 请求:
将
Signature
参数添加到请求头 (HTTP Header) 中。 参数名为Signature
,参数值为 URL 编码后的签名值。 请求头的格式如下:Signature: <签名>
。 注意签名值前没有多余的空格。 例如:Signature: YOUR_URL_ENCODED_SIGNATURE
.
-
GET 请求:
将名为
1.3 时间戳
为确保 API 交互的安全性,所有 API 请求都必须包含
Timestamp
参数。 此参数用于防止恶意攻击者利用重放攻击窃取信息或篡改数据。
Timestamp
代表请求发送时的协调世界时 (UTC) 时间戳,精度务必达到毫秒级别。 这样做是为了更精确地记录请求发生的时间,并增强安全性。
服务器接收到请求后,会立即检查
Timestamp
参数值与服务器当前时间的差值。 如果此时间差超过预先设定的阈值,服务器将认定该请求可能存在重放攻击的风险,并果断拒绝执行。 这种机制能有效防止攻击者截获先前的有效请求,并在之后重复发送,从而保障系统的安全稳定运行。请注意,时间戳的准确性至关重要,客户端和服务端时钟同步是必要条件。
2. 常用 API 接口
HTX (火币全球站) API 提供了广泛且功能强大的接口,开发者可以利用这些接口访问实时和历史市场数据、管理账户信息、执行交易以及监控交易活动。这些 API 接口基于 REST 和 WebSocket 协议,为不同需求的应用提供了灵活性。
2.1 市场数据 API
市场数据 API 允许开发者获取不同交易对的实时和历史价格、交易量、深度信息等。这些数据对于量化交易、市场分析和风险管理至关重要。常用的市场数据 API 包括:
- 获取行情数据 (Market Ticker): 实时获取交易对的最新价格、最高价、最低价、成交量等关键指标。
- 获取市场深度 (Market Depth): 查询指定交易对的买单和卖单挂单信息,提供市场流动性的视图。开发者可以通过此接口构建订单簿,分析市场供需关系。
- 获取历史 K 线数据 (Kline/Candlestick Data): 获取指定时间周期内的历史价格数据,用于技术分析和趋势预测。K线数据包含了开盘价、收盘价、最高价、最低价以及成交量等信息。
2.2 账户信息 API
账户信息 API 允许用户查询其账户余额、交易历史、持仓信息等。这些 API 需要进行身份验证才能访问,确保账户安全。常用的账户信息 API 包括:
- 获取账户余额 (Account Balance): 查询账户中各种币种的可用余额、冻结余额等信息。
- 获取交易历史 (Trade History): 查询账户的交易记录,包括交易时间、交易价格、交易数量等。
- 获取持仓信息 (Position Information): 查询账户当前持有的各种币种的持仓数量、平均持仓成本等信息。
2.3 交易 API
交易 API 允许用户进行下单、撤单、查询订单状态等操作。使用交易 API 需要进行身份验证,并需要谨慎操作,防止误操作造成损失。常用的交易 API 包括:
- 下单 (Place Order): 提交买单或卖单,指定交易对、交易数量、价格等参数。支持市价单、限价单等多种订单类型。
- 撤单 (Cancel Order): 取消尚未成交的订单。
- 查询订单状态 (Order Status): 查询指定订单的当前状态,包括已提交、已成交、已取消等。
2.4 其他 API
除了上述常用的 API 外,HTX 还提供了其他 API,例如提币 API、充币 API 等,方便用户进行资产管理。开发者应仔细阅读 API 文档,了解每个 API 的具体功能和使用方法。
2.1 获取市场行情数据 (
GET /market/tickers
)
获取所有交易对的最新行情数据,包括但不限于交易对的最新成交价、24小时成交量、24小时涨跌幅、最高价、最低价等关键信息。该接口是了解市场整体动态的重要入口。
GET /market/tickers
请求方法:
GET
请求路径:
/market/tickers
请求参数: 无。此接口不需要任何请求参数。
响应示例: (以下为示例,实际数据结构可能包含更多字段)
[
{
"symbol": "BTCUSDT",
"price": "29500.00",
"volume24h": "15000.00",
"change24h": "0.025",
"high24h": "29700.00",
"low24h": "29000.00"
},
{
"symbol": "ETHUSDT",
"price": "1800.00",
"volume24h": "20000.00",
"change24h": "-0.01",
"high24h": "1850.00",
"low24h": "1750.00"
}
]
响应字段说明:
-
symbol
: 交易对名称,例如 "BTCUSDT"。 -
price
: 最新成交价格。 -
volume24h
: 24小时成交量。 -
change24h
: 24小时价格变动百分比,正数为涨,负数为跌。 -
high24h
: 24小时最高价格。 -
low24h
: 24小时最低价格。
注意事项:
- 返回的数据是实时更新的,但由于网络延迟等原因,可能存在一定的滞后。
- 强烈建议缓存此数据,降低接口调用频率。
- 接口返回的数据结构可能会根据实际情况进行调整,请根据实际返回结果进行解析。
示例响应:
该JSON格式的响应包含了加密货币交易对的实时市场数据快照。
status
: 指示API请求的状态,
"ok"
表示成功。
ts
: 时间戳,表示数据生成的时间,以毫秒为单位的 Unix 时间戳,
1678886400000
对应于某个特定日期和时间。
data
: 包含一个数组,数组中每个元素代表一个交易对的数据。
数组中的每个交易对包含以下字段:
-
symbol
: 交易对的标识符,例如"btcusdt"
(比特币/USDT)。 -
open
: 指定时间段(例如,一天)的开盘价,这里是20000.00
USDT。 -
high
: 指定时间段内的最高价,这里是21000.00
USDT。 -
low
: 指定时间段内的最低价,这里是19500.00
USDT。 -
close
: 指定时间段的收盘价,这里是20500.00
USDT。 -
amount
: 成交量,即交易的加密货币数量,例如1000.00
BTC。 -
vol
: 交易额,即以计价货币(例如 USDT)计算的总交易价值,这里是20000000.00
USDT。 -
count
: 交易笔数,即指定时间段内完成的交易总数,这里是1000
笔。 -
bid
: 当前最高买入价,即买家愿意支付的最高价格,这里是20499.00
USDT。 -
bidSize
: 最高买入价的挂单量,即在该价格上的买单数量,这里是10
BTC。 -
ask
: 当前最低卖出价,即卖家愿意接受的最低价格,这里是20501.00
USDT。 -
askSize
: 最低卖出价的挂单量,即在该价格上的卖单数量,这里是10
BTC。
第二个交易对
"ethusdt"
(以太坊/USDT) 也包含类似的信息,反映了以太坊的市场状况,包括开盘价、最高价、最低价、收盘价、成交量、交易额、交易笔数以及买卖盘信息。
这些数据对于分析市场趋势、制定交易策略至关重要。
2.2 获取 K 线数据 (GET /market/history/kline)
获取指定交易对的历史 K 线数据。 K 线图是金融市场中常用的图表,它以图形方式显示特定资产在特定时间段内的价格波动信息,包括开盘价、收盘价、最高价和最低价。通过分析 K 线图,交易者可以识别趋势、预测价格变动,并制定交易策略。
接口地址:
GET /market/history/kline
参数:
-
symbol
(必选): 交易对。例如,btcusdt
表示比特币 (BTC) 兑 USDT 的交易对。交易对由两种资产组成,一种是基础货币,另一种是计价货币。 -
period
(必选): K 线周期。表示每根 K 线所代表的时间跨度。 常见的周期包括:-
1min
: 1 分钟 -
5min
: 5 分钟 -
15min
: 15 分钟 -
30min
: 30 分钟 -
60min
或1hour
: 1 小时 -
1day
: 1 天 -
1week
: 1 周 -
1mon
: 1 月 -
1year
: 1 年
-
-
size
(可选): 返回 K 线数据的数量。 默认值为 150,最大值为 2000。 调整此参数可以控制返回历史数据的长度。
示例:
GET /market/history/kline?symbol=btcusdt&period=1min&size=100
该请求将返回 BTC/USDT 交易对的 1 分钟 K 线数据,数量为 100 根 K 线。
返回值说明:
该接口返回的数据通常包含以下字段:
-
id
: K 线的时间戳 (Unix 时间戳,单位为秒)。 -
open
: 开盘价。 -
close
: 收盘价。 -
low
: 最低价。 -
high
: 最高价。 -
vol
: 成交量 (基础货币单位)。 -
amount
: 成交额 (计价货币单位)。 -
count
: 成交笔数。
正确解析返回的 JSON 数据,可以获得完整的 K 线数据信息。
参数:
-
symbol
: 交易对,指定要查询的加密货币交易对。例如,btcusdt
表示比特币兑泰达币的交易对。务必使用交易所支持的准确交易对符号。不同的交易所可能使用略微不同的符号表示相同的交易对。 -
period
: K 线周期,定义了每根K线代表的时间跨度。常见的周期包括:-
1min
: 1分钟 -
5min
: 5分钟 -
15min
: 15分钟 -
30min
: 30分钟 -
1hour
: 1小时 -
4hour
: 4小时 -
1day
: 1天 -
1mon
: 1个月 -
1week
: 1周 -
1year
: 1年
-
-
size
: 返回的数据条数,限制了API返回的K线数据的最大数量。通常,最大值为2000。较小的size
值可以加快API响应速度,减少数据传输量。如果需要分析较长时间的历史数据,可能需要多次调用API并分页获取数据。请注意,一些交易所可能对size
参数有更严格的限制,或根据API使用级别进行调整。
示例响应:
{ "status": "ok", "ts": 1678886400000, "data": [ { "id": 1678886340, "open": 20490.00, "close": 20500.00, "low": 20480.00, "high": 20510.00, "amount": 10.00, "vol": 205000.00, "count": 10 }, { "id": 1678886400, "open": 20500.00, "close": 20510.00, "low": 20495.00, "high": 20520.00, "amount": 12.00, "vol": 246120.00, "count": 12 } ] }
状态 (status): 指示API请求是否成功。"ok" 值表示成功。
时间戳 (ts): 是一个 Unix 时间戳,以毫秒为单位,表示数据收集或生成的时间。此例中,1678886400000 对应于一个特定的时间点。
数据 (data): 是一个包含价格和交易信息的数组。每个对象代表一个时间段内(例如,一分钟)的聚合数据,通常用于构建K线图。
ID (id): 每个数据点的唯一标识符,通常也表示时间戳,但精度可能更高(例如,秒级别)。
开盘价 (open): 该时间段内的第一笔交易价格。
收盘价 (close): 该时间段内的最后一笔交易价格。
最低价 (low): 该时间段内的最低交易价格。
最高价 (high): 该时间段内的最高交易价格。
交易量 (amount): 该时间段内交易的加密货币数量。
成交额 (vol): 该时间段内的总交易额 (例如,以美元计价)。计算方式为交易量乘以平均交易价格。
交易次数 (count): 该时间段内发生的交易次数。这可以反映市场活跃程度。
此响应结构是一种常见的加密货币交易所API返回格式,用于提供历史价格数据,方便开发者构建交易策略、分析市场趋势和可视化数据。
2.3 获取账户余额 (GET /v1/account/accounts/{account-id}/balance)
获取指定账户的详细余额信息。此接口用于查询特定账户ID的可用余额、冻结余额以及总余额。 为了确保账户安全性,需要进行身份验证,例如通过API密钥或OAuth 2.0 授权。
请求方式:
GET
请求URL:
/v1/account/accounts/{account-id}/balance
URL参数:
-
{account-id}
:必需参数,指定要查询余额的账户ID。 该ID通常是平台分配给用户的唯一账户标识符。
请求头:
-
Authorization
:必需参数,用于身份验证。 具体格式和内容取决于平台采用的身份验证机制。常见的形式包括Bearer {API_KEY}
。
响应示例:
{
"currency": "USDT",
"available": "100.00",
"frozen": "10.00",
"total": "110.00"
}
响应字段说明:
-
currency
:账户余额的币种,例如 "USDT" (Tether)。 -
available
:账户的可用余额,即可以立即使用的资金数量。 -
frozen
:账户的冻结余额,通常由于挂单或其他锁定操作而无法立即使用。 -
total
:账户的总余额,等于可用余额加上冻结余额之和。 (total = available + frozen
)
错误处理:
如果请求失败,API 将返回一个包含错误代码和错误消息的 JSON 对象。 常见的错误包括:
-
400 Bad Request
:请求参数无效,例如account-id
格式错误。 -
401 Unauthorized
:身份验证失败,通常由于Authorization
请求头缺失或无效。 -
404 Not Found
:指定的account-id
不存在。 -
500 Internal Server Error
:服务器内部错误,应联系平台支持人员。
参数:
-
account-id
: 您的账户 ID。 这是您在交易所或平台上唯一标识符,用于关联您的交易活动、资产余额和其他账户相关信息。请务必妥善保管您的账户ID,避免泄露给未经授权的第三方,以防止潜在的安全风险。 通常,可以在您的个人资料设置或账户信息页面找到此ID。
示例响应:
此JSON响应示例展示了一个加密货币交易所账户的快照,提供了账户状态、余额等关键信息。
{
"status": "ok",
表示请求已成功处理,没有出现错误。这是API响应中常见的状态指示符。
"data": {
包含了账户的具体数据。
"account-id": 1234567,
是该账户的唯一标识符,用于在交易所系统中识别该账户。这是一个整型数值。
"type": "spot",
指定账户类型为“现货”账户,意味着用户可以在此账户中进行现货交易,即直接买卖加密货币。其他账户类型可能包括“期货”或“杠杆”账户。
"subtype": "",
表示账户子类型。在此示例中,该字段为空,可能表示没有细分的账户类型。一些交易所可能使用此字段来区分不同类型的现货账户,例如手续费等级不同的账户。
"state": "working",
指示账户状态为“正常”,意味着账户可以正常进行交易和其他操作。其他状态可能包括“冻结”、“禁用”等。
"list": [
包含账户中持有的不同加密货币的余额信息。这是一个数组,每个元素代表一种加密货币。
{
"currency": "usdt",
指定货币类型为USDT(泰达币),一种与美元挂钩的稳定币。
"type": "trade",
表示该余额用于交易。
"balance": "1000.000000000000000000"
表示USDT的余额为1000。余额的精度很高,小数点后有20位,这在加密货币交易中很常见,可以处理极小的交易额。
},
{
"currency": "btc",
指定货币类型为BTC(比特币)。
"type": "trade",
表示该余额用于交易。
"balance": "0.050000000000000000"
表示BTC的余额为0.05。同样,余额的精度也很高。
}
]
},
"ts": 1678886400000
是时间戳,表示该数据生成的时间。时间戳通常以毫秒为单位,是从Unix纪元(1970年1月1日00:00:00 UTC)开始的经过的毫秒数。可以使用在线工具或编程语言将其转换为可读的日期和时间格式。
}
2.4 下单 (POST /v1/order/orders/place)
提交新的交易订单,此操作允许用户在交易平台上创建一个新的交易请求。请注意,此接口需要进行身份验证,确保只有授权用户才能执行下单操作。
POST /v1/order/orders/place
此端点使用 HTTP POST 方法。在请求体中,您需要包含所有必要的订单参数,例如:交易对(例如:BTC/USD)、订单类型(例如:市价单、限价单)、订单方向(买入或卖出)、数量以及价格(如果适用,例如限价单)。请确保提供的参数符合平台的要求,否则可能导致订单创建失败。
成功提交订单后,服务器会返回一个订单确认信息,其中包含订单的ID和其他相关详细信息。如果订单创建失败,服务器将返回相应的错误代码和错误消息,帮助您诊断问题。
请求体 (JSON):
请求体采用JSON格式,用于向交易所提交交易指令。以下是各个字段的详细说明:
{
"account-id": 1234567,
"amount": "0.01",
"price": "20500.00",
"symbol": "btcusdt",
"type": "buy-limit",
"client-order-id": "youruniqueorder_id"
}
字段解释:
-
account-id
: 您的账户ID,用于指定交易执行的账户。此ID通常由交易所分配。 -
amount
: 交易数量,表示您希望购买或出售的数字货币数量。在本例中,交易数量为0.01个BTC。注意,这里的单位是BTC,不是USDT。 -
price
: 交易价格,表示您愿意购买或出售数字货币的价格。对于限价单,只有当市场价格达到或超过此价格时,交易才会执行。在本例中,购买价格为20500.00 USDT。 -
symbol
: 交易对,表示您希望交易的数字货币对。例如,btcusdt
表示比特币(BTC)与泰达币(USDT)的交易对。不同的交易所支持的交易对可能不同。 -
type
: 订单类型,指定交易的类型。常见类型包括:-
buy-limit
: 限价买入订单,以指定价格或更低的价格买入。 -
sell-limit
: 限价卖出订单,以指定价格或更高的价格卖出。 -
buy-market
: 市价买入订单,以当前市场最优价格买入。 -
sell-market
: 市价卖出订单,以当前市场最优价格卖出。 - 其他订单类型(例如:止损限价单,计划委托单等),具体取决于交易所支持。
buy-limit
,表示限价买入。 -
-
client-order-id
: 客户端订单ID,由您的应用程序生成,用于唯一标识该订单。这有助于您跟踪和管理订单。请确保此ID的 唯一性 ,避免重复使用。部分交易所会强制要求此字段,用于防止重放攻击和保证订单幂等性。
重要提示:
- 确保您的账户余额足够支付交易费用和购买金额。
- 仔细检查所有字段的值,确保其准确无误,避免因错误导致交易失败或损失。
- 不同的交易所对JSON字段的要求可能略有不同,请参考交易所的官方API文档。
- 部分交易所的API可能需要进行签名认证,确保交易的安全性。
- 注意交易所对最小交易数量和价格精度的限制。
参数:
-
account-id
: 您的账户 ID,用于指定进行交易的账户。 每个用户可能有多个账户,例如现货账户、合约账户等,此参数确保交易操作在正确的账户下执行。 -
amount
: 交易数量,指定您希望买入或卖出的标的数量。对于现货交易,单位通常是交易对中的基础货币;对于合约交易,则代表合约数量。务必注意平台的最小交易量限制。 -
price
: 交易价格,仅适用于限价单(limit order)。 指您愿意买入或卖出的目标价格。 买入限价单会以指定价格或更低的价格成交;卖出限价单会以指定价格或更高的价格成交。 -
symbol
: 交易对,代表您希望交易的两种资产。 例如,BTC/USDT 表示比特币与 USDT 之间的交易对。不同的交易所支持不同的交易对。 -
type
: 订单类型,定义了订单的执行方式。 常见的订单类型包括:-
buy-limit
: 买入限价单,以指定价格或更低的价格买入。 -
sell-limit
: 卖出限价单,以指定价格或更高的价格卖出。 -
buy-market
: 买入市价单,以当前市场最优价格立即买入。 -
sell-market
: 卖出市价单,以当前市场最优价格立即卖出。 - 其他类型(例如止损限价单、冰山单等),具体取决于交易所的支持。
-
-
client-order-id
: 客户端自定义订单 ID(可选,但强烈建议)。 这是一个由您自己生成的唯一标识符,用于跟踪和管理您的订单。 如果订单在交易所层面出现问题,使用此 ID 可以更容易地进行查询和排查。强烈建议为每个订单生成唯一的client-order-id
,便于追踪订单状态及进行审计。
示例响应:
交易 API 通常返回 JSON 格式的响应,用于指示请求的状态和提供相关数据。以下是一个示例响应,用于说明成功订单创建后可能返回的数据结构:
{
"status": "ok",
"data": "1234567890" // 订单 ID, 这是一个唯一标识符,用于跟踪订单的生命周期。
}
字段说明:
-
status
: 表示请求的处理结果。 "ok" 通常表示请求已成功处理。 其他状态码可能包括 "error"(表示发生错误)或 "pending"(表示请求正在处理中)。 -
data
: 包含与请求相关的具体数据。 在此示例中,它包含 "1234567890",代表订单 ID。 订单 ID 是一个唯一的字符串,用于在系统内部追踪特定订单。
重要提示:
- 实际的响应结构和字段可能因不同的交易所或 API 而异。 请务必参考特定交易所或 API 的官方文档,了解其响应格式和数据定义。
- 订单 ID 的长度和格式也可能有所不同。 它可能包含数字、字母或特殊字符。
- 成功的状态码可能不仅仅是 "ok",例如,一些 API 可能会使用 "success" 或 HTTP 状态码 200 来表示成功。
在实际应用中,开发人员需要解析此 JSON 响应,并根据
status
字段的值来判断请求是否成功。如果
status
为 "ok",则可以使用
data
字段中的订单 ID 来进一步查询订单的状态或执行其他操作。
2.5 查询订单详情 (GET /v1/order/orders/{order-id})
获取指定订单的详细信息。 本接口需要通过身份验证,确保只有授权用户才能访问其订单数据。订单ID是唯一的标识符,用于在系统中精确定位目标订单。
请求方式:
GET
请求URL:
/v1/order/orders/{order-id}
参数说明:
-
order-id
(路径参数): 订单的唯一标识符。 必须替换为实际的订单ID值。
请求头部 (Header):
-
Authorization
: 包含身份验证凭证,通常为JWT (JSON Web Token) 或 API Key。 示例:Bearer
. 如果采用API Key方式,则可能为X-API-Key:
。
响应示例 (成功 200 OK):
{
"order_id": "1234567890",
"user_id": "user123",
"creation_time": "2024-10-27T10:00:00Z",
"status": "已完成",
"total_amount": 1.5,
"currency": "ETH",
"items": [
{
"product_id": "product001",
"quantity": 1,
"price": 0.5,
"product_name": "以太坊"
},
{
"product_id": "product002",
"quantity": 2,
"price": 0.25,
"product_name": "比特币"
}
],
"payment_method": "Metamask",
"transaction_hash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
}
响应示例 (错误 404 Not Found):
{
"error": "订单未找到",
"code": 404,
"message": "指定的订单ID不存在。"
}
响应示例 (错误 401 Unauthorized):
{
"error": "未授权",
"code": 401,
"message": "无效的身份验证凭证。"
}
错误码说明:
-
400 Bad Request
: 请求格式错误或参数无效。 -
401 Unauthorized
: 身份验证失败。 检查Authorization
头部是否正确设置。 -
404 Not Found
: 找不到指定的订单。 确保提供的order-id
正确。 -
500 Internal Server Error
: 服务器内部错误。 如果发生这种情况,请稍后重试。
参数:
-
order-id
: 订单 ID。这是一个用于唯一标识特定订单的字符串。在加密货币交易所或交易平台中,每个提交的订单都会被分配一个唯一的 ID,以便于跟踪订单状态、历史记录和执行情况。通过提供order-id
,您可以精确地查询或操作指定的订单,例如取消订单或查询订单详情。确保提供的order-id
与您要操作的订单完全匹配。不同交易所或平台对order-id
的格式可能有所不同,例如,它可能是一个数字、一个字母数字混合的字符串,或一个 UUID。请参考特定交易所或平台的 API 文档以获取正确的order-id
格式。
示例响应:
{
"status": "ok",
"data": {
"id": 1234567890,
"symbol": "btcusdt",
"account-id": 1234567,
"amount": "0.010000000000000000",
"price": "20500.000000000000000000",
"created-at": 1678886400000,
"type": "buy-limit",
"field-amount": "0.010000000000000000",
"field-cash-amount": "205.000000000000000000",
"field-fees": "0.000200000000000000",
"finished-at": 1678886460000,
"source": "api",
"state": "filled",
"client-order-id": "your
unique
order_id"
}
}
字段说明:
status
: 交易接口响应状态,"ok" 表示成功。
data
: 包含订单详情的对象。
id
: 订单的唯一标识符,通常是一个长整型数字。
symbol
: 交易对,表示交易的两种资产,例如 "btcusdt" 表示比特币 (BTC) 与 USDT 的交易对。
account-id
: 用户账户的唯一标识符,用于区分不同用户的订单。
amount
: 订单数量,表示购买或出售的资产数量,精确到小数点后 16 位。
price
: 订单价格,表示交易的单价,精确到小数点后 20 位。
created-at
: 订单创建时间,Unix 时间戳格式,单位为毫秒。
type
: 订单类型,例如 "buy-limit" 表示限价买入订单。
field-amount
: 已成交数量,表示已成功交易的资产数量。
field-cash-amount
: 已花费金额,表示已成功交易的法币金额。
field-fees
: 交易手续费,表示交易过程中产生的费用。
finished-at
: 订单完成时间,Unix 时间戳格式,单位为毫秒。
source
: 订单来源,例如 "api" 表示通过 API 接口创建的订单。
state
: 订单状态,例如 "filled" 表示订单已完全成交。
client-order-id
: 客户端自定义订单 ID,方便用户跟踪订单,务必保证唯一性。
3. 错误处理
HTX API 利用标准的 HTTP 状态码和结构化的 JSON 响应体来传达错误信息,以便开发者能够准确诊断和解决问题。成功的 API 调用通常返回
200 OK
状态码,而错误则通过其他状态码和详细的 JSON 响应来指示。以下是一些常见的 HTTP 状态码及其含义:
-
200 OK
: 请求已成功处理并返回预期结果。这是正常操作的标志。 -
400 Bad Request
: 请求格式不正确,通常是由于缺少必需参数、参数值无效或请求结构错误导致的。仔细检查请求体和查询参数。 -
401 Unauthorized
: 身份验证失败。通常是因为 API 密钥无效、过期或没有访问请求资源的权限。请确保 API 密钥正确配置,并已启用必要的权限。 -
429 Too Many Requests
: 客户端在短时间内发送了过多的请求,超过了 API 的速率限制。请实施速率限制重试机制,以避免触发此错误。HTX API 文档通常会详细说明速率限制策略。 -
500 Internal Server Error
: 服务器遇到未知错误,无法完成请求。这通常是 HTX 服务器端的问题,您可以稍后重试该请求。如果问题持续存在,请联系 HTX 的技术支持团队。
除了 HTTP 状态码,HTX API 还使用 JSON 响应体中的
status
字段来表明请求的结果。当
status
字段的值为
"error"
时,表示发生了错误。更详细的错误信息通过
err-code
和
err-msg
字段提供。
err-code
是一个标准化的错误代码,方便程序进行自动化处理,而
err-msg
则提供了人类可读的错误描述,帮助开发者理解问题的具体原因。例如:
{
"status": "error",
"err-code": "invalid-parameter",
"err-msg": "Invalid parameter: symbol. Please ensure the symbol is valid and properly formatted."
}
在这个例子中,
err-code
"invalid-parameter" 表明请求中包含无效的参数,而
err-msg
"Invalid parameter: symbol. Please ensure the symbol is valid and properly formatted." 进一步解释说
symbol
参数存在问题,建议检查
symbol
是否有效且格式正确。 在开发过程中,务必根据
err-code
和
err-msg
信息,进行相应的错误处理,以提高应用程序的健壮性。
4. 代码示例 (Python)
以下是一个使用 Python 演示如何获取市场行情数据,包括交易对的最新价格、成交量等信息的示例代码。此示例针对火币交易所API,展示了如何构造请求、进行身份验证以及解析返回的数据。
在使用此代码之前,请确保您已安装必要的Python库,例如
requests
用于发送HTTP请求,
hmac
和
hashlib
用于签名,以及
urllib.parse
用于处理URL编码。
import hashlib
import hmac
import urllib.parse
import time
import requests
import
import base64
API_KEY = "YOUR_API_KEY" # 替换为您的API Key
SECRET_KEY = "YOUR_SECRET_KEY" # 替换为您的Secret Key
BASE_URL = "https://api.huobi.pro" # 或者 api.htx.com,根据您的需求选择
def generate_signature(method, endpoint, params=None):
"""
生成API请求的数字签名。
Args:
method (str): HTTP请求方法,例如 "GET" 或 "POST"。
endpoint (str): API端点,例如 "/market/tickers"。
params (dict, optional): 请求参数字典。默认为 None。
Returns:
str: 数字签名字符串。
"""
timestamp = str(int(time.time() * 1000)) # 获取当前时间戳,精确到毫秒
params = params or {}
params["AccessKeyId"] = API_KEY # 您的API Key
params["SignatureMethod"] = "HmacSHA256" # 签名方法,固定为 HmacSHA256
params["SignatureVersion"] = "2" # 签名版本,固定为 2
params["Timestamp"] = timestamp # 时间戳
sorted_params = sorted(params.items()) # 对参数进行排序
query_string = urllib.parse.urlencode(sorted_params) # 将排序后的参数编码为URL查询字符串
payload = f"{method}\napi.huobi.pro\n{endpoint}\n{query_string}" # 构造签名所需的payload,务必注意换行符
signature = hmac.new(
SECRET_KEY.encode("utf-8"), # 使用您的 Secret Key
payload.encode("utf-8"),
hashlib.sha256
).digest()
signature = urllib.parse.quote(base64.b64encode(signature).decode("utf-8")) # 对签名进行Base64编码和URL编码
return signature
def get_market_tickers():
"""
获取市场行情数据。
Returns:
dict: 包含市场行情数据的字典。
"""
endpoint = "/market/tickers" # API端点
method = "GET" # HTTP请求方法
params = {} # 请求参数
signature = generate_signature(method, endpoint, params) # 生成签名
url = f"{BASE_URL}{endpoint}?{urllib.parse.urlencode(params)}&Signature={signature}" # 构造完整的URL
try:
response = requests.get(url) # 发送GET请求
response.raise_for_status() # Raise HTTPError for bad responses (4xx or 5xx)
return response.() # 将返回的JSON数据解析为字典
except requests.exceptions.RequestException as e:
print(f"请求出错: {e}")
return None
if __name__ == "__main__":
market_tickers = get_market_tickers() # 获取市场行情数据
if market_tickers:
print(.dumps(market_tickers, indent=2)) # 打印格式化的JSON数据
else:
print("获取市场行情数据失败")
代码说明:
-
API 密钥和密钥:
将
YOUR_API_KEY
和YOUR_SECRET_KEY
替换为您在交易所获得的实际密钥。请务必安全地存储您的密钥,避免泄露。 -
签名生成:
generate_signature
函数根据交易所的要求生成数字签名,用于验证您的身份。签名过程包括构造payload、使用您的密钥进行哈希运算、Base64编码和URL编码。 -
请求构建:
get_market_tickers
函数构建完整的API请求URL,包括API端点、请求参数和签名。 - 错误处理: 代码包含基本的错误处理,以捕获HTTP请求错误。
-
数据解析:
从API返回的数据是JSON格式,使用
response.()
方法将其解析为Python字典。
注意事项:
- API 限制: 请注意交易所的API使用限制,例如请求频率限制。超过限制可能会导致您的API密钥被暂停使用。
- 安全: 务必妥善保管您的API密钥,不要在公共场合或代码库中泄露。
- 数据格式: 交易所的API返回的数据格式可能会发生变化,请根据交易所的API文档进行调整。
- 错误处理: 在实际应用中,应添加更完善的错误处理机制,例如重试机制和日志记录。
注意:
-
请务必将代码示例中的
YOUR_API_KEY
和YOUR_SECRET_KEY
替换为从交易所获得的、与你的账户关联的实际API密钥和Secret Key。API密钥用于身份验证,Secret Key用于签名请求,保护您的账户安全,请妥善保管,切勿泄露给他人。 -
在构造HTTP请求的payload(有效负载)时,请确认并将域名设置为与您所使用的API端点相匹配。如果使用的是火币全球站的API,则域名应为
api.huobi.pro
;如果使用的是HTX(原火币)的API,则域名应为api.htx.com
。错误的域名将导致请求无法正确路由,从而导致API调用失败。请根据您的实际API使用情况进行调整。 -
请确认您的Python环境中已安装
requests
库。该库是Python中用于发起HTTP请求的事实标准库。如果没有安装,可以使用Python的包管理器pip进行安装。在命令行或终端中运行pip install requests
即可完成安装。requests
库提供了便捷的API,用于发送GET、POST等各种HTTP请求,并处理服务器返回的响应数据。
5. 安全注意事项
- 保护您的 API 密钥: 您的 Secret Key 相当于银行密码,一旦泄露,可能导致资产损失。务必将其视为最高机密,切勿以任何方式(例如电子邮件、聊天消息、公开代码库)与任何人分享,包括交易所官方人员。即使是交易所工作人员也绝不会主动索要您的Secret Key。
- 使用 IP 地址限制: 为了进一步提高安全性,强烈建议限制 API 密钥的访问权限。通过设置 IP 地址白名单,只允许来自特定 IP 地址的请求访问您的 API 密钥。这样,即使您的 API 密钥泄露,未经授权的 IP 地址也无法利用它进行交易或访问您的账户信息。 请注意,如果使用动态IP,则每次IP地址变更都需要更新白名单设置。
- 定期轮换 API 密钥: 定期更换 API 密钥是一种主动防御策略,能够有效降低密钥泄露带来的风险。 建议您根据自身安全需求,设定一个合理的轮换周期(例如每月或每季度)并严格执行。 轮换密钥后,请确保及时更新所有使用该密钥的应用程序和脚本。
- 监控 API 使用情况: 密切关注您的 API 使用情况,例如交易量、请求频率、账户余额等,是及时发现异常活动的关键。设置警报机制,一旦检测到异常交易模式、超出预期的请求数量或其他可疑行为,立即发出通知。及时响应这些警报可以帮助您快速采取行动,防止潜在损失。许多交易所也提供API使用量的监控界面,可以定期查看。
- 使用 HTTPS: 始终通过 HTTPS(Hypertext Transfer Protocol Secure)协议连接到 HTX API,确保数据在传输过程中经过加密,防止被中间人窃听或篡改。 所有合规的API调用都应该强制使用HTTPS。 不要使用HTTP,这会暴露您的数据。 验证您正在使用的客户端或库是否默认使用 HTTPS 连接。