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

在Google Sheets调用Bybit API获取平仓PnL列表时遭遇签名错误

解决Bybit API签名错误问题(Google Sheets函数)

以下是你代码里的核心问题和修复方案:

  • 签名字符串拼错了
    Bybit V3 API要求签名字符串是 时间戳 + API密钥 + 接收窗口 + 接口路径(含查询参数,不带域名),你之前用了完整URL,这会导致签名不匹配。改成只用endpoint部分拼接:

    var strForSign = timeStamp + key + recv_widow + endpoint;
    
  • 签名没做Base64编码
    Utilities.computeHmacSha256Signature返回的是字节数组,必须转成Base64字符串才能被Bybit识别。把注释掉的那行启用,替换当前的签名值:

    'X-BAPI-SIGN': Utilities.base64Encode(signature),
    
  • 冗余参数可以去掉
    GET请求不需要设置contentType,删掉这个参数避免干扰。

修复后的完整代码:

function bybitpnl() {
  var timeStamp = new Date().getTime().toString();
  var host = 'https://api.bybit.com';
  var endpoint = '/contract/v3/private/position/closed-pnl?symbol=ETHUSDT';
  var key = 'xxxxxxxxxxx';
  var secret = 'xxxxxxxxxxxx';
  var recv_widow = '5000';

  // 按Bybit规则拼接签名字符串
  var strForSign = timeStamp + key + recv_widow + endpoint;
  Logger.log(strForSign);

  // 生成HMAC-SHA256签名并转Base64
  var signatureBytes = Utilities.computeHmacSha256Signature(strForSign, secret);
  var signature = Utilities.base64Encode(signatureBytes);

  var options = {
    method: "GET",
    headers: {
      'X-BAPI-SIGN-TYPE': '2',
      'X-BAPI-API-KEY': key,
      'X-BAPI-TIMESTAMP': timeStamp,
      'X-BAPI-SIGN': signature,
      'X-BAPI-RECV-WINDOW': recv_widow
    }
  };

  var url = host + endpoint;
  var requestDetails = UrlFetchApp.getRequest(url, options);
  Logger.log(requestDetails);
  
  try {
    var result = UrlFetchApp.fetch(url, options);
    Logger.log(result.getContentText());
  } catch (e) {
    Logger.log("请求错误: " + e.toString());
  }
};

另外注意:如果还是报错,检查下本地时间和Bybit服务器时间的误差不要超过5秒(你设置的recv_widow是5000ms),误差太大也会触发签名错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:25:06