首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Google Oauth API未设置令牌

PHP Google Oauth API未设置令牌
EN

Stack Overflow用户
提问于 2021-02-19 06:23:27
回答 1查看 60关注 0票数 1

我在使用Google API时遇到了麻烦,但我对他们的API也是一个全新的尝试,所以我需要一些帮助。从我收集的信息来看,$client->getAccessToken没有正确设置。有没有人能帮我弄清楚为什么错误消息会一直在gradebook.php中显示?为什么令牌不会被接受?

Gradebook.php:

代码语言:javascript
复制
<?php

session_start();
require_once 'oauth.php';

if ($client->getAccessToken()) {
    //Now have offline access of the user
    $_SESSION['token'] = $client->getAccessToken();

    //User token google drive call:
    $service = new Google_Service_Classroom($client);
    $courses = $service->courses->listCourses(['teacherId' => 'me']);

    foreach ($courses as $key => $course) {
        // var_dump($course->id);
        $courseWorks = $service->courses_courseWork->listCoursesCourseWork($course['id']);
        foreach ($courseWorks as $k => $courseWork) {
            // print_r($courseWork);
            // var_dump($courseWork->id);
            $studentSubmissions = $service->courses_courseWork_studentSubmissions->listCoursesCourseWorkStudentSubmissions($course->id, $courseWork->id);
            // print_r($studentSubmissions);
            foreach ($studentSubmissions as $i => $studentSubmission) {
                $student = $service->courses_students->get($course->id, $studentSubmission->userId);
                $emailAddress  = $student->getProfile()->emailAddress;
                $emailId = explode('@', $emailAddress)[0];

                var_dump($emailId);
                var_dump($course->id);
                var_dump($courseWork->id);
                var_dump($studentSubmission->assignedGrade);
            }
        }
    }
}

else {echo "ERROR DETECTED!!";}

Oauth.php:

代码语言:javascript
复制
session_start();
require_once '../vendor/autoload.php';

// initation configuration, as specificed by Google
$clientID = '(redacted)';
$clientSecret = '(redacted)';
$redirectUri = '(redacted)';

// create Client Request to access Google API
$client = new Google_Client();
$client->setClientId($clientID);
$client->setClientSecret($clientSecret);
$client->setRedirectUri($redirectUri);
$client->setScopes(array(
    "email",
    "profile",
    "https://www.googleapis.com/auth/classroom.courses.readonly",
    "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
    "https://www.googleapis.com/auth/classroom.rosters.readonly",
    "https://www.googleapis.com/auth/classroom.coursework.students.readonly",
    "https://www.googleapis.com/auth/classroom.profile.emails",
    "https://www.googleapis.com/auth/classroom.profile.photos"
));

// establish session define_syslog_variables
$client->fetchAccessTokenWithAuthCode($_GET['code']);
$_SESSION['token'] = $client->getAccessToken();
EN

回答 1

Stack Overflow用户

发布于 2021-02-20 16:23:00

在尝试访问资源之前,需要先设置访问令牌。我已经调整了你的代码来设置令牌。

代码语言:javascript
复制
<?php
session_start();
require_once '../Internal/oauth.google.php';

$client->setAccessToken($_SESSION["token"]); //set the access token is what you missed

/*$client->getAccessToken() should return a none NULL value if set properly, something we have added above*/
if ($client->getAccessToken() !==NULL) { 
    //Now have offline access of the user
    $_SESSION['token'] = $client->getAccessToken();

    //User token google drive call:
    $service = new Google_Service_Classroom($client);
    $courses = $service->courses->listCourses(['teacherId' => 'me']);

    foreach ($courses as $key => $course) {
        print_r($course);
        $courseWorks = $service->courses_courseWork->listCoursesCourseWork($course['id']);
        foreach ($courseWorks as $k => $courseWork) {
            // print_r($courseWork);
            // var_dump($courseWork->id);
            $studentSubmissions = $service->courses_courseWork_studentSubmissions->listCoursesCourseWorkStudentSubmissions($course->id, $courseWork->id);
            // print_r($studentSubmissions);
            foreach ($studentSubmissions as $i => $studentSubmission) {
                $student = $service->courses_students->get($course->id, $studentSubmission->userId);
                $emailAddress  = $student->getProfile()->emailAddress;
                $emailId = explode('@', $emailAddress)[0];

                var_dump($emailId);
                var_dump($course->id);
                var_dump($courseWork->id);
                var_dump($studentSubmission->assignedGrade);
            }
        }
    }
}
else {header('Location: ../index.php'); exit();}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66269044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档