使用授权代码流(php)从Twitch API获取用户名


Get username from Twitch API using Authorization Code Flow (php)

我正在使用Twitch API制作一个程序,该程序涉及获取用户的用户名和OAuth令牌。目前我的网站有一个"与Twitch连接"按钮,这将允许用户登录Twitch并返回一个访问令牌(作为对我的URL的GET请求),我可以用它来联系API并获得一个OAuth令牌。这是我对这部分的代码:

if ($_SERVER['REQUEST_METHOD'] == "GET") {
    if (isset($_GET['code']) && !empty($_GET['code'])) {
        $code = $_GET['code'];
        //Getting OAuth
        $params = array(
            'client_id' => 'my_client_id',
            'client_secret' => 'my_client_secret',
            'grant_type' => 'authorization_code',
            'redirect_uri' => 'http://mytwitchapp.com/register.php', //Not my actual url
            'code' => $code
        );
        $oauthResult = post_url_contents("https://api.twitch.tv/kraken/oauth2/token", $params);
        $json_decoded_oauthResult = json_decode($oauthResult, true);
        $oauth = $json_decoded_oauthResult['access_token'];

    }
}
这是我使用的post_url_contents()函数:
function post_url_contents($url, $fields) {
    $fields_string = '';
    foreach($fields as $key=>$value) { $fields_string .= $key.'='.urlencode($value).'&'; }
    rtrim($fields_string, '&');
    $ch = curl_init();
    $timeout = 60;
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST, count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    //SSL certificates
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cert/DigiCertGlobalRootCA.crt");
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

上面的代码可以很好地获取OAuth密钥。我试过提交$params数组到https://api.twitch.tv/kraken/,我读过应该提供关于用户的顶级统计数据,但我得到的响应是You are being redirected("重定向"是一个超链接到http://twitch.tv/kraken)。

任何帮助都非常感谢!

经过一番折腾,我终于知道怎么做了(结果很简单)。

在第一个代码片段的代码下面,我有以下内容:

//Getting username
$usernameResult = file_get_contents("https://api.twitch.tv/kraken?oauth_token=" . $oauth);
$json_decoded_usernameResult = json_decode($usernameResult, true);
echo $username = $json_decoded_usernameResult['token']['user_name'];

由于我只需要将此信息作为GET方法而不是POST发送,因此我可以使用file_get_contents()并将OAuth密钥附加到URL的末尾。之后,它只是通过返回的数据来获取用户名。