Bitstamp API签名构造问题排查:调用余额接口返回无效签名
Bitstamp API "Invalid signature" 问题排查
问题描述
我尝试通过Bitstamp API查询账户余额,编写了如下bash脚本:
#!/bin/bash # Bitstamp API credentials API_KEY="name_of_my_API_key" API_SECRET="private_API_key" CUSTOMER_ID="ID_number" # Build the nonce NONCE=$(date +%s%N) # Sign the message echo -e "${NONCE}\t${CUSTOMER_ID}\t${API_KEY}\t${API_SECRET}" SIGNATURE=$(echo -n "${NONCE}${CUSTOMER_ID}${API_KEY}" | openssl dgst -sha256 -hmac "${API_SECRET}" | sed 's/^.* //') echo ${SIGNATURE} RESULT=$(curl -s -X POST https://www.bitstamp.net/api/v2/account_balances/usd/ \ -d "key=${API_KEY}" \ -d "signature=${SIGNATURE}" \ -d "nonce=${NONCE}") # Check if the order was successful STATUS=$(echo ${RESULT} | jq -r '.status') if [ "${STATUS}" != "success" ]; then echo "Error: Order failed - $(echo ${RESULT} | jq -r '.reason')" fi BALANCE_AVAILABLE=$(echo ${RESULT} | jq -r '.available') echo "${BALANCE_AVAILABLE}"
执行后收到错误提示:Invalid signature,请问签名构造是否存在错误?
问题分析与解决
你的签名构造确实存在问题,核心原因是Bitstamp API要求签名结果为大写的十六进制字符串,而你当前生成的是小写,这直接导致签名验证失败。
同时请确认两个关键细节:
- 签名的输入字符串格式是正确的:
${NONCE}${CUSTOMER_ID}${API_KEY}符合Bitstamp V2 API的要求 CUSTOMER_ID必须是Bitstamp账户的数字ID(不是用户名或邮箱),填错也会导致签名验证失败
修正后的签名生成代码
# 修正后的签名生成:将结果转为大写 SIGNATURE=$(echo -n "${NONCE}${CUSTOMER_ID}${API_KEY}" | openssl dgst -sha256 -hmac "${API_SECRET}" | sed 's/^.* //' | tr '[:lower:]' '[:upper:]')
额外注意事项
- Nonce必须是严格递增的数字,你用
date +%s%N生成的纳秒级时间戳满足要求,但要确保每次请求的nonce都比上一次大 - 确保
API_SECRET没有包含特殊字符(如果有,建议用单引号包裹避免转义问题)
内容的提问来源于stack exchange,提问作者pa-well
相关产品推荐
相关产品推荐

