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

生成API签名(HMAC SHA256)时出现签名错误,求排查方案

Azbit API签名错误排查与修复

你的代码生成的API签名始终错误,核心问题出在请求体的序列化方式上,具体问题和修复方案如下:

问题根源

你使用str(data)将Python字典转为字符串,生成的是类似{'side': 'sell', 'currencyPairCode': 'BTC_USDT', ...}的Python格式字符串——其中用单引号、键值对顺序不固定,还可能包含多余空格,但Azbit API要求签名使用标准JSON格式的请求体字符串(双引号包裹键值、固定键顺序、无冗余空格)。

修正后的代码

import requests
import json
import hmac
import hashlib

pkey = "你的公钥"
skey = "你的密钥"
 
url = "https://data.azbit.com/api/orders"
data = {"side":"sell","currencyPairCode":"BTC_USDT","amount":0.01,"price":29700}

# 关键修正:用json.dumps生成标准JSON字符串,确保格式严格匹配API要求
request_body_str = json.dumps(data, separators=(',', ':'))
sigtext = pkey + url + request_body_str

sighmac = hmac.new(skey.encode('utf-8'), sigtext.encode('utf-8'), hashlib.sha256).hexdigest()

rheaders = {"API-PublicKey": pkey, "API-Signature": sighmac}

# 可选:如果担心requests的json参数序列化和签名用的字符串不一致,可直接发送序列化后的字符串
# response = requests.post(url, headers={**rheaders, "Content-Type": "application/json"}, data=request_body_str)
response = requests.post(url, headers=rheaders, json=data)
 
print("状态码", response.status_code)
print("响应内容 ", response.json())

额外注意事项

  • 确保json.dumps生成的字符串和实际发送给API的请求体完全一致:如果使用requests.post的json参数,内部会自动序列化,但部分API要求签名用的请求体必须和实际发送的字节完全匹配,此时建议直接发送request_body_str并添加Content-Type: application/json请求头。
  • 检查公钥、密钥是否正确,无复制错误或多余空格。

内容的提问来源于stack exchange,提问作者kk3nny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:53:11