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

构造UrlFetchApp请求获取ChinaBrands API访问令牌的技术问询

问题分析与修正方案

从你提供的代码来看,目前有两个核心问题会导致无法正确获取ChinaBrands的访问令牌,下面逐一拆解并给出修复方案:

1. 签名生成逻辑错误

你直接将data对象与SECRETKEY拼接,这会得到类似[object Object]xxxxxx的无效字符串,完全不符合API要求的签名规则。正确的处理步骤应该是:

  • 先把data对象序列化为无缩进的标准JSON字符串
  • 将该字符串与SECRETKEY拼接
  • 再执行Base64编码操作(如果API要求先做哈希加密再编码,后续可根据文档调整,但先修正基础逻辑)

2. 请求Payload格式错误

因为你设置了contentType: "application/json",所以payload必须是JSON字符串,而非JavaScript对象——否则UrlFetchApp会自动将其编码为表单格式,导致API无法解析请求内容。


修正后的完整代码

function getAccessToken() { 
  // 替换为你的实际配置参数
  const EMAILID = "your_email@example.com";
  const PWD = "your_login_password";
  const APIKEY = "your_chinabrands_api_key";
  const SECRETKEY = "your_chinabrands_secret_key";

  const url = "https://gloapi.chinabrands.com/v2/user/login"; 
  const data = { "email": EMAILID, "password": PWD, "client_id": APIKEY };

  // 修正签名生成逻辑:先转JSON字符串再拼接密钥
  const dataJsonStr = JSON.stringify(data);
  const signature = Utilities.base64Encode(dataJsonStr + SECRETKEY);

  // 构造请求体并转为JSON字符串
  const payload = JSON.stringify({ "data": data, "signature": signature }); 

  const options = { 
    "method": "post", 
    "contentType": "application/json", 
    "payload": payload,
    // 开启后可捕获HTTP错误,便于调试
    "muteHttpExceptions": true 
  }; 

  try {
    const response = UrlFetchApp.fetch(url, options);
    const jsonResponse = response.getContentText();
    // 打印状态码辅助排查问题
    console.log("响应状态码:", response.getResponseCode());
    Browser.msgBox(jsonResponse); 
  } catch (error) {
    Browser.msgBox("请求出错: " + error.toString());
  }
}

额外调试建议

  • 开启muteHttpExceptions: true后,即使遇到400、401这类HTTP错误,也能获取到API返回的错误详情,方便定位问题
  • 如果签名仍然无效,建议仔细核对API文档中签名的具体算法(比如是否需要先对参数排序、是否需要做MD5/SHA哈希后再Base64编码)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:40