我有同样的问题,不知道是否能帮到你,但我编写了一些方法来获取用户的steamID,然后你可以使用它来获取用户信息,具体方法请参考
this method。我只是在了解如何使用PHP的情况下完成了这个任务,这就是为什么我想在js上重新编写它的原因。
1)构建链接的方法
const http_build_query = (obj) => {
let str = ""
for (const key in obj) {
const value = obj[key];
str += `${key}=${value}&`;
}
return str;
}
2)返回链接的方法,您可以使用该链接进行Steam登录(也可以在其中使用)。
const genUrl = (urlToReturnTo) => {
const params = {
'openid.ns' : 'http://specs.openid.net/auth/2.0',
'openid.mode' : 'checkid_setup',
'openid.return_to' : urlToReturnTo,
'openid.realm' : 'http://localhost:8080',
'openid.identity' : 'http://specs.openid.net/auth/2.0/identifier_select',
'openid.claimed_id' : 'http://specs.openid.net/auth/2.0/identifier_select',
};
const url = `${STEAM_LOGIN}?${http_build_query(params)}`
return url;
};
在 genUrl 方法中,您需要将要重定向到的 url 作为参数传递。如果登录成功,您将被重定向到该 url,并且 url 中将有一些参数,它看起来像 "
http://yoururl?here_is_params",您需要从 url 中获取一些参数 [here_is_params],我使用了以下方法:
const search = location.search.substring(1);
const urlObj = JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
那么在此之后,您将拥有一个带有查询参数的对象。
3)现在您只需要从此对象中获取steamID:
const getUserId = (response) =>
{
const str = response["openid.claimed_id"];
const res = decodeURIComponent(str)
const propsArr = res.split("\/");
console.log(propsArr);
return propsArr[propsArr.length-1];
}
const userId = getUserId(urlObj)
4) 现在你有了userId,你只需要使用fetch或axios发送请求即可。它会返回一个JSON对象,其中包含用户数据
http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={apiKey}&steamids=${userId}