Steam APIauthentication

在我开始之前,让我说我对OpenID一无所知。 我甚至不想做OpenID的用途,但我想人们会提到它,但那不是我正在寻找的。

我有软件。 该软件要求用户在注册时提供他们的Steam用户名。 他们没有通过Steamlogin,只是提供他们的用户名,以便其他人知道他们的蒸汽用户名。 所以不需要OpenID。

我知道,我可以简单地添加一个文本字段,让他们列出他们的Steam用户名,并称之为一天。 但是,这样做,人们可以input几乎任何他们想要的蒸汽用户名和完成。 我反而想能够确认他们的用户名。

理想情况下,会有一个“validation蒸汽帐户”button。 人们点击它,它会popup一个Steamlogin表单。 人们login,然后蒸汽返回他们的用户名(也许一些额外的数据,如他们的头像)。 什么是最好的方法来做到这一点?

需要OpenID。 这是Valve根据他们的文档使用的方法。

你没有提到你的应用程序是怎么写的,所以我只能猜测你是通过网页来做的。 在这种情况下,我build议使用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/publichttp://img.dovov.comsigninthroughsteam/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(); } ?> 

使用这个,它会向用户显示一个SteamloginIDbutton。 点击后,会将用户redirect到Steam社区login页面。 login后,用户将redirect回您的页面,即您在LightOpenID构造函数中设置的LightOpenID 。 如果用户已经被validation,它将从返回的值中提取唯一的玩家ID。 返回值看起来像http://steamcommunity.com/openid/id/76561197960435530 ,你只需要76561197960435530部分。

此时你可以查询Steam获取玩家信息。 在提供的样本中,查询用户并显示基本玩家信息。

Interesting Posts