从响应 url 中提取令牌 - Spotify API

Posted

技术标签:

【中文标题】从响应 url 中提取令牌 - Spotify API【英文标题】:Extract token from response url - Spotify API 【发布时间】:2014-08-22 13:48:47 【问题描述】:

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

<?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);
?>

这会在浏览器中显示:

"access_token":"token","token_type":"Bearer","expires_in":3600

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

谢谢!

【问题讨论】:

【参考方案1】:

您需要解码 JSON:

$response = json_decode($response, true);

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

$token = $response['access_token'];

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

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

如果未定义,您将获得一个布尔值而不是响应。

【讨论】:

我在最底部添加了这两行,然后输入“echo $token;”之后,验证“$token”是我想要的值,但它没有显示在我的浏览器中。做错了什么?谢谢! json_decode 之前和之后执行var_dump($response); 很抱歉,我做错了。我真的不需要在浏览器中显示令牌值。我想从响应中提取 token 并将其用作我对 API 的调用中的值。我应该将您的两行原始代码放在我的代码中的确切位置,我如何验证它是否正常工作?你能把你的代码行放在我的代码中吗?谢谢! var_dump 仅用于调试您的代码并验证其是否正常工作。两个答案的行应该放在$response = curl_exec($ch); 之后你看到var_dump 是什么? 这是我添加您的行时的代码:http://codeshare.io/u9aap 它给了我与原始问题中提到的相同的结果,但使用 bool(true) int(1) 在它之后。【参考方案2】:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

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

【讨论】:

以上是关于从响应 url 中提取令牌 - Spotify API的主要内容,如果未能解决你的问题,请参考以下文章

通过 Spotify API 获取封面艺术

Spotify Web Api 令牌请求响应 400

从soap xml响应中提取令牌

如何使用我的 spotify api 令牌?

Spotify 请求令牌返回 invalid_client

Spotify 刷新令牌 Python