HTX API掘金:交易接口全攻略,玩转数字货币!

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 密钥

  1. 登录您的 HTX (火币) 账户。
  2. 导航至账户安全设置。通常,您可以在用户个人资料或账户设置中找到安全相关的选项。
  3. 找到 "API 管理" 或类似的选项。不同的交易所可能使用略有不同的术语,但目标是找到允许您创建和管理 API 密钥的部分。
  4. 创建一个新的 API 密钥。 在此过程中,您需要为此密钥指定权限。权限至关重要,请根据您的需求 carefully 选择。常见的权限包括:交易 (允许您进行买卖操作)、读取市场数据 (获取实时价格、交易量等信息)、提现 (允许您从账户中提取资金, 强烈建议除非绝对必要,否则不要启用此权限 )。 您还需要设置 IP 地址限制 (可选,但强烈建议)。 IP 地址限制可以显著提高安全性,通过只允许来自特定 IP 地址的请求来访问您的 API 密钥,从而防止未经授权的访问。请指定您运行交易机器人或应用程序的服务器的 IP 地址。
  5. 创建成功后,您将获得 API Key (也称为 API 密钥) 和 Secret Key (也称为私钥或密钥)。 务必妥善保管您的 Secret Key,不要与任何人分享,并且不要将其存储在不安全的地方。 API Key 用于标识您的账户,而 Secret Key 用于对请求进行签名,确保请求的真实性和完整性。 如果您的 Secret Key 泄露,您的账户可能会面临风险。

1.2 API 请求签名

HTX API 为了确保请求的安全性与完整性,采用了 HMAC-SHA256 算法对所有 API 请求进行签名验证。签名是验证请求来源,防止篡改的关键机制,客户端必须严格遵循签名流程。

  1. 构建请求字符串: 请求字符串的构建方式取决于您所调用的具体 API 端点以及所使用的 HTTP 方法 (GET 或 POST)。 构建正确的请求字符串是生成有效签名的前提。
    • GET 请求: 收集所有需要传递给 API 的请求参数,这些参数包括但不限于业务参数、身份验证参数(如 AccessKeyId )、签名算法参数 ( SignatureMethod )、签名版本参数 ( SignatureVersion ) 和时间戳参数 ( Timestamp )。 接着,按照参数名称的字母顺序对这些参数进行排序。 然后,使用 & 符号将这些参数按照 "参数名=参数值" 的形式连接起来,形成一个初始的请求字符串。 特别需要注意的是,如果任何参数值中包含特殊字符,例如空格、正斜杠 / 、加号 + 等,必须使用 URL 编码对这些字符进行转义,以确保请求字符串的格式正确。 URL 编码会将特殊字符转换为百分号 (%) 后跟两位十六进制数的形式,例如空格会被编码为 %20
    • POST 请求: 对于 Content-Type 为 application/ 的 POST 请求,签名的生成将基于整个 JSON 请求体的字符串内容。 换言之,你需要将整个 JSON 字符串视为一个整体,对其进行 HMAC-SHA256 哈希,并进行后续的 URL 编码等步骤。 确保JSON格式的正确性,避免多余的空格或者换行符,否则会影响签名结果。
  2. 生成字符串签名: 在构建好请求字符串之后,使用您的 Secret Key 作为密钥,对请求字符串进行 HMAC-SHA256 哈希运算。 Secret Key 是您访问 HTX API 的凭证,务必妥善保管,切勿泄露。 HMAC-SHA256 算法会生成一个固定长度的哈希值,该哈希值将作为请求的签名。
  3. URL 编码签名: 生成的签名通常包含一些特殊字符,为了确保签名能够安全地在 URL 或请求头中传递,需要对签名进行 URL 编码。 同样,URL 编码会将签名中的特殊字符转换为百分号 (%) 后跟两位十六进制数的形式。
  4. 添加签名到请求: 完成签名生成和 URL 编码后,需要将签名添加到实际的 API 请求中,以便 HTX 服务器能够验证请求的有效性。
    • GET 请求: 将名为 Signature 的参数添加到 URL 的查询字符串中,并将 URL 编码后的签名值作为该参数的值。 例如: https://api.htx.com/v1/endpoint?param1=value1&param2=value2&Signature=EncodedSignature
    • POST 请求: Signature 参数添加到请求头 (HTTP Header) 中。 参数名为 Signature ,参数值为 URL 编码后的签名值。 请求头的格式如下: Signature: <签名> 。 注意签名值前没有多余的空格。 例如: Signature: YOUR_URL_ENCODED_SIGNATURE .

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年
    选择合适的周期取决于交易策略和时间框架。例如,日内交易者可能更关注1分钟或5分钟的K线,而长期投资者可能更关注日线、周线或月线。确保交易所支持所选的K线周期。
  • 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 连接。

内容版权声明:除非注明,否则皆为本站原创文章。

出处:https://www.add666.com/news/530458.html