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

PHP中通过Google Contacts API导入联系人失败问题排查

排查Google Contacts API突然失效的可能原因

结合你的代码和Google API的政策变化,从以下几个方向逐一排查:

  • 旧API端点已停用
    你使用的https://www.google.com/m8/feeds是Google Contacts API v3的端点,该API已于2023年9月宣布弃用,并在2024年6月正式停止服务。旧端点目前已无法返回有效数据,必须迁移到People API来获取联系人信息。

  • 权限范围冗余或废弃
    代码中添加了多个无效或冗余的权限范围:

    • userinfo.profile、userinfo.email这类旧范围已被OIDC标准的profile、email替代,无需重复添加;
    • gmail.labels与联系人获取完全无关,属于多余权限;
      若迁移到People API,需使用对应权限范围,比如https://www.googleapis.com/auth/contacts.readonly或https://www.googleapis.com/auth/contacts。
  • 访问令牌传递方式不符合规范
    你直接将access_token拼在URL的oauth_token参数中,这种传递方式已被Google API弃用。正确做法是在请求头中添加Authorization: Bearer {access_token},而非通过URL参数传递令牌。

  • 令牌有效性问题

    • 检查$_SESSION['access_token']中的令牌是否过期:access_token默认有效期仅1小时,若未实现refresh_token自动刷新逻辑,令牌过期后会直接导致请求失败;
    • 确认授权时是否设置了access_type=offline以获取refresh_token,否则无法刷新过期的access_token。
  • Google Cloud项目配置异常

    • 登录Google Cloud Console,确认项目已启用People API(旧Contacts API已无法使用);
    • 检查OAuth consent screen状态:若为测试状态,测试用户数量有限且令牌有效期受限;若已发布,需确认权限是否通过Google审核。
  • 缺少错误排查逻辑
    代码中file_get_contents($surl)未做任何错误处理,无法获取具体报错信息。建议添加错误捕获逻辑,示例如下:

    $context = stream_context_create([
        'http' => [
            'header' => "Authorization: Bearer " . $_SESSION['access_token']['access_token']
        ]
    ]);
    $response = file_get_contents($contactUrl, false, $context);
    if ($response === false) {
        $error = error_get_last();
        var_dump($error); // 打印具体错误信息,快速定位问题
    } else {
        // 处理响应数据
    }
    

    通过HTTP状态码(如401/403/404)和错误描述,能直接定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:15:37