币安 API http 错误 401 (Ionic/Angular)

Binance API http error 401 (Ionic/Angular)

privateCall(apiSecret, apiKey, path, data = null, get = true) {
    const timestamp = Date.now();
    const recvWindow = 60000; //máximo permitido, default 5000

    var obj = {
      apiSecret,
      ...data,
      timestamp, 
      recvWindow
    };


    var hash = CryptoJS.SHA256(obj);
    var signature = hash.toString();

    const newData = {...data, recvWindow, timestamp, signature };
    let qs = `?${this.objectToQueryString(newData)}`;

    const headers = new HttpHeaders();
    headers.set("X-MBX-APIKEY", apiKey);

    if (get) {      
      return this.http.get<any>(`${this.binanceUrl}${path}${qs}`, { headers: headers } );
    } else {
      return this.http.post(`${this.binanceUrl}${path}${qs}`, data, { headers: headers });
    }
  }

private objectToQueryString(obj) {
    var str = [];
    for(var p in obj) {
      if (obj.hasOwnProperty(p)) {
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
      }
    }
    return str.join("&");
  }

错误:代码=-2014; API-密钥格式无效

我要达到的 Url 是“/v3/account”。

我已经测试了我的 ApiKey 和 SecretKey。我在 binance test api 中生成了新密钥,但它仍然没有用。这可能是我通过 'header' 的方式吗?

编辑 1:

URL 字符串 qs = "?recvWindow=60000×tamp=1640963456770&signature=4ea5c508a6566e76240543f8feb06fd457777be39549c4016436afda65d2330e"

问题似乎出在您设置 X-MBX-APIKEY header 的方式上。

Angular 的 HttpHeaders 是不可变的。 所以,当你这样做时

const headers = new HttpHeaders();
headers.set("X-MBX-APIKEY", apiKey);

您正在创建一个空的 HttpHeaders object,创建一个具有所需 header 值的克隆,将其丢弃,然后发送空版本。

您可以使用获取值的 HttpHeaders 构造函数,或者安排使用 HttpHeaders.set() 返回的 cloned/updated 版本,例如

const headers = new HttpHeaders().set("X-MBX-APIKEY", apiKey);