本文通过大量真实代码与实战示例,帮助开发者快速接入 Crypto.com 旧版 V1 REST 及 WebSocket 接口,高效获取行情、管理订单、监控系统状态。无论用 Python、Node.js、Java 还是 C#,都能找到可直接落地的代码模板。
目录
- 快速上手
- 基础配置与鉴权
- REST 接口详解
3.1 行情接口(Market API)
3.2 用户接口(User API) - WebSocket 实时流
- 多语言代码示例
5.1 Python 一体化封装
5.2 Node.js 鉴权调用
5.3 Java WebSocket 连接
5.4 C# 完整调用链 - 常见错误与 FAQ
- 延伸阅读与下一步
1. 快速上手
要在 10 分钟 内拿到第一个行情快照,只需三步:
- 访问
https://api.crypto.com/v1/symbols(无需鉴权)拉取所有交易对。 - 通过
GET /v1/ticker?symbol=btcusdt获取 BTC/USDT 最新成交价。 - 上述数据皆为 JSON 格式,可直接入库或前端渲染。
2. 基础配置与鉴权
| 环境 | 接入地址 | 连接说明 |
|---|---|---|
| REST 根路径 | https://api.crypto.com | 必须 HTTPS |
| WebSocket | wss://ws.crypto.com/kline-api/ws | 可选压缩 |
2.1 生成 API Key
进入【用户中心 → API 管理】,记住 只出现一次 的两串密钥:
api_key:公钥(请求参数直接携带)secret_key:私钥(仅用于签名,永远不出现在网络包)
2.2 请求签名流程(固定套路)
- 升序排序请求参数(不含 sign)
- name 与 value 直接拼接:
param1value1param2value2... - 末尾追加
secret_key后做 SHA-256 - 结果放入
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 | 必填 symbol、type=`step0 | step1 | step2` |
| 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 提交,除业务参数外 必须携带:
api_keytime(毫秒时间戳)sign(上节算出)
3.2.1 统一返回格式
{
"code": 0, // 0 成功 其他看 msg
"msg": "suc",
"data": { ... }
}3.2.2 高频操作回顾
| 业务 | 路径 | 关键入参 |
|---|---|---|
| 查余额 | /v1/account | api_key/time/sign |
| 下单 | /v1/order | symbol/side/price/volume/type |
| 撤单 | /v1/orders/cancel | order_id/symbol |
| 批量撤单 | /v1/cancelAllOrders | symbol(上限 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 频道速查
| 需求 | 频道 | 模式 |
|---|---|---|
| 全部行情快照 | review | req |
| 逐笔成交 | market_${symbol}_trade_ticker | sub |
| 深度档 | market_${symbol}_depth_step[0-2] | sub |
| K 线(历史 + 订阅) | market_${symbol}_kline_1min … | req/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# 完整调用链
示例仓库给出从查看深度 → 创建订单 → 撤单闭环,且所有辅助函数 GetTimestamp、GetSign 均已写好,复制即跑。
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不会有问题;再高精建议BigInt或decimal.js。Q6 撤单偶尔报 500?
A:撮合高峰期超过 2000 笔挂单一起撤可能导致行锁超时。分批每 500 条重试即可。
7. 延伸阅读与下一步
- 若需要 期权、期货市场 或 现代 V2 API,可升级到官方新文档,但接口范式一致,学习成本几乎为 0。
- 想把量化策略一键托管到云上?阅读👉 无服务器部署最佳实践,3 分钟将脚本做成高可用服务。