Reputation: 362
I'm trying to create a website with Steam's login, but when I try to call a value from JSON, it doesn't work. Everything works in the source code, except for getting the JSON value. I've even tried printing the steam ID, so I know that ID works. The URL works also.
Here's my source code:
<?php
require 'openid.php';
try {
$openid = new LightOpenID('workinganonymouswebsite.com');
if (!$openid->mode) {
$openid->identity = 'http://steamcommunity.com/openid';
header('Location: ' . $openid->authUrl());
} elseif ($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
$steamurl = ($openid->validate() ? $openid->identity . '' : 'error');
if ($steamurl == 'error') {
print "There was an error signing in.";
} else {
$id = end(explode('/', $steamurl));
$jsonurl = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXX&steamids=" . $id . "&format=json";
$json = file_get_contents($jsonurl, 0, null, null);
$json_output = json_decode($json);
echo $json_output['players']['personaname'];
}
}
} catch (ErrorException $e) {
echo $e->getMessage();
}
?>
Here's the JSON on the website.
{
"response": {
"players": [
{
"steamid": "76561198049205920",
"communityvisibilitystate": 3,
"profilestate": 1,
"personaname": "baseman101",
"lastlogoff": 1357603378,
"profileurl": "http://steamcommunity.com/id/baseman101/",
"avatar": "http://media.steampowered.com/steamcommunity/public/images/avatars/24/24bb7c0505db7efe1f1a602d09a5ea412e0ab4bd.jpg",
"avatarmedium": "http://media.steampowered.com/steamcommunity/public/images/avatars/24/24bb7c0505db7efe1f1a602d09a5ea412e0ab4bd_medium.jpg",
"avatarfull": "http://media.steampowered.com/steamcommunity/public/images/avatars/24/24bb7c0505db7efe1f1a602d09a5ea412e0ab4bd_full.jpg",
"personastate": 1,
"primaryclanid": "103582791429521408",
"timecreated": 1316469294,
"loccountrycode": "US",
"locstatecode": "VA",
"loccityid": 3918
}
]
}
}
I've tried googling everything. I'm sorry if there is something I missed.
Upvotes: 0
Views: 1047
Reputation: 362
Thanks for all of your help. I basically put the JSON code in a variable, retrieving it from the Steam website. This is the best solution and I'm sticking to it.
<?php
require 'openid.php';
try {
$openid = new LightOpenID('blah.com');
if (!$openid->mode) {
$openid->identity = 'http://steamcommunity.com/openid';
header('Location: ' . $openid->authUrl());
} elseif ($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
$steamurl = ($openid->validate() ? $openid->identity . '' : 'error');
if ($steamurl == 'error') {
print "There was an error signing in.";
} else {
$id = end(explode('/', $steamurl));
$context = stream_context_create(array('http' => array('header'=>'Connection: close\r\n')));
$json_source = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXXX&steamids=" . $id . "&format=json",false,$context);
$json_output = json_decode($json_source,true);
$json_output->response->players[0]->personaname;
echo $json_output["response"]["players"][0]["personaname"];
}
}
} catch (ErrorException $e) {
echo $e->getMessage();
}
?>
Thank you, Passerby and hakre for the help.
In the future, I have to create cookies, and all of the easy stuff. I'm actually starting that right now.
Upvotes: 1