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

PHP环境下如何通过OAuth协议连接Google My Business API获取商户全量评论

问题原因及修复方案

核心问题

  • 现有代码仅完成了Google客户端初始化,未实现OAuth2.0授权流程的完整逻辑:缺少跳转授权、接收授权码、换取访问令牌(access_token)的步骤,直接调用接口必然触发鉴权失败。
  • 多数同类调用失败案例都存在前置配置遗漏问题,常见为API启用不全、密钥类型不匹配、账号权限不足。

前置配置检查项

  • 登录Google Cloud控制台,确认已同时启用 Google My Business Account Management API 和 Google My Business Business Information API 两个API服务。
  • 确认你使用的google-my-business-secrets.json是OAuth 2.0 网页应用类型的客户端密钥,不是服务账号密钥,Google My Business API不支持服务账号无用户授权的调用方式。
  • 确认你后续用来完成授权的Google账号,已经被添加为目标商户的后台管理员。

修复后的完整代码示例

<?php
require __DIR__ . '/vendor/autoload.php'; // 确认你已通过composer安装google/apiclient扩展包

session_start(); // 必须开启session存储access_token

$credentials = get_stylesheet_directory() . '/allia-google-api/google-my-business-secrets.json';
$client = new Google\Client();
$client->setAuthConfig($credentials);
$client->addScope("https://www.googleapis.com/auth/business.manage");
$client->setAccessType('offline'); // 需要长期调用必须添加该参数获取refresh_token
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
$client->setRedirectUri($redirect_uri);

// 处理授权回调,换取access_token
if (isset($_GET['code'])) {
    $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
    $client->setAccessToken($token);
    // 存储token到session,同会话内后续调用无需重复授权
    $_SESSION['access_token'] = $token;
    // 重定向清除URL中的code参数,避免重复换取token报错
    header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
    exit;
}

// 检查session中是否存在有效token
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
    $client->setAccessToken($_SESSION['access_token']);
    $my_business_account = new Google_Service_MyBusinessAccountManagement($client);
    $list_accounts_response = $my_business_account->accounts->listAccounts();
    var_dump($list_accounts_response);

    // 拿到账户列表后,获取全量评论还需要继续执行以下步骤:
    // 1. 用返回的account_id调用locations.list接口获取对应商户的门店ID
    // 2. 用门店ID调用reviews.list接口即可拉取评论数据
} else {
    // 无有效token时跳转至Google授权页
    $auth_url = $client->createAuthUrl();
    header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
    exit;
}
?>

后续拉取全量评论注意事项

  • reviews.list接口单次最多返回100条评论,返回结果中携带nextPageToken时,需要将该参数带入下一次请求,直到返回结果无nextPageToken即可拉取到全部评论。
  • 如需长期自动拉取评论,可将首次授权获取的refresh_token持久化存储,access_token过期后用refresh_token自动换取新的有效令牌,无需重复手动授权。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:54:05