You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级PHP版Google API Client后遇“Malformed Auth code”错误求助

排查Google API Client升级后"invalid grant, Malformed Auth code"错误

我之前升级PHP版Google API Client时也碰到过类似的授权问题,结合你的情况,咱们一步步来定位解决:

核心问题:Google+ API已废弃,范围配置错误

首先要敲重点:Google+相关的API早就完全废弃了,Google_Service_Oauth2::PLUS_LOGIN这个范围已经失效,这很可能是导致授权失败的核心原因。现在获取用户信息应该使用标准的OpenID Connect范围:

// 替换原来的PLUS_LOGIN,改用这些范围获取用户基本信息和邮箱
$client->addScope([Google_Service_Oauth2::OPENID, Google_Service_Oauth2::PROFILE, Google_Service_Oauth2::EMAIL]);

修正令牌处理的代码逻辑

你的代码里调用refreshToken的方式有问题,新版本的Google_Client中,refreshToken()方法需要传入refresh_token字符串,而不是整个token数组。而且授权码只能使用一次,重复调用也会触发"invalid grant"错误。修正后的代码如下:

if (!empty($gp_auth_code)) { 
    $client = new Google_Client(); 
    $client->setAuthConfig('<path to client.json file>'); 
    // 使用有效范围
    $client->addScope([Google_Service_Oauth2::OPENID, Google_Service_Oauth2::PROFILE, Google_Service_Oauth2::EMAIL]); 
    $client->setRedirectUri('<redirect URI>'); 
    
    // 获取访问令牌数组
    $token = $client->fetchAccessTokenWithAuthCode($gp_auth_code); 
    
    // 先检查是否有错误返回
    if (isset($token['error'])) {
        die('授权失败: ' . ($token['error_description'] ?? $token['error']));
    }
    
    $gp_access_token = $token['access_token']; 
    // 直接从token数组中提取refresh_token(如果存在)
    $gp_refresh_token = $token['refresh_token'] ?? null; 
    
    // 后续需要刷新令牌时,再调用refreshToken方法,传入refresh_token字符串
    // if ($gp_refresh_token) {
    //     $newTokenData = $client->refreshToken($gp_refresh_token);
    // }
} 

其他排查要点

  • 授权码有效性:确认$gp_auth_code没有被URL编码两次(比如前端传递时已编码,后端又重复解码/编码),且没有被重复使用(Google授权码仅单次有效)。
  • 客户端配置一致性:再次核对client.json中的client_id、client_secret,以及Google Cloud控制台中配置的重定向URI,确保和代码中的setRedirectUri完全一致(包括http/https、端口、路径)。
  • 版本适配:检查Composer安装的google/apiclient版本,不同大版本(比如2.x vs 3.x)的API细节有差异,建议查看对应版本的官方文档确认方法参数。
  • 日志排查:开启PHP错误日志,或者在代码中打印$token的完整内容,看是否有更详细的错误提示,帮助定位问题。

内容的提问来源于stack exchange,提问作者janedoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:46:13