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

Kucoin API C#签名验证失败问题求助

排查KuCoin API签名验证失败的问题

我帮你分析下签名失败的原因——你的代码逻辑和KuCoin官方要求的签名规则不匹配,主要有几个核心问题需要修正:

1. 待签名字符串的构造完全错误

KuCoin要求的待签名字符串必须严格遵循以下格式:

timestamp + HTTP_METHOD + requestPath + queryStringOrRequestBody

拆解每个部分的要求:

  • timestamp:毫秒级UTC时间戳(也就是你用的nonce,必须和请求头里的KC-API-TIMESTAMP完全一致)
  • HTTP_METHOD:大写的请求方法,比如GET、POST
  • requestPath:完整的API路径,比如/api/v1/user/info(要包含版本号,和实际请求的路径完全匹配)
  • queryStringOrRequestBody:GET请求填URL查询参数(比如?symbol=BTC-USDT),POST请求填格式化后的请求体JSON字符串(不能有多余空格或换行)

你的代码里构造的"/user/info/"+input+"/"完全不符合这个规则,这是导致签名验证失败的首要原因。

2. 签名结果的编码方式不对

KuCoin要求把HMAC-SHA256加密后的字节数组转换成Base64编码字符串,但你的代码是转成了十六进制小写字符串(BitConverter.ToString(hashValue).Replace("-", "").ToLower()),这是第二个核心错误。

修复后的示例代码

假设你要调用GET /api/v1/user/info这个接口,修复后的C#代码应该是这样的:

// 生成毫秒级UTC时间戳,必须和请求头KC-API-TIMESTAMP的值完全一致
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string method = "GET";
// 注意路径要和KuCoin API的实际路径一致,包含版本号
string requestPath = "/api/v1/user/info";
// GET请求无参数时填空字符串,有参数则拼接成?key1=value1&key2=value2的格式
string queryOrBody = "";

// 构造正确的待签名字符串
string stringToSign = timestamp + method + requestPath + queryOrBody;

byte[] secretKeyBytes = Encoding.UTF8.GetBytes(SecretKey);
byte[] inputBytes = Encoding.UTF8.GetBytes(stringToSign);

using (var hmac = new HMACSHA256(secretKeyBytes))
{
    byte[] hashValue = hmac.ComputeHash(inputBytes);
    // 转换为Base64编码,这才是KuCoin接受的签名格式
    return Convert.ToBase64String(hashValue);
}

额外需要注意的细节

  • 请求头必须包含这几个字段,缺一不可:
    • KC-API-KEY:你的API Key
    • KC-API-TIMESTAMP:和签名中用的timestamp完全相同的毫秒时间戳
    • KC-API-SIGN:上面生成的Base64签名
    • KC-API-PASSPHRASE:创建API时设置的密码短语
  • 时间戳不能和KuCoin服务器时间相差超过30秒,否则会触发签名错误,建议用UTC时间生成避免时区偏差
  • 如果是POST请求,请求体必须是标准JSON格式,且要和待签名字符串里的queryOrBody完全一致(不能有多余空格、换行)
  • 确认你的API Key、Secret、Passphrase都正确,没有复制错误或大小写问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:44:27