Golang开发HTX交易机器人,调用火币合约API返回余额为0求助
解决HTX合约API查询余额返回0的问题
1. 确认API密钥权限
- 登录HTX后台的API管理页面,检查当前密钥是否开启了合约账户读取权限。默认创建的API密钥可能仅开放现货权限,需手动勾选
Contract Account Read相关选项,保存后重新测试。
2. 验证接口参数与端点
- 针对
/swap-api/v1/swap_account_info接口,需明确传入margin_account参数(例如USDT永续合约填USDT),未指定该参数可能导致返回默认币种的空余额。 - 确保接口匹配账户类型:若使用交割合约,需调用
/linear-swap-api/v1/linear_swap_account_info而非永续合约的swap接口;确认基础URLhttps://api.hbdm.com为HTX国际站合约API的正确域名。
3. 核对资金账户归属
- 在HTX网页端手动确认180美元是否转入永续合约账户(对应swap接口)。HTX的现货、永续合约、交割合约账户资金相互隔离,转错账户会导致API查询不到余额。
4. 排查Golang签名逻辑
- 合约API属于私有接口,必须通过HMAC签名验证,确保代码实现符合HTX的签名规则:
- 签名字符串需按
timestamp + 请求方法 + 接口路径 + 查询参数/请求体的格式拼接(GET用查询参数,POST用请求体)。 - 请求头必须包含
ACCESS-KEY(你的API密钥)、ACCESS-SIGN(生成的签名)、ACCESS-TIMESTAMP(当前毫秒级时间戳)三个字段。 - 示例签名逻辑(Golang):
import ( "crypto/hmac" "crypto/sha256" "encoding/base64" "fmt" "net/url" "strconv" "time" ) func generateHTXSignature(apiSecret, method, path string, params url.Values) string { timestamp := strconv.FormatInt(time.Now().UnixMilli(), 10) signContent := fmt.Sprintf("%s%s%s%s", timestamp, method, path, params.Encode()) h := hmac.New(sha256.New, []byte(apiSecret)) h.Write([]byte(signContent)) return base64.StdEncoding.EncodeToString(h.Sum(nil)) }
- 签名字符串需按
5. 手动测试接口排除代码问题
- 用Postman或curl构造签名后的请求,直接调用接口:
- 例如GET请求:
https://api.hbdm.com/swap-api/v1/swap_account_info?margin_account=USDT - 若手动请求能返回正确余额,说明问题出在Golang代码的签名或参数拼接;若手动请求仍返回0,需重新检查账户权限与资金归属。
- 例如GET请求:
内容的提问来源于stack exchange,提问作者CupaState
相关产品推荐
相关产品推荐

