关于 php:从响应 url 中提取令牌 – Spotify API

Extract token from response url - Spotify API

我正在使用此代码从 Spotify 的 Web API 获取令牌:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$url = 'https://accounts.spotify.com/api/token';
$method = 'POST';

$credentials ="{Client ID}:{Client Secret}";

$headers = array(
       "Accept: */*",
       "Content-Type: application/x-www-form-urlencoded",
       "User-Agent: runscope/0.1",
       "Authorization: Basic" . base64_encode($credentials));
$data = 'grant_type=client_credentials';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

$response = curl_exec($ch);
?>

这会在浏览器中显示:

1
{"access_token":"{token}","token_type":"Bearer","expires_in":3600}

太棒了!但是如何从响应中提取"{token}"并将其用作对 API 的请求中的参数?例如,在对 https://api.spotify.com/v1/users/{user_id}/playlists 的请求中,它需要标头字段中的令牌。

谢谢!


您需要对 JSON 进行解码:

1
$response = json_decode($response, true);

然后你会有一个包含值的数组。

1
$token = $response['access_token'];

另外,您缺少以这种方式获取响应的必要选项:

1
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

如果没有定义,你会得到一个布尔值而不是响应。


1
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

在你的 curl 执行之前也使用这条线,然后它会给你正确的 json