如何获取访问令牌Spotify API?

2022-04-16 00:00:00 spotify xmlhttprequest javascript html ajax

我研究Spotify API已经有几天了,还有一些示例源代码,但我仍然想不出如何获取访问令牌来访问用户的播放列表数据。我已经打开登录窗口,用户登录,然后我收到授权码。在这一点上,我尝试了如下操作:

window.open("https://accounts.spotify.com/api/token?
grant_type=authorization_code&code="+code+"&redirect_uri=myurl&client_id=3137b15
2f1424defa2c6020ae5c6d444&client_secret=mysecret");

$.ajax(
    {
      url: "https://accounts.spotify.com/api/token?grant_type=authorization_code&code="+code+"&redirect_uri=myurl&client_secret=mysecret&client_id=myid", 
      success: function(result){
        alert("foo");
      }
    }
);

但无论采用哪种方法,我都会得到如下结果:

{"error":"server_error","error_description":"Unexpected status: 405"}

而不是令牌。我相信这很简单,但我对JS很不在行。请救救我!谢谢!

(编辑)我忘了说:

API身份验证指南链接:https://developer.spotify.com/web-api/authorization-guide/

我被困在步骤4。我看到有一种发送"Header参数"或cURL请求的替代方法可能会起作用。但考虑到我不知道如何做这些事情,我坚持像以前对用户登录/代码所做的那样,将客户端id和客户端秘密作为正文请求参数发送。

PS:我只是在使用我为自己编写的这个应用程序。有没有办法不经过这个过程就能硬编码令牌?


解决方案

收到授权码后,您需要将其与访问令牌交换,方法是向Spotify Account服务发出POST请求,这次是向其/api/Token终结点:

所以您需要向Spotify API发出POST请求,参数在请求正文中:

$.ajax(
  {
    method: "POST",
    url: "https://accounts.spotify.com/api/token",
    data: {
      "grant_type":    "authorization_code",
      "code":          code,
      "redirect_uri":  myurl,
      "client_secret": mysecret,
      "client_id":     myid,
    },
    success: function(result) {
      // handle result...
    },
  }
);

(作为附注,"意外状态:405"是指HTTP状态代码405方法不允许,这表示您尝试的请求方法-GET请求-在该URL上不被允许。)

相关文章