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

Linux命令行播放Spotify歌曲遇403错误(高级用户)

解决Spotify API调用返回"403 Premium account needed"的问题

问题根源

你用的client_credentials授权模式是给服务器端应用设计的,这种模式下拿到的token不关联任何个人用户账号——哪怕你是高级用户,这个token也没有你的账号权限,自然无法调用/me/player/play这种需要用户上下文的播放接口。

修复方案

必须改用**Authorization Code Flow(带PKCE)**来获取token,这种模式会让token关联你的个人高级账号,从而获得播放权限。

1. Bash脚本修正版

先在Spotify开发者后台把应用的重定向URI设为http://localhost:8888/callback,再使用下面的脚本:

#!/bin/bash
TRACK_ID="0hCB0YR03f65y1YKr59OSs" # Zeppelin
CLIENT_ID="你的客户端ID"
REDIRECT_URI="http://localhost:8888/callback"

# 生成PKCE验证参数
CODE_VERIFIER=$(openssl rand -hex 32)
CODE_CHALLENGE=$(echo -n "$CODE_VERIFIER" | sha256sum | cut -d' ' -f1 | xxd -r -p | base64 | tr '+/' '-_' | tr -d '=')

# 输出授权链接,需用户在浏览器中打开完成授权
echo "请在浏览器打开以下链接完成授权:"
echo "https://accounts.spotify.com/authorize?client_id=$CLIENT_ID&response_type=code&redirect_uri=$REDIRECT_URI&code_challenge_method=S256&code_challenge=$CODE_CHALLENGE&scope=user-modify-playback-state%20user-read-playback-state"

# 等待用户输入回调URL中的code参数
read -p "请输入回调地址中的code值:" AUTH_CODE

# 获取关联用户的token
TOKEN_RESPONSE=$(curl -X POST "https://accounts.spotify.com/api/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=authorization_code&client_id=$CLIENT_ID&code=$AUTH_CODE&redirect_uri=$REDIRECT_URI&code_verifier=$CODE_VERIFIER")

ACCESS_TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.access_token')

# 调用播放接口
curl -s -X "PUT" "https://api.spotify.com/v1/me/player/play" \
     --data "{\"uris\": [\"spotify:track:$TRACK_ID\"]}" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer ${ACCESS_TOKEN}"

2. Spotipy的修正写法

同样要改用Authorization Code Flow,而非Client Credentials:

import spotipy
from spotipy.oauth2 import SpotifyOAuth

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id="你的客户端ID",
    client_secret="你的客户端密钥",
    redirect_uri="http://localhost:8888/callback",
    scope="user-modify-playback-state user-read-playback-state"
))

# 开始播放指定曲目
sp.start_playback(uris=["spotify:track:0hCB0YR03f65y1YKr59OSs"])

注意事项

  • 授权时必须勾选user-modify-playback-state和user-read-playback-state权限,否则仍会出现权限不足的问题
  • 确保设备已安装openssl、jq(Bash脚本依赖)和Spotipy库(Python脚本依赖)
  • 播放前要保证有一个活跃的Spotify播放器(比如桌面客户端、网页端或手机端处于在线状态)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:33:39