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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:22:28