You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS调用KuCoin API出现Invalid KC-API-SIGN错误,如何解决?

KuCoin API Node.js 查询未成交订单签名错误(400005)排查

你的代码出现Invalid KC-API-SIGN错误,主要是以下几个问题导致的:

  • 请求方法不匹配:签名计算时用的是"GET",但实际请求用了post方法。KuCoin查询订单列表的接口是GET请求,POST是用于创建订单的,签名里的请求方法和实际请求方法不一致,直接导致签名验证失败。
  • 多余的请求体:GET请求不需要body参数,你传入了空字符串"",这可能干扰服务器的签名验证逻辑。
  • (可选)未指定订单状态:默认调用/api/v1/orders会返回所有状态的订单,要查询未成交订单,需要在路径后加?status=active参数。

修正后的代码

import { KEY, PASSWORD, SECRET } from "./secrets.js";
import CryptoJS from "crypto-js";

const baseUrl = 'https://api.kucoin.com';
// 添加查询参数指定获取未成交订单
const endPointOrders = '/api/v1/orders?status=active';

const signatureInBase64 = (path, now) => {
  // 把timestamp转成字符串,避免数字拼接的潜在格式问题
  const msg = now.toString() + "GET" + path;
  const signature = CryptoJS.HmacSHA256(msg, SECRET);
  return CryptoJS.enc.Base64.stringify(signature);
}

const passphraseInBase64 = () => {
  const passphrase = CryptoJS.HmacSHA256(PASSWORD, SECRET);
  return CryptoJS.enc.Base64.stringify(passphrase);
}

const openOrders = async() => {
  const path = endPointOrders;
  const now = Date.now();
  const headers = {
    "KC-API-SIGN": signatureInBase64(path, now),
    "KC-API-TIMESTAMP": now.toString(), // 转为字符串,避免数字传递的格式问题
    "KC-API-KEY": KEY,
    "KC-API-PASSPHRASE": passphraseInBase64(),
    "KC-API-KEY-VERSION": "2",
    "Content-Type": "application/json"
  }
  const url = baseUrl + path;

  const response = await fetch(url, {
    method: 'get', // 改为GET请求
    headers: headers
  });
  const data = await response.json();

  console.log(data);
}

export { openOrders };

关键修正说明

  1. 对齐签名与请求方法:签名里用GET,实际请求也必须用GET,这是签名验证通过的核心前提。
  2. 移除GET请求的body参数:符合HTTP规范,避免服务器解析异常。
  3. 统一timestamp格式:将Date.now()的结果转为字符串后再参与签名和请求头,避免部分环境下数字类型的精度或格式问题。

内容的提问来源于stack exchange,提问作者Mirror318

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:46:34