openid - dev - api steam
Autenticación API Steam (1)
Antes de comenzar, permítame decir que no sé absolutamente nada acerca de OpenID. Ni siquiera quiero hacer para qué se utiliza OpenID, pero imagino que la gente lo mencionará, pero eso no es lo que estoy buscando.
Tengo software Ese software requiere que los usuarios proporcionen su nombre de usuario de Steam cuando se registran. No se registran a través de Steam, solo proporcionan su nombre de usuario para que otros conozcan su nombre de usuario de Steam. Así que no hay necesidad de OpenID.
Lo sé, simplemente puedo agregar un campo de texto y hacer que enumeren su nombre de usuario de Steam y lo llamen un día. Sin embargo, al hacer esto, las personas pueden ingresar casi cualquier nombre de usuario de Steam que quieran y se hagan. En cambio, me gustaría poder confirmar sus nombres de usuario.
Idealmente, habría un botón de "autenticar cuenta de Steam". La gente hace clic en él y aparece un formulario de inicio de sesión de Steam. Las personas inician sesión y, a continuación, Steam devuelve su nombre de usuario (y quizás algunos datos adicionales, como su avatar). Cuál sería la mejor forma de hacer esto?
Hay una necesidad de OpenID. Ese es el método que utiliza Valve según su documentation .
No menciona en qué está escrita su solicitud, así que solo puedo suponer que lo está haciendo a través de una página web. En ese caso, recomiendo usar la biblioteca LightOpenID . A partir de ahí, este código de ejemplo debería poder comenzar.
<?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();
}
?>
Usando esto, presentará al usuario un botón de identificación de inicio de sesión de Steam. Cuando se haga clic en él, se redirigirá al usuario a la página de inicio de sesión de Steam Community. Después de iniciar sesión, el usuario vuelve a redirigir a su página, que configuró en el constructor LightOpenID
. Si el usuario ha sido validado, extraerá el ID de jugador único del valor devuelto. El valor devuelto se parece a http://steamcommunity.com/openid/id/76561197960435530
, y solo necesita la parte 76561197960435530
.
En este punto, puedes consultar a Steam para obtener información del jugador. En la muestra proporcionada, se consulta al usuario y se muestra información básica del jugador.