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

调用Crypto.com C# REST API私有端点遇INVALID_NONCE错误求助

解决Crypto.com私有API的INVALID_NONCE错误(错误码10007)

针对你调用private/get-currency-networks接口时遇到的INVALID_NONCE错误,结合文档说明的“nonce与服务器时间差超30秒”原因,给出以下实操解决方法:

  • 强制校准本地时间
    本地机器/服务器时间偏差是最常见的原因,务必开启NTP同步:

    • Windows执行命令:w32tm /resync强制同步时间
    • Linux执行命令:timedatectl set-ntp true或ntpd -q完成同步
      同步后可以手动验证:调用Crypto.com的公开public/time接口获取服务器毫秒级时间戳,和本地DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()输出对比,差值必须控制在30秒内。
  • 改用服务器时间作为nonce基准
    避免依赖本地时间,先请求public/time获取服务器当前时间戳,以此为基础生成nonce:

    // 先实现获取服务器时间的方法
    private long GetCryptoComServerTime()
    {
        using var client = new HttpClient();
        var response = client.GetStringAsync("https://api.crypto.com/v2/public/time").Result;
        var json = JsonDocument.Parse(response);
        return json.RootElement.GetProperty("result").GetProperty("serverTime").GetInt64();
    }
    
    // 生成nonce:基于服务器时间,确保每次请求递增
    private static long _lastNonce;
    long GenerateNonce()
    {
        long serverTime = GetCryptoComServerTime();
        return Interlocked.Max(ref _lastNonce, serverTime) + 1;
    }
    

    用Interlocked.Max保证nonce不会因服务器时间回拨(极端情况)而递减,同时每次请求自动加1,避免重复。

  • 检查nonce与签名的一致性
    确认签名计算时使用的nonce值,和最终请求体中的nonce字段完全一致,不能在签名后修改nonce,否则会导致签名验证失败同时触发nonce错误。

  • 确保nonce严格递增
    即使时间校准正常,重复或递减的nonce也会触发错误。如果是并发请求场景,必须用线程安全的计数器(比如Interlocked.Increment)来维护nonce的递增逻辑,不能依赖本地时间的自然增长。

内容的提问来源于stack exchange,提问作者Mateus Lima Silveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:10:57