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

Google App Script调用Spotify Client Credentials Flow返回400错误咨询

问题解答

1 报错原因说明

  • 首先是Authorization头末尾多了冗余的右括号:你代码里的授权头写完base64编码值后多打了一个),导致生成的Basic凭证格式完全非法,Spotify后端无法识别到合法的Basic认证头,就默认判定你尝试使用Bearer认证方式,才会返回“仅支持合法Bearer认证”的提示。
  • 改为Bearer前缀报401的原因:Bearer前缀后面需要跟请求token接口返回的有效访问令牌,你此时传的是客户端ID和密钥的Base64编码值,根本不是合法的访问令牌,自然会返回无效令牌的401错误。
  • 其余隐藏的错误点:
    • 请求地址错误:Spotify获取令牌的接口域名是accounts.spotify.com,不是api.spotify.com,你填写的地址本身就是无效的。
    • 请求头Content-Type设置错误:Client Credentials Flow获取令牌的请求要求提交表单格式数据,Content-Type应为application/x-www-form-urlencoded,不能是application/json。
    • payload格式错误:对应表单格式要求,payload不能序列化为JSON字符串,需要按表单键值对格式传递。

2 可运行代码示例

function callSpotifyAPI () {
  // 替换为自己的客户端凭证
  const SPOTIFY_CLIENT_SECRET = '你的client secret';
  const SPOTIFY_CLIENT_ID = '你的client id';

  const HEADERS = {
    'Authorization': `Basic ${Utilities.base64Encode(SPOTIFY_CLIENT_ID + ':' + SPOTIFY_CLIENT_SECRET)}`
  };
  
  // 表单格式请求体
  const BODY = {
    'grant_type': 'client_credentials'
  };
  
  // 正确的令牌请求地址
  const url = 'https://accounts.spotify.com/api/token';

  const requestOptions = {
    'method': 'POST',
    'headers': HEADERS,
    'payload': BODY, // Google App Script会自动将对象转为表单格式,无需手动序列化
    'muteHttpExceptions': true,
    'redirect': 'follow'
  };

  const response = UrlFetchApp.fetch(url, requestOptions);
  const data = JSON.parse(response.getContentText());
  // 打印返回的访问令牌,可后续调用其他业务接口使用
  console.log(data.access_token);
  return data;
}

代码可成功运行的原因

  • 修复了授权头多余的右括号,保证Basic凭证格式符合官方要求,Spotify可以正确识别客户端认证信息
  • 修正了请求接口的域名,使用正确的账号服务域名accounts.spotify.com请求令牌
  • 移除了错误的Content-Type: application/json请求头,Google App Script传递对象类型的payload时会自动设置正确的application/x-www-form-urlencoded头,符合令牌接口的参数格式要求
  • 不再将请求体序列化为JSON字符串,直接传递原始对象即可适配表单格式要求,参数可以被后端正确解析

内容的提问来源于stack exchange,提问作者Mario Perry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:36:05