Node环境下Bittrex API密钥签名问题求助
解决Bittrex API签名错误(APISIGN_NOT_PROVIDED)问题
嘿,我之前也踩过Bittrex API签名的坑,你的问题出在签名生成逻辑和传递方式完全不对,咱们一步步来修正:
首先,Bittrex的v1.1 API要求的签名规则不是直接哈希你的API密钥,而是要对包含所有参数的完整请求URL用你的Secret密钥做HMAC-SHA512加密,而且这个签名是要放在HTTP请求头的apisign字段里,不是把签名当成apikey参数的值。
修正后的代码步骤:
先构建完整的请求URL
这里的apikey用你实际的API密钥,nonce必须是每次请求唯一的递增数值(用时间戳是最方便的实现方式):const buildBalanceRequestUrl = (currency) => { const apiKey = process.env.BITTREX_API_KEY; const nonce = Date.now(); // 每次请求都要不一样,用自增计数器也可以 return `https://bittrex.com/api/v1.1/account/getbalance?apikey=${apiKey}¤cy=${currency}&nonce=${nonce}`; };生成符合要求的签名
用你的Secret密钥对上面构建的完整URL做HMAC-SHA512加密:const generateBittrexSignature = (url) => { const secret = process.env.BITTREX_SECRET; return crypto.createHmac('sha512', secret) .update(url) .digest('hex'); };发起请求时携带签名头
把生成的签名放在apisign请求头里,而不是拼在URL里:export const account_balance_for_currency = async (currency) => { const requestUrl = buildBalanceRequestUrl(currency); const signature = generateBittrexSignature(requestUrl); // 这里用fetch举例,你也可以用axios或者Node.js的http模块 const response = await fetch(requestUrl, { method: 'GET', headers: { 'apisign': signature } }); return response.json(); };
为什么之前的方法无效?
- 你之前是直接对API密钥做哈希,这完全不符合Bittrex的签名规则,平台根本识别不了这个所谓的
signedKey。 - 另外,Bittrex要求签名必须放在
apisign请求头里,而不是作为URL参数传递,这就是你收到APISIGN_NOT_PROVIDED错误的核心原因。
额外注意事项:
- 先确认你的
process.env.BITTREX_API_KEY和process.env.BITTREX_SECRET确实加载成功了,可以用console.log输出检查,避免环境变量读取失败的问题。 nonce必须严格递增,不能重复,时间戳是最简单的实现,但如果你的请求频率很高,也可以用一个自增的计数器。- 确保请求方法是GET,Bittrex v1.1的账户类接口都是GET请求。
内容的提问来源于stack exchange,提问作者cheussy
相关产品推荐
相关产品推荐

