我正在尝试从gmail api获取附件 -
https://developers.google.com/gmail/api/v1/reference/users/messages/attachments/get#try-it
令牌是主要的用户令牌 - 我可以使用此令牌,ID和消息ID读取电子邮件并且是正确的。
我需要解码附件ID吗?
如果爱上$p->getBody()['attachmentId']
附件ID是 ANGjdJ9jgabAPGnlI7oCAAEvz_Jo-xNYh4-kf9NoCyn-aRPPlf8KuRTsbolmQH0bdDl4Qh3UdfWCBBl8Roaly-rxqRoxTotvIEmls8zqCkFasvFcC-wvQ_6Qun2RM8f8SCDvVpmwguVf6fvWfkl1uu5qdu3iR-GzpyU6zLsV0wcwVuiTtPNh8XjAuqKvFk7PaVgDiNW_Lwk_DDEWP8UxfTqw2afanJMNY5GrqPLhga6FmarDIh5AiM67tY6x5Vl
我也尝试在线测试,但有错误 什么是附件令牌?其他令牌?
我在这里测试令牌https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= 这是有效的
"scope": " https://mail.google.com/ https://www.googleapis.com/auth/drive ",
"expires_in": 3518,
"verified_email": true,
"access_type": "offline"
更新1
这个例子
$token = $client->getAccessToken();
$authObj = json_decode($token);
if(isset($authObj->refresh_token)) {
save_refresh_token($authObj->refresh_token);
}
$token = $client->getAccessToken();
是数组而不是json
"access_token" => "ya29.Ci-XA8H0Qq33gA00E92Nx9CQufeG3U4NvyHUFbUUzyXcOEp50FbuK-z1hic8aNbxZg"
"token_type" => "Bearer"
"expires_in" => 3600
"id_token" => ....
"created" => 1479227459
我无法获得refresh_token - 我从auth_code获取access_token
$client->setApprovalPrompt('force');
$client->setAccessType ("offline");
$client->authenticate($tokenCode);
$token = $client->getAccessToken();
我有令牌,但没有refresh_token为什么?
答案 0 :(得分:-1)
您应该对Web服务器应用程序使用标准 OAuth 2.0 。您的应用程序接收短期访问令牌,允许它访问这些资源并刷新令牌以允许长期访问,并确保在oauth2授权上添加脱机标记。您将收到一个将在3600秒或一小时后到期的令牌,过期是正常的。因此,您需要使用刷新令牌来获取新的工作令牌。
以下是您需要的步骤:
$token = $client->getAccessToken();
$authObj = json_decode($token);
if(isset($authObj->refresh_token)) {
save_refresh_token($authObj->refresh_token);
}
保存此refresh_token很重要,然后您可以使用
更新它$client->refreshToken($your_saved_refresh_token);
And then set your new access token to the session:
$_SESSION['access_token'] = $client->getAccessToken();
我做了一些研究,发现SO票可以帮助您了解oauth网络流程:How to refresh token with Google API client?