当前位置: 首页 > 知识库问答 >
问题:

如何获得访问令牌Spotify API?

艾翼
2023-03-14

我已经看了几天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:我只使用这个应用程序,我为自己写的。有没有办法在不经历此过程的情况下对令牌进行硬编码?

共有1个答案

刘乐童
2023-03-14

收到授权码后,您需要通过向Spotify帐户服务发出POST请求(这次是向其 /api/tokenendpoint),将其与访问令牌进行交换:

因此,您需要使用请求正文中的参数向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上是不允许的。)

 类似资料:
  • 我想使用谷歌作为OIDC协议的id提供商。我有一个简单的应用程序。它启动,正确地重定向到谷歌,然后返回到应用程序,打印用户详细信息并将其存储在会话中。但是,这种身份验证似乎来自id令牌,并且只有1h的过期时间 我的YML:

  • 我如何从第一次授权代码中获得刷新令牌和访问令牌?并且,我如何重用这个刷新令牌来获得一个新的访问令牌,以便使用Java API上传到Google Drive?这不是一个web应用程序。它在Java Swing代码中。

  • 获取访问令牌的文档中的第一步是“将用户引导到我们的授权URL”。那到底是什么意思?没有提供链接或任何东西。它还说“公司名称、联系电子邮件和隐私政策URL是开始提交的必要条件。”我们的应用程序没有隐私政策...只是一个简单的标签提要。我不明白为什么有一个简单的标签提要那么复杂。 是否有一个等待时间来获得批准的应用程序..如果它得到批准...在获得访问令牌之前,我必须获得批准吗?这在任何地方都没有概述

  • 下面是security.xml文件,我正在使用它合并spring-security-oauth2。 我必须在spring-security.xml文件中做哪些更改,以便在JSON中发送查询参数?

  • 我正在开发一个通过FCM使用通知的测试应用程序。我使用Volley将数据从设备发送到服务器(WAMP),但令牌始终是空字符串/我编写的默认值。我在互联网上搜索了一下,但我仍然不知道为什么令牌没有被存储/生成(我是编码新手。)还有一件事:每次我发送令牌时,toast都会向我显示我在那里写的“好的”文本,但它也会给我很多html代码。这是我的文件:MainActivity.kt FcmInstance