从响应 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的主要内容,如果未能解决你的问题,请参考以下文章