Spotify Web API 无法获取访问令牌

Posted

技术标签:

【中文标题】Spotify Web API 无法获取访问令牌【英文标题】:Spotify Web API can not get access token 【发布时间】:2020-10-09 22:50:12 【问题描述】:
$response = Http::withHeaders([
            'Authorization' => 'Basic '. base64_encode(env('CLIENT_ID').':'.env('CLIENT_SECRET')),
            'Content-Type' => 'application/x-www-form-urlencoded'
        ])->post('https://accounts.spotify.com/api/token', [
            'code' => trim($code),
            'redirect_uri' => env('REDIRECT_URI'),
            'grant_type' => 'authorization_code',
        ]);
print_r($response->json());

这个返回码:

[error] => unsupported_grant_type [error_description] => grant_type 参数丢失 当我想获得访问令牌时。

【问题讨论】:

我们如何扩展来自 API 的相当清晰的响应? @RiggsFolly - 在完全响应时我收到 400 bad gateway error 看来此人遇到了同样的问题,原因是网关错误 400。尝试移动您的数据参数:***.com/questions/28159288/… 【参考方案1】:

我通过使用 Guzzle 客户端库而不是 laravel 的 Http 外观解决了问题。我将选项发送为 form_params。感谢您的回复。

$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://accounts.spotify.com/api/token', [
            'headers' => $headers,
            'form_params' => $options
        ]);

【讨论】:

【参考方案2】:

在 Laravel 中,如果您希望使用 Http 客户端并将 Content-type 设置为“application/x-www-form-urlencoded”,只需调用 asForm() 方法,如 Laravel Http 文档中所述(来源:@987654321 @)。

$response = Http::withHeaders(['Authorization' => 'Basic ' . base64_encode(env('CLIENT_ID') . ':' . env('CLIENT_SECRET'))])
            ->asForm()
            ->post('https://accounts.spotify.com/api/token', [
                'code' => trim($code),
                'redirect_uri' => env('REDIRECT_URI'),
                'grant_type' => 'authorization_code'
            ]);

【讨论】:

以上是关于Spotify Web API 无法获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Spotify API 获取访问令牌

Spotify 在服务器上获取访问令牌 - Spotify API 有那么糟糕吗?

spotify-web-api-node:authorizationCodeGrant()给出400 - 错误请求

获取适用于 Android 应用的 Spotify API 的访问令牌

Spotify API:如何仅为我自己获取访问令牌

如何使用客户端ID和密码访问spotify的web api?