Crypto.com 旧版 V1 API 完整开发指南:从入门到实战

·

本文通过大量真实代码与实战示例,帮助开发者快速接入 Crypto.com 旧版 V1 REST 及 WebSocket 接口,高效获取行情、管理订单、监控系统状态。无论用 Python、Node.js、Java 还是 C#,都能找到可直接落地的代码模板。

目录

  1. 快速上手
  2. 基础配置与鉴权
  3. REST 接口详解
    3.1 行情接口(Market API)
    3.2 用户接口(User API)
  4. WebSocket 实时流
  5. 多语言代码示例
    5.1 Python 一体化封装
    5.2 Node.js 鉴权调用
    5.3 Java WebSocket 连接
    5.4 C# 完整调用链
  6. 常见错误与 FAQ
  7. 延伸阅读与下一步

1. 快速上手

要在 10 分钟 内拿到第一个行情快照,只需三步:

  1. 访问 https://api.crypto.com/v1/symbols(无需鉴权)拉取所有交易对。
  2. 通过 GET /v1/ticker?symbol=btcusdt 获取 BTC/USDT 最新成交价。
  3. 上述数据皆为 JSON 格式,可直接入库或前端渲染。

👉 立即查阅官方示例 → 用浏览器即可体验零环境接入


2. 基础配置与鉴权

环境接入地址连接说明
REST 根路径https://api.crypto.com必须 HTTPS
WebSocketwss://ws.crypto.com/kline-api/ws可选压缩

2.1 生成 API Key

进入【用户中心 → API 管理】,记住 只出现一次 的两串密钥:

2.2 请求签名流程(固定套路)

  1. 升序排序请求参数(不含 sign)
  2. name 与 value 直接拼接:param1value1param2value2...
  3. 末尾追加 secret_key 后做 SHA-256
  4. 结果放入 sign 字段

Python 逻辑示例:

sorted_params = sorted(params.items())
text = ''.join(f'{k}{v}' for k, v in sorted_params) + SECRET
sign = hashlib.sha256(text.encode()).hexdigest()

3. REST 接口详解

3.1 行情接口(Market API)

功能路径核心参数
全部交易对GET /v1/symbols
24h 汇总GET /v1/ticker可选 symbol
深度档GET /v1/depth必填 symboltype=`step0step1step2`
K 线GET /v1/klines必填 symbol + period 见下表

周期对照:1/5/15/30/60/1440/10080/43200 (分钟) ⟺ 1min … 1 month

3.1.1 深度合并示例(step0 高精度)

{
  "tick": {
    "asks": [[9745, 0.57], [9748, 0.25]],
    "bids": [[9744, 102.45], [9654, 1.83]]
  }
}

👉 实时深度与 WebSocket 零延迟差 → 查看源码解析


3.2 用户接口(User API)

所有 下单/查单/撤单 均采用 POST 提交,除业务参数外 必须携带

3.2.1 统一返回格式

{
  "code": 0,      // 0 成功 其他看 msg
  "msg": "suc",
  "data": { ... }
}

3.2.2 高频操作回顾

业务路径关键入参
查余额/v1/accountapi_key/time/sign
下单/v1/ordersymbol/side/price/volume/type
撤单/v1/orders/cancelorder_id/symbol
批量撤单/v1/cancelAllOrderssymbol(上限 2000 条)

3.2.3 代码片段(Python)

def create_order(sym, side, price, qty):
    params = {
        'symbol': sym,
        'side': side.upper(),       # BUY / SELL
        'type': 1,                  # 限价 1 市价 2
        'price': price,
        'volume': qty,
        'api_key': API_KEY,
        'time': int(time.time()*1000),
    }
    params['sign'] = gen_sign(params)
    r = requests.post(API_URL + '/v1/order', data=params)
    return r.json()

4. WebSocket 实时流

只读行情 + 推送深度 + 逐笔成交,延时可压到 10 ms 以内。

4.1 频道速查

需求频道模式
全部行情快照reviewreq
逐笔成交market_${symbol}_trade_tickersub
深度档market_${symbol}_depth_step[0-2]sub
K 线(历史 + 订阅)market_${symbol}_kline_1minreq/sub

4.2 Node.js 订阅示范

const ws = new WebSocket('wss://ws.crypto.com/kline-api/ws');
ws.on('open', () => {
  ws.send(JSON.stringify({
    event: 'sub',
    params: { channel: 'market_btcusdt_trade_ticker' }
  }));
});
ws.on('message', data => {
  const msg = JSON.parse(data);
  if (msg.tick) console.log('成交价格:', msg.tick.close);
});

5. 多语言代码示例

5.1 Python 一体化封装

可直接 pip install 使用的简易封装,覆盖 行情 + 账户 + 下单撤单

class CryptoV1Client:
    def __init__(self, api_key, api_secret):
        self.key = api_key
        self.sec = api_secret
        self.url = 'https://api.crypto.com/v1'

    def _sign(self, params):
        text = ''.join(f'{k}{v}' for k, v in sorted(params.items())) + self.sec
        return hashlib.sha256(text.encode()).hexdigest()

    def balance(self):
        params = {'api_key': self.key, 'time': int(time.time()*1000)}
        params['sign'] = self._sign(params)
        return requests.post(f'{self.url}/account', data=params).json()

5.2 Node.js 鉴权调用

npm i axios crypto-js 即可:

const axios = require('axios');
const CryptoJS = require('crypto-js');

function signedRequest(path, params = {}) {
  params.api_key = API_KEY;
  params.time = Date.now();
  const sorted = Object.keys(params).sort()
      .map(k => `${k}${params[k]}`).join('') + SECRET;
  params.sign = CryptoJS.SHA256(sorted).toString();
  return axios.post(API_URL + path, new URLSearchParams(params));
}

5.3 Java WebSocket 连接

上文已提供 TLS 信任全部证书、解压 gzip 的完整代码,可直接嵌入到 Android 或 Spring Boot 项目。

5.4 C# 完整调用链

示例仓库给出从查看深度 → 创建订单 → 撤单闭环,且所有辅助函数 GetTimestampGetSign 均已写好,复制即跑。


6. 常见错误与 FAQ

Q1 签名校验老是 401?
A:99% 是参数未按字母升序拼装或把空值参数也拼进了字符串。用调试输出打印最终拼接串逐一字符对比即可定位。

Q2 429 Too Many Requests 怎么解?
A:行情接口限 100 req/s;用户接口细粒度见上文表。做 指数回退 (exponential backoff):第一次等待 1s,再遭两次加倍。

Q3 WebSocket 总是断?
A:网络层丢包时,前端需 setInterval 心跳;服务端若 30s 无 ping 会自动踢人。心跳消息为 "ping" → 收到 "pong" 即说明连接正常。

Q4 Market API 和 WebSocket 数据差异?
A:纯属网络延迟。大行情建议 放弃轮询 REST、全程使用 WebSocket,可把 EMA 计算误差压到个位数。

Q5 币种精度用 JavaScript 计算失真?
A:BTC/USDT 精度 8 位以内用 Number 不会有问题;再高精建议 BigIntdecimal.js

Q6 撤单偶尔报 500?
A:撮合高峰期超过 2000 笔挂单一起撤可能导致行锁超时。分批每 500 条重试即可。


7. 延伸阅读与下一步