如何用PHP通过Google Classroom API创建课程作业并解决400报错
问题原因
你遇到的400错误核心有三个常见诱因:
- 授权使用的Scope权限不足:Google Classroom快速入门默认配置的是只读权限,没有课程作业的创建权限,会导致请求参数序列化时出现异常多余字段
submissionModificationMode参数取值非法:你填写的SUBMISSION_MODIFICATION_MODE_UNSPECIFIED是无效值,必须使用官方允许的枚举值- 部分旧版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
相关产品推荐
相关产品推荐

