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

如何解决Google Classroom API更新学生成绩时的ProjectPermissionDenied错误

Google Classroom API更新成绩403 ProjectPermissionDenied错误解决方法

你遇到的两次报错都是同一个权限问题,按照以下步骤逐一排查即可解决:

  • 检查OAuth授权范围
    修改学生成绩必须申请https://www.googleapis.com/auth/classroom.coursework.students权限范围,确认你getClient()方法中配置的scopes包含该范围,不要仅使用只读类的Classroom权限。如果之前授权过旧的权限范围,需要删除本地存储的token文件,重新发起OAuth授权获取对应权限的令牌。
  • 确认操作账号的角色权限
    发起授权的Google账号必须是对应课程的授课教师,或者是教育域的管理员,学生账号没有修改成绩的权限。同时要确认该账号对要修改的作业有成绩管理权限,非作业创建者的协作者需要教师额外分配成绩编辑权限。
  • 核对Google Cloud项目配置
    确认你使用的OAuth凭据对应的Google Cloud项目已经启用了Classroom API,没有被禁用。如果你使用的是教育机构的域名账号,需要联系域管理员确认没有限制第三方应用访问Classroom数据。
  • 确认updateMask配置正确
    你代码中的updateMask字段配置assignedGrade,draftGrade是正确的,无需修改,但要注意不要在字段中间加空格或者拼写错误,格式错误也可能触发权限类报错。

以下是正确的PHP客户端初始化示例,你可以对比调整你的getClient()方法:

function getClient()
{
    $client = new Google_Client();
    $client->setApplicationName('Classroom成绩更新工具');
    // 必须配置该scope才能修改成绩
    $client->setScopes('https://www.googleapis.com/auth/classroom.coursework.students');
    $client->setAuthConfig('你的凭据文件路径.json');
    $client->setAccessType('offline');
    $client->setPrompt('select_account consent');

    $tokenPath = 'token存储路径.json';
    if (file_exists($tokenPath)) {
        $accessToken = json_decode(file_get_contents($tokenPath), true);
        $client->setAccessToken($accessToken);
    }

    if ($client->isAccessTokenExpired()) {
        if ($client->getRefreshToken()) {
            $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        } else {
            $authUrl = $client->createAuthUrl();
            print "请访问以下链接完成授权: \n$authUrl\n";
            print "输入授权码: ";
            $authCode = trim(fgets(STDIN));
            $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
            $client->setAccessToken($accessToken);

            if (array_key_exists('error', $accessToken)) {
                throw new Exception(implode(', ', $accessToken));
            }
            file_put_contents($tokenPath, json_encode($client->getAccessToken()));
        }
    }
    return $client;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:36:03