Steam-авторизация

Temlik

Участник
Сообщения
668
Реакции
174
Подскажите, пожалуйста, как сделать на сайте авторизацию через Steam? Искал - везде какой-то бред
 
Решение
PHP:
<?php
    session_start();

    try {
        // https://github.com/iignatov/LightOpenID
        require 'openid.php';

        $openid = new LightOpenID($_SERVER['SERVER_NAME']);

        if (!$openid->mode) {
            $openid->identity = 'https://steamcommunity.com/openid';
            header('Location: ' . $openid->authUrl());
        } else if ($openid->validate()) {
            $steamid = $openid->identity;
            $ptn = '/\d{17}/';
            preg_match($ptn, $steamid, $matches);
            $_SESSION['steamid'] = $matches[0];
            header('Location: https://' . $_SERVER['SERVER_NAME']);
        }
    } catch (Exception $error) {
        echo $error;
    }
?>

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
Что-то у меня 5 сек. страница грузится. Может из-за того, что на локалке? На хосте норм всё будет?
У меня этот код не вызывает никаких проблем, это обычный парсер жсона.
Смотря что ты там дополнительно еще дописал из кода, если только этот код - то странно.
 

Temlik

Участник
Сообщения
668
Реакции
174
У меня этот код не вызывает никаких проблем, это обычный парсер жсона.
Смотря что ты там дополнительно еще дописал из кода, если только этот код - то странно.
PHP:
$SteamID = $elem["authid"];
$CommunityID = "76561197960265728";
$parts = explode(":", $SteamID);
$steamY = intval($parts[1]);
$steamZ = intval($parts[2]);
$CommunityID = gmp_strval(gmp_add($CommunityID, ($steamZ * 2) + $steamY));
$player = "https://steamcommunity.com/profiles/".$CommunityID;
$json_object = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamids=".$player);
$json_decoded = json_decode($json_object, true);
echo "Result: ".$json_decoded['response']['players'][0]['steamid'];
Именно из-за JSON начинает долго грузиться. Когда убираешь - всё норм
 

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@Temlik, Наверно потому что параметр который ты передаешь в steamids не является валидным? но принимает только числовые значения, ты туда ссылку на профиль передаешь. В твоем случае передавать туда нужно $CommunityID

$json_object = file_get_contents("api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamids=".$player);
 

Temlik

Участник
Сообщения
668
Реакции
174
@Temlik, Наверно потому что параметр который ты передаешь в steamids не является валидным? но принимает только числовые значения, ты туда ссылку на профиль передаешь. В твоем случае передавать туда нужно $CommunityID

$json_object = file_get_contents("api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamids=".$player);
Сделал &steamids=".$CommunityID - также
 

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@Temlik, делай отладку, смотри че отдает $CommunityID
Сообщения автоматически склеены:

@Temlik, У меня твой код работает
1632685927910.png

Смотри че отдает $elem["authid"];
 

Temlik

Участник
Сообщения
668
Реакции
174

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@Temlik, Так в чем проблема то у тебя? жсон не отдает ничего, или сайт долго грузится? в любом случае это какие-то локальные у тебя проблемы. У меня все корректно отображается.
 

Temlik

Участник
Сообщения
668
Реакции
174
@Temlik, Так в чем проблема то у тебя? жсон не отдает ничего, или сайт долго грузится? в любом случае это какие-то локальные у тебя проблемы. У меня все корректно отображается.
Сайт долго грузится, значит из-за локалки
Сообщения автоматически склеены:

Как мне получить ник игрока по Steam ID? ($json_decoded->response->players->personaname не работает)
 
Последнее редактирование:

Сергей68

Неуместный юмор
Сообщения
420
Реакции
377
@Temlik, смотря каким методом ты получить хочешь.

C-подобный:
echo $json_decoded['response']['players'][0]['personaname'];

или

C-подобный:
foreach ($json_decoded->response->players as $player) echo $player->personaname;

1632687559969.png


JSON:
{
    "response": {
        "players": [
            {
                "steamid": "76561197986458718",
                "communityvisibilitystate": 1,
                "profilestate": 1,
                "personaname": "MacH",
                "commentpermission": 2,
                "profileurl": "https:\/\/steamcommunity.com\/id\/0\/",
                "avatar": "https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/avatars\/4e\/4ed6084cc0634e5c30f390ccdaf45e9c98ef0950.jpg",
                "avatarmedium": "https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/avatars\/4e\/4ed6084cc0634e5c30f390ccdaf45e9c98ef0950_medium.jpg",
                "avatarfull": "https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/avatars\/4e\/4ed6084cc0634e5c30f390ccdaf45e9c98ef0950_full.jpg",
                "avatarhash": "4ed6084cc0634e5c30f390ccdaf45e9c98ef0950",
                "personastate": 0
            }
        ]
    }
}
 

Temlik

Участник
Сообщения
668
Реакции
174
PHP:
<?php
    session_start();

    try {
        // https://github.com/iignatov/LightOpenID
        require 'openid.php';

        $openid = new LightOpenID($_SERVER['SERVER_NAME']);

        if (!$openid->mode) {
            $openid->identity = 'https://steamcommunity.com/openid';
            header('Location: ' . $openid->authUrl());
        } else if ($openid->validate()) {
            $steamid = $openid->identity;
            $ptn = '/\d{17}/';
            preg_match($ptn, $steamid, $matches);
            $_SESSION['steamid'] = $matches[0];
            header('Location: https://' . $_SERVER['SERVER_NAME']);
        }
    } catch (Exception $error) {
        echo $error;
    }
?>
 
Последнее редактирование:
Решение
Сверху Снизу