【问题标题】:Extract token from response url - Spotify API从响应 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 的请求中,它需要标头字段中的令牌。

谢谢!

【问题讨论】:

    标签: php api curl token spotify


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2017-11-22
      • 2018-01-31
      • 2021-12-10
      • 2021-07-29
      • 1970-01-01
      • 2018-01-08
      • 2012-10-27
      • 2021-10-11
      • 2018-12-30
      相关资源
      最近更新 更多