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

调用Bithumb /info/orders API遇5100认证错误,求代码排查方案

解决Bithumb API调用返回5100(Bad Request.(Auth Data))错误的方案

错误码5100表明鉴权数据不符合平台要求,以下是针对你代码的具体修改方案和问题分析:

问题分析与核心修改点

  1. Nonce生成逻辑不可靠
    原代码通过分割microtime字符串生成nonce,容易出现格式错误。Bithumb要求nonce是递增的整数,直接用毫秒级时间戳生成更稳定且符合规则。

  2. 签名拼接规则错误
    原代码错误地将endpoint加入到请求参数列表中,Bithumb的签名规则是将endpoint(如/info/orders)、urlencoded的请求参数、nonce用chr(1)(SOH控制字符)分隔,而非把endpoint作为参数的一部分。

  3. 请求数据与签名参数不一致
    原代码传递字典作为请求数据,虽然requests会自动编码,但手动生成urlencoded字符串并传递,能确保和签名使用的参数完全一致,避免编码差异导致的鉴权失败。

  4. 签名生成步骤冗余
    原代码对hmac的hex结果重复编码,直接基于hmac的二进制摘要生成base64即可,完全符合Bithumb的签名要求。

修改后的完整代码

import time
import base64
import hmac, hashlib
import urllib.parse
import requests


class XCoinAPI:
    api_url = "https://api.bithumb.com"

    def __init__(self, api_key, api_secret):
        self.api_key = api_key
        self.api_secret = api_secret

    def get_nonce(self):
        # 生成毫秒级时间戳作为nonce,确保递增且格式合规
        return str(int(time.time() * 1000))

    def xcoinApiCall(self, endpoint, rgParams):
        # 1. 生成urlencoded格式的请求参数字符串
        str_data = urllib.parse.urlencode(rgParams)
        # 2. 获取合法的nonce值
        nonce = self.get_nonce()
        # 3. 构造签名原始字符串:endpoint + SOH + 参数串 + SOH + nonce
        sign_raw = f"{endpoint}{chr(1)}{str_data}{chr(1)}{nonce}"
        sign_raw_bytes = sign_raw.encode('utf-8')
        # 4. 生成HMAC-SHA512签名并做base64编码
        secret_bytes = self.api_secret.encode('utf-8')
        hmac_result = hmac.new(secret_bytes, sign_raw_bytes, hashlib.sha512).digest()
        api_sign = base64.b64encode(hmac_result).decode('utf-8')

        headers = {
            "Accept": "application/json",
            "Content-Type": "application/x-www-form-urlencoded",
            "Api-Key": self.api_key,
            "Api-Nonce": nonce,
            "Api-Sign": api_sign
        }

        url = f"{self.api_url}{endpoint}"
        # 传递urlencoded字符串作为请求数据,确保和签名用的参数完全一致
        r = requests.post(url, headers=headers, data=str_data)
        return r.json()


# 替换为你的真实API密钥
a = XCoinAPI(api_key="YOUR_ACTUAL_API_KEY", api_secret="YOUR_ACTUAL_API_SECRET")
# 注意:order_currency需为Bithumb支持的币种代码(示例用LTC,你之前的LN可能无效)
aa = a.xcoinApiCall("/info/orders", {"order_currency": "LTC", "payment_currency": "BTC"})
print(aa)

额外注意事项

  • 确认API密钥和密钥完全正确,且已在Bithumb后台开启/info/orders接口的访问权限
  • order_currency必须是平台支持的有效币种代码,无效代码也会触发请求失败
  • Nonce必须严格递增且不重复,使用毫秒时间戳可天然满足这一要求

内容的提问来源于stack exchange,提问作者석장원

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:32