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

jgwigjjp  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(92)

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

所以这里的问题是,我做了我应该做的一切,但我没有得到令牌的响应。
下面是我在laravel中使用Guzzle包的代码:

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

ghg1uchk

ghg1uchk1#

有没有可能你误解了这句话?

Authorization: Basic <base64 encoded client_id:client_secret>

看起来你正在这样做:

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

但也许他们想要的是:

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

也就是说,假设你已经用base64对它们进行了编码,因为这实际上并没有显示在你的代码中。
此外,文档指出它需要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(...);
lnvxswe2

lnvxswe22#

谢谢.下面是上面的工作代码

use Illuminate\Support\Facades\Http;

$client_id = 'YOUR CLIENT ID';
$client_secret = 'YOUR CLIENT SECRET';

$post = 'https://accounts.spotify.com/api/token';

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

$response = Http::withHeaders([
  'Authorization' => 'Basic '.$clientKeys
 ])->asForm()->post($post,[
   'grant_type' => 'client_credentials'
 ]);

 $response->json();
 $access_token = $response['access_token'];

相关问题