Node.js生成BingX API签名遇‘signature not match’错误求助
解决BingX API签名不匹配问题
问题根源
你的签名生成代码存在3个不符合BingX API规范的问题,直接导致验证失败:
- 手动拼接参数易出错,且未通过程序化逻辑保证参数按ASCII升序排序
- 原始字符串拼接存在格式隐患
- 额外执行了URL编码(BingX官方未要求此步骤,会破坏签名结构)
BingX签名生成核心规则(官方文档翻译)
- 签名基于
请求方法+请求路径+排序后的参数串生成,三者直接拼接无任何分隔符 - 请求参数必须按参数名ASCII升序排列,参数间用
&连接 - 使用HMAC-SHA256算法,以API对应的Secret Key作为加密密钥
- 最终仅需对HMAC运算结果做Base64编码,无需额外URL编码
修正后的代码
const Base64 = require('crypto-js/enc-base64'); const hmacSHA256 = require('crypto-js/hmac-sha256'); // 1. 定义所有请求参数 const params = { apiKey: 'my_api_key', currency: 'USDT', timestamp: Date.now().toString() // 转为字符串避免类型拼接问题 }; // 2. 按参数名ASCII升序排序并拼接成参数串 const sortedParamStr = Object.keys(params) .sort() .map(key => `${key}=${params[key]}`) .join('&'); // 3. 拼接签名原始字符串 const originString = `POST/api/v1/user/getBalance${sortedParamStr}`; // 4. 生成符合要求的签名 const signature = Base64.stringify(hmacSHA256(originString, 'my_secret_key')); // 关键:不要执行encodeURIComponent,否则会导致签名不匹配
额外检查项
- 确认使用的是API对应的Secret Key,而非API Key本身
- 确保timestamp为当前毫秒级时间戳,请求发送时与签名生成时间差不超过5分钟(避免时间同步误差)
- 核对请求路径与API文档完全一致(比如是否多写/漏写斜杠)
内容的提问来源于stack exchange,提问作者developer
相关产品推荐
相关产品推荐

