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

标签 php api curl oauth twitch

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

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 key 。我尝试将 $params 数组提交到 https://api.twitch.tv/kraken/,我读过该数组应该提供有关用户的顶级统计信息,但我得到的响应是您正在被重定向(“重定向”是指向 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 末尾。之后,它只是通过返回的数据来获取用户名。

关于php - 使用授权代码流 (php) 从 Twitch API 获取用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251377/

相关文章:

php - mysql 查询不起作用

php - 从 PHP 到 MYSQL 的复选框到数组的简单代码有什么问题?

php - 进行 cometd 聊天的最简单方法

c - 在 C 中安全重启 linux

c# - 检测用户是否输入假名的服务或策略?

javascript - 从 curl 到 jQuery 的 $.ajax() 函数

php - 如何从 PDO 获取最后插入的插入行 ID

javascript - 类型错误:mitsukuApi.send 不是函数

Shell 脚本——如何将带有变量的curl 命令结果存储到另一个变量中?

PHP Curl 脚本可在浏览器中运行,但不能作为 Cron 作业运行