2013-09-07 8 views
18

शुरू करने से पहले, मुझे बताएं कि मुझे ओपनआईडी के बारे में बिल्कुल कुछ नहीं पता है। मैं ओपनआईडी का उपयोग करने के लिए भी नहीं करना चाहता हूं, लेकिन मुझे लगता है कि लोग इसका जिक्र करेंगे, लेकिन यह वह नहीं है जिसे मैं ढूंढ रहा हूं।स्टीम एपीआई प्रमाणीकरण

मेरे पास सॉफ्टवेयर है। उस सॉफ़्टवेयर को उपयोगकर्ताओं को पंजीकरण करते समय अपने स्टीम उपयोगकर्ता नाम प्रदान करने की आवश्यकता होती है। वे स्टीम के माध्यम से साइन इन नहीं कर रहे हैं, सिर्फ अपना उपयोगकर्ता नाम प्रदान करते हैं ताकि अन्य लोग अपने भाप उपयोगकर्ता नाम जान सकें। तो ओपनआईडी की कोई ज़रूरत नहीं है।

मुझे पता है, मैं बस एक टेक्स्ट फ़ील्ड जोड़ सकता हूं और उन्हें अपने स्टीम उपयोगकर्ता नाम सूचीबद्ध कर सकता हूं और इसे एक दिन कॉल कर सकता हूं। हालांकि, ऐसा करने से, लोग अपने इच्छित स्टीम उपयोगकर्ता नाम को बहुत अधिक इनपुट कर सकते हैं और किया जा सकता है। मैं इसके बजाय अपने उपयोगकर्ता नामों की पुष्टि करने में सक्षम होना चाहूंगा।

आदर्श रूप से, एक "प्रमाणित भाप खाता" बटन होगा। लोग इसे क्लिक करते हैं, और यह स्टीम लॉगिन फॉर्म लाता है। लोग लॉगिन करते हैं, और फिर स्टीम अपना उपयोगकर्ता नाम (और शायद कुछ अतिरिक्त डेटा, जैसे उनके अवतार) देता है। क्या सबसे अच्छा तरीका होगा यह करने का?

उत्तर

35

ओपनआईडी की आवश्यकता है। यही तरीका है कि वाल्व उनके 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(); 
} 
?> 

इसका उपयोग करके, यह उपयोगकर्ता स्टीम लॉगिन आईडी बटन के साथ प्रस्तुत करेगा। जब इसे क्लिक किया जाता है तो यह उपयोगकर्ता को स्टीम कम्युनिटी लॉगिन पेज पर रीडायरेक्ट करेगा। लॉगिन करने के बाद, उपयोगकर्ता आपके पृष्ठ पर वापस रीडायरेक्ट किया जाता है, जिसे आपने LightOpenID कन्स्ट्रक्टर पर सेट किया है। यदि उपयोगकर्ता को सत्यापित किया गया है, तो यह लौटा मूल्य से अद्वितीय प्लेयर आईडी खींच जाएगा। वह लौटा मूल्य http://steamcommunity.com/openid/id/76561197960435530 जैसा दिखता है, और आपको केवल 76561197960435530 भाग की आवश्यकता है।

इस बिंदु पर आप स्टीम से प्लेयर की जानकारी प्राप्त करने के लिए पूछ सकते हैं। प्रदान किए गए नमूने में, उपयोगकर्ता पूछताछ की जाती है और मूल खिलाड़ी की जानकारी प्रदर्शित होती है।

+1

>> एंड्रॉइड में ओपनआईडी लॉगिन को लागू करने का कोई तरीका है? >> यदि नहीं, तो क्या उपयोगकर्ता को स्टीम लॉगिन करने की अनुमति देने के लिए वैसे भी है? –

+2

अब यह गलत है, "ओपनआईडी प्रोटोकॉल को ओपनआईडी फाउंडेशन द्वारा अप्रचलित कर दिया गया था, इसलिए यह लाइब्रेरी अप्रचलित है, और इस तरह, अब और नहीं है।" https://code.google.com/p/lightopenid/ – Lobato

+0

आप यहां से LightOpenID लाइब्रेरी डाउनलोड कर सकते हैं https://github.com/iignatov/LightOpenID –

संबंधित मुद्दे