Zitat von
Llapp
wie man die steam api für die verifizierung nutzen kann. stehe da grad voll auf dem schlauch und die dokumentation von steam is voll fürn arsch.
Guck mal dort: http://steamcommunity.com/dev
- Über OpenID das Einloggen bei Steam vornehmen(genug Doku gibt es dazu im Netz)
- Du erhältst vom OpenID Provider die eingeloggte Steam-ID(64bit länge) des Benutzers
- Über die Web-Api fragst du per xml die Daten der Steam-ID ab
Beispiel:
Benötigt die Klasse: http://gitorious.org/lightopenid
Einloggen an der Steamcommunity:
PHP-Code:
//Dateiname: steamlogin.php
<?php
# Logging2Steamcommunity.com
# By gurken.gmod.de create @ 18.07.2010
# Das ganze ist überhaupt nicht perfekt!
require 'openid.php';
try {
if(!isset($_GET['openid_mode'])) {
if(isset($_GET['login'])) {
$openid = new LightOpenID;
$openid->identity = 'http://steamcommunity.com/openid'; //Provider einstellen, hier brauchen wir http://steamcommunity.com/openid
header('Location: ' . $openid->authUrl());
}
?>
<form action="?login" method="post">
<button>Login with Steam</button>
</form>
<?php
} elseif($_GET['openid_mode'] == 'cancel') {
echo 'User has canceled authentication!';
} else {
$openid = new LightOpenID;
echo 'User ' . ($openid->validate() ? $openid->identity . ' has ' : 'has not ') . 'logged in.';
$steamlink = $openid->identity;
//steamlink beinhaltet: http://steamcommunity.com/openid/id/steamID64
//nicht benötige Elemente aus String entfernen wir wollen nur die steamID64
$delete = "http://steamcommunity.com/openid/id/";
$replace = '';
$steamid64 = str_replace($delete, $replace, $steamlink);
//$steamid64 ist die 64 Bit lange Steam-ID
echo'<br/><br/>Spieleliste lautet:<br/>';
echo 'http://steamcommunity.com/profiles/'.$steamid64.'/games?xml=1<br/>';
//da kein fopen aktiviert ist muss ich den "Umweg über cURL gehen
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://steamcommunity.com/profiles/'.$steamid64.'/games?xml=1');
curl_setopt($ch, CURLOPT_HEADER, 0);
// damit der String in die Variable geht, anstatt in die Browserausgabe
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_inhalt = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($xml_inhalt);
echo '<br/>Testauslesung aus XML (STEAM-ID):<br/>';
echo $xml->steamID64;
echo '<br/>';
echo '<br/>';
echo 'Hat der Benutzer GMod?:<br/>';
foreach($xml->xpath('//appID') as $appids){
if ($appids == '4000'){
echo '<br/>Ja der Benutzer hat GMOD';
}
}
}
$steamid64 = NULL;
} catch(ErrorException $e) {
echo $e->getMessage();
}
Überprüfen der Spieleliste:
PHP-Code:
<?
//Dateiname: xml.php
echo'steamid:<br/>';
echo 'http://steamcommunity.com/profiles/'.$steamid64.'/games?xml=1';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://steamcommunity.com/profiles/'.$steamid64.'/games?xml=1');
curl_setopt($ch, CURLOPT_HEADER, 0);
// damit der String in die Variable geht, anstatt in die Browserausgabe
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_inhalt = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($xml_inhalt);
echo '<br/>';
echo $xml->steamID64;
foreach($xml->xpath('//appID') as $appids){
if ($appids == '4000'){
echo '<br/>du hast GMOD';
}
}
?>
Das ganze ist mehr als "Proof of Concept" zu betrachten. Ich habe es damals innerhalb von 4 Stunden zusammengeschrieben.
Heute würde ich wohl anders an die Sache gehen.