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

如何在浏览器中用JavaScript调用KuCoin API发送POST请求解决签名错误

问题原因&修复方案

你的代码存在3个核心错误导致签名验证失败:

  • 错误1:POST请求的URL拼接错误,你把请求方法、请求体内容都错误拼接在了请求URL尾部,实际POST请求的URL应为https://cors-anywhere.herokuapp.com/https://api.kucoin.com/api/v1/orders
  • 错误2:没有正确传递POST请求体,$.ajax的POST请求需要把请求参数放在data字段,同时指定contentType: 'application/json',你当前发的POST请求体为空,服务端计算签名时用的是空请求体,和你签名时用的带参数的字符串不一致,自然校验失败
  • 错误3:手动拼接JSON字符串容易出现格式、顺序错误,建议先将请求参数对象转成JSON字符串后,再统一用于签名拼接和请求体传递,保证两边字符串完全一致

修正后POST请求代码

// REST (Order Limit BUY)
// 先定义请求参数对象,保证签名和请求体用的是完全一致的内容
var orderParams = {
    "clientOid": "ADAUSDT",
    "side": "buy",
    "symbol": "ADA-USDT",
    "price": "0.001",
    "size": "50000"
};
// 统一转成JSON字符串,避免手动写的格式错误
var orderParamsStr = JSON.stringify(orderParams);
var now = Date.now().toString();
// 签名拼接规则沿用原有逻辑,这里用统一生成的JSON字符串
var hey = now + 'POST' + endPointOrder + orderParamsStr;

/* 签名计算逻辑和之前保持一致 */
var signature = CryptoJS.HmacSHA256(hey, api_secret);
signatureInBase64 = CryptoJS.enc.Base64.stringify(signature);

var passphrase = CryptoJS.HmacSHA256(api_passphrase, api_secret);
passphraseInBase64 = CryptoJS.enc.Base64.stringify(passphrase);

var headers = {
    "KC-API-SIGN": signatureInBase64,
    "KC-API-TIMESTAMP": now,
    "KC-API-KEY": api_key,
    "KC-API-PASSPHRASE": passphraseInBase64,
    "KC-API-KEY-VERSION": "2"
}

// 正确的URL,不要额外拼接方法和请求体
var url = burl + endPointOrder;
$.ajax({
    headers: headers,
    type: "POST",
    url: url,
    // 传递请求体,指定正确的内容类型
    data: orderParamsStr,
    contentType: 'application/json',
    dataType: "json",
    success: function (data) {
        console.log(data);
    },
    error: function(err) {
        console.log(err.responseJSON);
    }
});

注意:如果后续出现时间戳相关报错,可以调整timestamp的取值,KuCoin允许timestamp和服务器时间差在3秒以内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:00