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

如何用PHP通过Google Classroom API创建课程作业并解决400报错

问题原因

你遇到的400错误核心有三个常见诱因:

  1. 授权使用的Scope权限不足:Google Classroom快速入门默认配置的是只读权限,没有课程作业的创建权限,会导致请求参数序列化时出现异常多余字段
  2. submissionModificationMode参数取值非法:你填写的SUBMISSION_MODIFICATION_MODE_UNSPECIFIED是无效值,必须使用官方允许的枚举值
  3. 部分旧版Google API PHP客户端库存在自动序列化多余name字段的bug

解决步骤

1. 调整授权Scope

找到你getClient()函数内设置权限范围的代码,替换为课程作业写入权限:
原有默认只读Scope一般为:
$client->addScope('https://www.googleapis.com/auth/classroom.courses.readonly');
替换为教师端作业管理权限:
$client->addScope('https://www.googleapis.com/auth/classroom.coursework.me');
修改Scope后需要删除本地存储的旧token凭证文件,重新触发授权获取新的有效token

2. 修正非法参数

将submissionModificationMode的取值替换为合法枚举值,可选值有两个:

  • MODIFIABLE_UNTIL_TURNED_IN:学生提交作业前可修改
  • MODIFIABLE_ALWAYS:学生提交作业后仍可修改

3. (可选)升级客户端库

如果调整后仍出现name字段相关报错,执行composer命令升级官方客户端库即可修复序列化bug:
composer update google/apiclient:^2.15


修正后可运行的完整代码

$client = getClient();
$courseId = '394192735087';
$service = new Google_Service_Classroom($client);

$post_body = new Google_Service_Classroom_CourseWork(array(
    'workType' => 'ASSIGNMENT',
    'title' => 'Quiz-5',
    'description' => 'where you add up by the number of numbers',
    'state' => 'PUBLISHED',
    'maxPoints' => 100,
    'associatedWithDeveloper' => true,
    'assigneeMode' => 'ALL_STUDENTS',
    // 替换为合法的提交修改模式参数
    'submissionModificationMode' => 'MODIFIABLE_UNTIL_TURNED_IN'
));

// 额外添加参数限制返回字段,避免多余字段序列化异常
$optParams = [
    'fields' => 'id,title'
];
$createdCourseWork = $service->courses_courseWork->create($courseId, $post_body, $optParams);

// 输出创建成功的作业ID验证结果
echo "作业创建成功,作业ID:" . $createdCourseWork->id;

内容的提问来源于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 10:09:01