使用 Laravel 和 Guzzle 包将网络 API 发送到 Spotify 时出现问题

Problem sending web API to Spotify using Laravel and Guzzle package

我正在尝试使用网络 API 与 Spotify 通信。 情况就是这样。为了从 Spotify 检索任何信息,首先我需要获得 Spotify 的授权。为此,我需要向 https://accounts.spotify.com/api/token 发送一个包含授权凭证(包含 client_id 和 client_secret)的 post 请求,然后作为响应,我应该会收到一个访问令牌稍后我将使用它来检索任何其他信息。 这是有关其工作原理的快速 Spotify 文档:

所以这里的问题是我正在做我应该做的一切,但我没有得到响应的令牌。

这是我在 laravel 中使用 Guzzle 包的代码:

而不是访问令牌作为响应,这个 HTML 输出是我在 return 中从 Spotify 收到的(没有任何问题的进一步信息和任何错误代码):

您可能误解了这一行?

Authorization: Basic <base64 encoded client_id:client_secret>

看起来你是这样做的:

base64_encode($client_id) . ":" . base64_encode($client_secret)

但也许他们想要这个:

base64_encode($client_id . ":" . $client_secret);

也就是说,假设您完全使用 base 64 对它们进行编码,因为这实际上并未显示在您的代码中。


此外,文档指出它需要 application/x-www-form-urlencoded 编码。

# 发送表单 URL 编码请求
https://laravel.com/docs/8.x/http-client#sending-form-url-encoded-requests

要满足此要求,您可能需要在请求中添加 asForm()

$response = Http::withHeaders(...)->asForm()->post(...);