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

WazirX API报2098错误Request out of receiving window如何解决

错误触发原因

错误码2098是WazirX私有接口的通用时间校验失败错误,触发逻辑只有一个:服务端收到请求时,计算传入的timestamp参数值和服务端当前时间的差值,超过了接口允许的最大接收窗口(默认5000毫秒),就会直接返回该错误。
你的代码存在两个直接触发该错误的问题:

  • 时间戳精度错误:WazirX所有私有接口要求传入毫秒级Unix时间戳(13位数字),但你用datetime.datetime.now().timestamp()取整后得到的是秒级时间戳(10位数字),数值和服务端时间差了1000倍,必然超出接收窗口。
  • 无时间校准逻辑:如果本地设备系统时间和WazirX服务器时间存在超过5秒的偏移,哪怕时间戳精度正确,也会触发该错误。

另外你当前代码中签名逻辑未完整展示,修完时间戳问题后如果碰到签名错误,需要确认签名是用HMAC-SHA256算法,以API Secret为密钥,对拼接好的参数字符串做加密生成,不要把签名本身纳入待加密的参数字符串。

修复后可直接运行的代码
import time
import hmac
import hashlib
import requests

# 替换为你自己的凭证
API_KEY = "你的WazirX API Key"
API_SECRET = "你的WazirX API Secret"

# 生成合规的毫秒级时间戳,优先用服务器时间校准避免本地时间偏移
# 本地时间准确时可以直接用下一行的本地生成逻辑
# ts = int(time.time() * 1000)
# 网络环境复杂/本地时间不准时用服务器时间校准(推荐)
server_time = requests.get("https://api.wazirx.com/sapi/v1/time").json()["serverTime"]
ts = server_time

# 拼接待签名的参数字符串,网络差时可以加recvWindow参数,最大支持60000(60秒)
# 示例加recvWindow的写法:query_str = f"timestamp={ts}&recvWindow=10000"
query_str = f"timestamp={ts}"

# 生成签名
signature = hmac.new(
    API_SECRET.encode("utf-8"),
    query_str.encode("utf-8"),
    hashlib.sha256
).hexdigest()

# 构造请求
request_url = f"https://api.wazirx.com/sapi/v1/funds?{query_str}&signature={signature}"
headers = {"X-Api-Key": API_KEY}

resp = requests.get(request_url, headers=headers)
print(resp.json())
实操避坑点
  • 不要用datetime模块生成时间戳,直接用time.time()*1000取整即可,避免时区配置、对象精度带来的异常。
  • 如果需要加recvWindow参数延长接收窗口,该参数必须和timestamp一起参与签名计算,否则会触发签名错误。
  • GET请求不需要传递空的data参数,多余的空载荷可能在部分网络环境下增加不必要的请求耗时,加大超窗概率。
  • 拼接URL参数时直接用&做分隔符,不要用HTML转义后的&,否则会导致服务端解析参数失败。
  • 所有参与签名的参数必须按照URL里的拼接顺序传入签名函数,顺序不一致会直接导致签名校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:22:04