2013-09-07 17 views
18

私が始める前に、OpenIDについては何も知りません。私はOpenIDが使用されているものをしたいとは思っていませんが、人々がそれを言及するだろうと思っていますが、それは私が探しているものではありません。Steam API認証

私はソフトウェアを持っています。そのソフトウェアを使用するには、登録時にSteam Usernameを提供する必要があります。彼らはSteamを通じてサインオンしていません。ユーザー名を入力するだけで、他のユーザーが自分のスチームユーザー名を知ることができます。したがって、OpenIDの必要はありません。

私は単にテキストフィールドを追加し、Steamのユーザー名を列挙してそれを1日と呼びます。しかし、これを行うと、人々は彼らが望み、やることができる蒸気のユーザ名をほとんど入力することができます。代わりにユーザー名を確認できるようにしたいと思います。

理想的には、「蒸気口座の認証」ボタンがあります。人々がそれをクリックすると、Steamのログインフォームが表示されます。人はログインしてから、ユーザー名を返します(そして、アバターのような余分なデータかもしれません)。これを行う最善の方法は何でしょうか?

答えて

35

OpenIDが必要です。これは、バルブがdocumentationに従って使用する方法です。

あなたのアプリケーションが書かれていることは言及していないので、私はあなたがウェブページを介してこれをやっていると推測できます。その場合は、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 Login ID]ボタンが表示されます。クリックすると、ユーザーはSteam Communityログインページにリダイレクトされます。ユーザーがログインすると、LightOpenIDコンストラクターで設定したページにリダイレクトされます。ユーザーが検証されている場合は、戻り値から一意のプレーヤーIDが取得されます。戻り値はhttp://steamcommunity.com/openid/id/76561197960435530のようになり、76561197960435530部分だけが必要です。

この時点で、Steamに問い合わせてプレーヤー情報を取得できます。提供されたサンプルでは、​​ユーザーに照会され、基本プレーヤー情報が表示されます。

+1

>>アンドロイドにopenIDログインを実装する方法はありますか? >>そうでない場合は、ユーザーがログインできるようにしていますか? –

+2

これは間違っています。「OpenIDプロトコルはOpenID Foundationによって廃止されたので、このライブラリも廃止されており、これ以上使用することはできません。 https://code.google.com/p/lightopenid/ – Lobato

+0

LightOpenIDライブラリはhttps://github.com/iignatov/LightOpenIDからダウンロードできます –