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

C#调用Bybit API发送POST请求时报10004签名错误如何解决

Bybit API 10004签名错误排查解决步骤

1. 修复待签名字符串拼接错误

你当前构造待签名参数串时,symbol和timestamp参数之间漏了&分隔符,直接导致待签名内容和接口校验的原始字符串不匹配:

// 错误写法,拼接后为 "api_key=xxx&symbol=BTCUSDTtimestamp=xxx"
string paramString = "api_key=" + apiKey + "&symbol=BTCUSDT" + "timestamp=" + ts;
// 修正后写法
string paramString = "api_key=" + apiKey + "&symbol=BTCUSDT&timestamp=" + ts;

2. 修正请求传参格式

Bybit V2私有POST接口不支持JSON格式传参,要求使用application/x-www-form-urlencoded表单格式传递参数,你当前使用AddJsonBody发送JSON请求体,接口无法正确解析参数,会直接触发签名校验失败:

var request = new RestRequest();
// 移除AddJsonBody逻辑,改为添加表单参数
request.AddParameter("api_key", co.api_key);
request.AddParameter("symbol", co.symbol);
request.AddParameter("timestamp", co.timestamp);
request.AddParameter("sign", co.sign);

3. 校验签名生成规则

如果完成以上修改仍报错,检查以下签名规则是否符合要求:

  • 后续新增参数时,所有参数必须按ASCII码升序排序后再拼接为待签名字符串
  • 检查ByteArrayToString方法输出的十六进制签名是否为全小写格式,大写格式会被判定为签名错误,正确示例如下:
public static string ByteArrayToString(byte[] bytes)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in bytes)
    {
        sb.Append(b.ToString("x2")); // x2指定输出小写十六进制
    }
    return sb.ToString();
}

4. 校验时间戳有效性

确认你生成的是毫秒级Unix时间戳,且和Bybit服务器时间差不超过5秒,本地时间偏差过大也会导致签名失效,可优先调用Bybit公共时间接口获取服务器时间生成签名,避免本地时间误差。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:45:06