如何用Google API PHP实现Google Play游戏服务玩家ID验证?
PHP 实现 Google Play Games 玩家身份验证流程
现有代码的问题
你当前的代码用了useApplicationDefaultCredentials(),这是服务端无用户交互场景的凭据方案,适合后台任务调用API,但你的场景是处理玩家通过Unity获取的授权码,需要走OAuth2授权码兑换流程,所以这段代码方向不对。
正确实现步骤与代码
1. 准备凭据信息
确保你持有Google Cloud控制台创建的OAuth 2.0客户端ID和密钥(不是服务账号的secret.json,在「API和服务」→「凭据」菜单下创建),同时确认重定向URI和Unity端配置的一致。
2. 兑换授权码为访问令牌
Unity端拿到授权码后传给PHP后端,后端执行兑换逻辑:
require_once("google/vendor/autoload.php"); // 初始化客户端 $client = new Google_Client(); // 替换为你的OAuth客户端信息 $client->setClientId("你的OAuth客户端ID"); $client->setClientSecret("你的OAuth客户端密钥"); $client->setRedirectUri("配置的重定向URI"); $client->addScope('https://www.googleapis.com/auth/games'); // 从Unity接收的授权码 $authorizationCode = "Unity返回的授权码"; // 兑换授权码获取令牌 $token = $client->fetchAccessTokenWithAuthCode($authorizationCode); if (isset($token['error'])) { die("授权码兑换失败: " . $token['error']); } // 将令牌绑定到客户端 $client->setAccessToken($token);
3. 调用Verify接口获取玩家ID
拿到访问令牌后,调用接口提取玩家的Google Play ID:
// 初始化Games服务实例 $service = new Google_Service_Games($client); // 替换为你的Google Play Games应用ID $applicationId = "你的Games应用ID"; try { // 调用verify接口 $verifyResult = $service->applications->verify($applicationId); // 提取玩家ID $playerId = $verifyResult->getPlayerId(); echo "玩家Google Play ID: " . $playerId; } catch (Google_Service_Exception $e) { die("API调用失败: " . $e->getMessage()); } catch (Google_Exception $e) { die("客户端配置错误: " . $e->getMessage()); }
4. 关键注意事项
- 令牌有效期:访问令牌默认有效期1小时,若需长期访问,保存返回的
$token['refresh_token'],后续用$client->fetchAccessTokenWithRefreshToken($refreshToken)刷新令牌。 - 权限校验:确保Google Play Game Services API已启用,且作用域
https://www.googleapis.com/auth/games已在客户端配置中勾选。 - 安全要求:客户端密钥必须在后端保存,绝对不能暴露给前端。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

