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

调用Google Analytics API添加用户报403 PERMISSION_DENIED错误如何解决

你遇到的403 PERMISSION_DENIED错误是因为请求使用的Access Token未携带GA用户管理接口所需的授权范围,结合你提供的代码,按以下步骤修复即可:

  • 修正Scope的添加时机
    你现在把$google_client->addScope('https://www.googleapis.com/auth/analytics.manage.users');放在了curl请求初始化之后,这是错误的。Scope必须在生成Access Token之前声明,你需要把这行代码移动到你调用$google_client->fetchAccessTokenWithAuthCode或者其他获取Access Token逻辑的前面。
    如果之前已经完成过授权,需要清除本地存储的旧Access Token和Refresh Token,重新走OAuth授权流程,确保新生成的Token已经包含用户管理权限。
  • 确认授权账号的GA权限
    你用来发起OAuth授权的Google账号,必须是目标GA账号(ID:203453755)的管理员,且具备用户管理权限,否则即便Scope正确也会触发权限不足报错。
  • 修正代码语法和冗余参数
    • 你当前代码中CURLOPT_URL配置行末尾缺少闭合单引号,Authorization请求头配置行末尾也缺少闭合单引号,先修复这两个语法错误。
    • GA用户管理接口不需要传递API Key参数,删除URL末尾的?key=[api key]即可,仅靠Bearer Token就能完成身份校验。

修正后参考代码

<?php
include('config.php');

// 注意:addScope要放在获取Access Token之前
$google_client->addScope('https://www.googleapis.com/auth/analytics.manage.users');
// 这里保留你原有生成Access Token的逻辑,确保拿到的是带对应Scope的新Token
$access_token = $google_client->getAccessToken();

$ch = curl_init();
// 移除多余的key参数
curl_setopt($ch, CURLOPT_URL, 'https://analytics.googleapis.com/analytics/v3/management/accounts/203453755/entityUserLinks');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"id\":\"id:mailId\",\"kind\":\"analytics#entityUserLink\",\"selfLink\":\"https://www.googleapis.com/analytics/v3/management/accounts/id/entityUserLinks/id:mailId\",\"entity\":{\"accountRef\":{\"id\":\"id\",\"kind\":\"analytics#accountRef\",\"href\":\"https://www.googleapis.com/analytics/v3/management/accounts/id\",\"name\":\"abir test\"},\"webPropertyRef\":{\"id\":\"UA-webproperty\",\"kind\":\"analytics#webPropertyRef\",\"href\":\"https://www.googleapis.com/analytics/v3/management/accounts/id\",\"accountId\":\"id\",\"internalWebPropertyId\":\"id\",\"name\":\"malta\"},\"profileRef\":{\"id\":\"id\",\"kind\":\"analytics#profileRef\",\"href\":\"https://www.googleapis.com/analytics/v3/management/accounts/id\",\"accountId\":\"accountId\",\"webPropertyId\":\"UA-webproperty\",\"internalWebPropertyId\":\"id\",\"name\":\"All Web Site Data\"}},\"userRef\":{\"kind\":\"analytics#userRef\",\"id\":\"userEmailId\",\"email\":\"usermail@gmail.com\"},\"permissions\":{\"effective\":[\"READ_AND_ANALYZE\"],\"local\":[\"READ_AND_ANALYZE\"]}}");
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');

$headers = array();
// 补充闭合单引号,替换为实际拿到的Access Token
$headers[] = 'Authorization: Bearer ' . $access_token['access_token'];
$headers[] = 'Accept: application/json';
$headers[] = 'Content-Type: application/json';

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
echo '<pre>';
var_dump($result,true);
curl_close($ch);
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:06:04