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

PHP+CURL调用Google Search Console API认证配置求助

解决Google Search Console API认证问题(PHP+CURL)

核心说明

Google Search Console API不支持API Key认证,必须使用OAuth2凭证。你提到的本地私有Apache服务器场景,最适合用**服务账号(Service Account)**实现无用户交互的认证,完全替代需要用户手动授权的OAuth2流程。

前置准备步骤

  1. 给服务账号分配Search Console权限

    • 打开Google Search Console,进入目标站点管理页面
    • 点击「设置」→「用户和权限」→「添加用户」
    • 输入你拿到的服务账号邮箱(xxx@iam.gserviceaccount.com),至少分配「查看者」权限后保存
  2. 下载服务账号JSON密钥

    • 回到Google Cloud控制台,进入「IAM与管理」→「服务账号」
    • 找到目标服务账号,点击「密钥」→「添加密钥」→「创建新密钥」
    • 选择「JSON」格式,下载密钥文件,保存到Apache服务器的安全目录(禁止公开访问)

方案1:使用Google官方PHP客户端库(推荐)

官方库会自动处理令牌生成和刷新,无需手动编写复杂的CURL逻辑:

require __DIR__ . '/vendor/autoload.php';

// 初始化客户端
$client = new Google\Client();
$client->setAuthConfig('/path/to/your-service-account-key.json');
$client->addScope('https://www.googleapis.com/auth/webmasters.readonly');

// 初始化Search Console服务
$service = new Google\Service\Webmasters($client);

// 调用Search Analytics接口
$siteUrl = 'sites/example.com';
$request = new Google\Service\Webmasters\SearchAnalyticsQueryRequest();
$request->setStartDate('2024-01-01');
$request->setEndDate('2024-01-31');
$request->setDimensions(['date']);

$response = $service->searchanalytics->query($siteUrl, $request);
print_r($response);

方案2:原生CURL实现(手动生成JWT令牌)

如果不想依赖官方库,可手动生成JWT令牌并获取访问令牌:

步骤1:安装JWT依赖

使用Composer安装firebase/php-jwt:

composer require firebase/php-jwt

步骤2:PHP代码实现

use Firebase\JWT\JWT;

// 读取服务账号密钥文件
$keyPath = '/path/to/your-service-account-key.json';
$keyData = json_decode(file_get_contents($keyPath), true);

// 生成JWT令牌
$now = time();
$payload = [
    'iss' => $keyData['client_email'],
    'sub' => $keyData['client_email'],
    'aud' => 'https://oauth2.googleapis.com/token',
    'iat' => $now,
    'exp' => $now + 3600, // 令牌有效期1小时
    'scope' => 'https://www.googleapis.com/auth/webmasters.readonly'
];

$jwt = JWT::encode($payload, $keyData['private_key'], 'RS256');

// 获取访问令牌
$tokenUrl = 'https://oauth2.googleapis.com/token';
$postData = http_build_query([
    'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
    'assertion' => $jwt
]);

$ch = curl_init($tokenUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/x-www-form-urlencoded'
]);

$tokenResponse = json_decode(curl_exec($ch), true);
curl_close($ch);

if (!isset($tokenResponse['access_token'])) {
    die('获取令牌失败:' . print_r($tokenResponse, true));
}

$accessToken = $tokenResponse['access_token'];

// 调用Search Analytics接口
$apiUrl = 'https://www.googleapis.com/webmasters/v3/sites/example.com/searchAnalytics/query';
$queryData = json_encode([
    'startDate' => '2024-01-01',
    'endDate' => '2024-01-31',
    'dimensions' => ['date']
]);

$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $queryData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Authorization: Bearer ' . $accessToken
]);

$apiResponse = json_decode(curl_exec($ch), true);
curl_close($ch);

print_r($apiResponse);

关键注意事项

  • 服务账号必须被添加到Search Console的站点权限列表,否则会返回权限不足错误
  • 服务账号的JSON密钥文件要妥善保管,禁止泄露到公共环境
  • 访问令牌有效期为1小时,需在过期前重新生成(官方库会自动处理刷新)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:30:54