【问题标题】:How can I get an access token Spotify API?如何获取访问令牌 Spotify API?
【发布时间】:2017-02-14 16:30:52
【问题描述】:

我这几天一直在研究 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 步。我发现有另一种方法可以发送“标头参数”或 cURL 请求,它可能会起作用。但是,鉴于我不知道如何做这些事情,我一直坚持将 client_id 和 client_secret 作为正文请求参数发送,就像我之前为用户登录/代码所做的那样。

PS:我只使用我为自己编写的这个应用程序。有没有一种方法可以在不经过此过程的情况下硬编码令牌?

【问题讨论】:

    标签: javascript html ajax xmlhttprequest spotify


    【解决方案1】:

    收到授权码后,您需要通过向 Spotify Accounts 服务发出 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...
        },
      }
    );
    

    (作为旁注,“Unexpected status: 405”指的是HTTP状态码405 Method Not Allowed,表示你尝试的请求方法——一个GET请求——不允许在该 URL 上。)

    【讨论】:

    • 有趣,看起来很简单。现在试一试,我会在一分钟内告诉你进展如何。
    • 好的,试过了。我得到了XMLHttpRequest cannot load https://accounts.spotify.com/api/token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'www.mysite.com' is therefore not allowed access.。我知道我有一个有效的代码、秘密 id、id 和 url。至于grant_type,我只是输入了“authorization_code”
    • @AshwinGupta this answer 解决了这个确切的问题:“对accounts.spotify.com/api/token 的请求需要在服务器端进行,而不是作为 AJAX 请求。”
    • 啊好吧!抱歉,应该查一下。感谢您的帮助,我感到困惑的部分是 POST 与 GET 以及如何发送 ajax,这是很棒的建议!
    • 一个快速的问题:在您链接我的帖子中,它说您不能使用客户端请求。这是否包括带有代码、redirect_uri 等的整个 POST 请求。或者只是带有 client_id 和 client_id 的标头部分?
    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 2020-10-09
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2020-01-09
    相关资源
    最近更新 更多