Подтвердить что ты не робот

Аутентификация API Steam

Прежде чем начать, позвольте мне сказать, что я абсолютно ничего не знаю о OpenID. Я даже не хочу делать то, для чего используется OpenID, но я думаю, что люди это упомянули, но это не то, что я ищу.

У меня есть программное обеспечение. Это программное обеспечение требует от пользователей предоставления имени пользователя Steam при регистрации. Они не подписываются через Steam, просто указывая свое имя пользователя, чтобы другие знали свое паровое имя пользователя. Таким образом, нет необходимости в OpenID.

Я знаю, я просто могу просто добавить текстовое поле и указать им имя своего Steam и назвать его днем. Однако, делая это, люди могут вводить почти любое имя пользователя, которое они хотят, и делать. Вместо этого я хотел бы подтвердить свои имена пользователей.

В идеале, есть кнопка аутентификации парового счета. Люди нажимают на нее, и она вызывает форму входа в Steam. Люди регистрируются, а затем steam возвращает свое имя пользователя (и, возможно, некоторые дополнительные данные, например, их аватар). Какой был бы лучший способ сделать это?

4b9b3361

Ответ 1

Существует необходимость в OpenID. То, что Valve использует в соответствии с их документацией.

Вы не указываете, что написано в вашем приложении, поэтому я могу только предположить, что вы делаете это через веб-страницу. В этом случае я рекомендую использовать библиотеку LightOpenID. Оттуда этот образец кода должен быть в состоянии начать работу.

<?php
require 'includes/lightopenid/openid.php';
$_STEAMAPI = "YOURSTEAMAPIKEY";
try 
{
    $openid = new LightOpenID('http://URL.TO.REDIRECT.TO.AFTER.LOGIN/');
    if(!$openid->mode) 
    {
        if(isset($_GET['login'])) 
        {
            $openid->identity = 'http://steamcommunity.com/openid/?l=english';    // This is forcing english because it has a weird habit of selecting a random language otherwise
            header('Location: ' . $openid->authUrl());
        }
?>
<form action="?login" method="post">
    <input type="image" src="http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_small.png">
</form>
<?php
    } 
    elseif($openid->mode == 'cancel') 
    {
        echo 'User has canceled authentication!';
    } 
    else 
    {
        if($openid->validate()) 
        {
                $id = $openid->identity;
                // identity is something like: http://steamcommunity.com/openid/id/76561197960435530
                // we only care about the unique account ID at the end of the URL.
                $ptn = "/^http:\/\/steamcommunity\.com\/openid\/id\/(7[0-9]{15,25}+)$/";
                preg_match($ptn, $id, $matches);
                echo "User is logged in (steamID: $matches[1])\n";

                $url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=$_STEAMAPI&steamids=$matches[1]";
                $json_object= file_get_contents($url);
                $json_decoded = json_decode($json_object);

                foreach ($json_decoded->response->players as $player)
                {
                    echo "
                    <br/>Player ID: $player->steamid
                    <br/>Player Name: $player->personaname
                    <br/>Profile URL: $player->profileurl
                    <br/>SmallAvatar: <img src='$player->avatar'/> 
                    <br/>MediumAvatar: <img src='$player->avatarmedium'/> 
                    <br/>LargeAvatar: <img src='$player->avatarfull'/> 
                    ";
                }

        } 
        else 
        {
                echo "User is not logged in.\n";
        }
    }
} 
catch(ErrorException $e) 
{
    echo $e->getMessage();
}
?>

Используя это, он представит пользователю кнопку входа в Steam. Когда он будет нажат, он перенаправит пользователя на страницу входа в Community Steam. После входа в систему пользователь перенаправляет обратно на вашу страницу, которую вы устанавливаете в конструкторе LightOpenID. Если пользователь был проверен, он вытащит уникальный идентификатор игрока из возвращаемого значения. Это возвращаемое значение выглядит как http://steamcommunity.com/openid/id/76561197960435530, и вам нужна только часть 76561197960435530.

На этом этапе вы можете запросить Steam, чтобы получить информацию о игроке. В предоставленном примере пользователь запрашивается и отображается основная информация игрока.