我正在尝试将几个Google API调用集成到自定义的Drupal 8模块中。
我基本上是先尝试获取自定义类,然后再尝试通过OAuth从Google获取访问令牌。我通过使用类函数将所有内容都放在一个地方来实现此目的。功能如下:
public function testTokenRequest(): void
{
// Setup Google Client Config within context of initialized class
$this->googleClient->setClientId($this->googleClientID);
$this->googleClient->setClientSecret($this->googleClientSecret);
$this->googleClient->setDeveloperKey($this->googleApiKey);
// Add Google MyBusiness scope
$this->googleClient->setScopes(array('https://www.googleapis.com/auth/plus.business.manage'));
try {
$accessToken = $this->googleClient->getAccessToken(); // null returned where breakpoint hit
$this->googleAccessToken = $accessToken; // Put xdebug breakpoint here
} catch (Exception $exception) {
echo $exception->getMessage();
}
}
目前,我所得到的只是$accessToken = $this->googleClient->getAccessToken();
电话返回的空值。
不确定我哪里出错了,可能是AddScopes调用,因为apiclient的供应商文档所做的略有不同,即$client->addScope(Google_Service_Plus::PLUS_ME);
,但是我找不到用于MyBusinessAPI范围的正确类,所以使用了改为使用OAuth运动场字符串https://www.googleapis.com/auth/plus.business.manage
我在使用OAuth Playground AccessToken时返回了OAuth,但最终却出现了Permission Denied错误,即使我在凭据下将GMB API添加到了白名单中。
答案 0 :(得分:0)
Google MyBusiness基于Oauth2。在用户批准您的应用之前,不会收到访问令牌。通常,如果用户尚未批准该应用,则该函数返回null。
这里是一个示例,说明如何创建一个链接,该链接用于向用户发送启动应用程序的身份验证和授权的权限。
$client = new \Google_Client();
$client->setAuthConfig(getcwd() . '/../client_secret.apps.googleusercontent.com.json');
$client->setAccessType("offline"); // offline access
$client->setIncludeGrantedScopes(true); // incremental auth
$client->addScope(
array(
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/plus.business.manage'
)
);
$client->setRedirectUri('http://server.com/code');
$client->setApprovalPrompt('force');
return new Response(
'<html><body>Authenticate here : <a href="' .
$auth_url = filter_var($client->createAuthUrl(), FILTER_SANITIZE_URL)
. '">HERE</a></body></html>'
);
以上示例假设您的服务器还将实现/code
端点,该端点将使用授权令牌将用户重定向到该端点,然后您需要调用api来与访问和刷新代码交换令牌。
本文档将帮助您进一步了解 https://developers.google.com/api-client-library/php/auth/web-app