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

Gate.io APIv4认证请求签名报INVALID_SIGNATURE错误求助

常见错误排查点

  • 请求方法大小写不匹配:签名用的请求方法必须是全大写(如GET、POST),如果传入的是小写的method也会导致签名错误。
  • Query参数未填充到签名串:你当前代码里签名串的第三个参数固定写了空字符串,只有无任何Query参数的请求才能这么写。如果是带Query的GET/DELETE类请求,需要将所有Query参数按key的ASCII码升序排序后拼接成key1=value1&key2=value2的格式填入该位置,不能留空。
  • JSON编码参数不匹配:PHP默认json_encode会自动转义斜杠,和Gate.io要求的Payload格式不一致,会导致Payload哈希校验失败。需要给json_encode增加JSON_UNESCAPED_SLASHES参数,同时保证签名时生成的JSON字符串和实际发请求时携带的Body完全一致,不要签名和发请求时分别做两次JSON编码。
  • 请求路径拼接错误:检查$fullPath是否和你实际请求的接口路径完全一致,比如不要多前缀、少斜杠,常见错误是把域名的host部分也拼进了路径,或者路径多了/api/v4之外的多余前缀。
  • 时间戳误差超限:Gate.io要求签名用的秒级Unix时间戳和服务器时间误差不能超过5s,请确认你的运行环境已经开启NTP时间同步,同时时间戳是秒级不是毫秒级。
  • 请求头参数不匹配:请求头里携带的KEY、Timestamp必须和你签名时用的API_KEY、$timestamp完全一致,同时POST请求需要携带Content-Type: application/json请求头。

修正后的签名函数参考

function signature($method, $url, $query = [], $body = [], $timestamp) {
    // 处理Query参数
    $queryStr = '';
    if (!empty($query)) {
        ksort($query);
        $queryStr = http_build_query($query);
    }
    // 处理Body,保证和发请求的Body完全一致
    $bodyStr = is_array($body) ? json_encode($body, JSON_UNESCAPED_SLASHES) : $body;
    // 确认路径和实际请求路径完全一致
    $fullPath = $url;
    $fmt = "%s\n%s\n%s\n%s\n%s";
    $hashedPayload = hash("sha512", $bodyStr);
    $signatureString = sprintf(
        $fmt,
        strtoupper($method),
        $fullPath,
        $queryStr,
        $hashedPayload,
        $timestamp
    );

    $signature = hash_hmac("sha512", $signatureString, $this->SECRET_KEY);
    return $signature;
}

内容的提问来源于stack exchange,提问作者Marek Tesař

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:57:04