我已经实现了代码来获取access_token,refresh_token和expire_date。 所有这些值都已存储在数据库中。
现在我需要一种方法来获取另一个access_token以防旧旧的过期而不使用google-api-nodejs-client软件包
原因是这个模块最近有bug,你可以在这里查看(我的评论是最新的) https://github.com/google/google-api-nodejs-client/issues/869#issuecomment-352401977 https://github.com/google/google-api-nodejs-client/issues/894
此刻,我尝试过这样的事情
GoogleTokens.findOne({isObsolete: false}).then((token) => {
let subscriptionsGetUrl = "https://www.googleapis.com/androidpublisher/v2/applications/" + req.query.packageName + "/purchases/subscriptions/" + req.query.subscriptionId + "/tokens/" + req.query.token + "?access_token=" + token.accessToken;
request(subscriptionsGetUrl, function (error, response, body) {
if (error) {
throw error;
}
res.success(JSON.parse(body).expiryTimeMillis);
});
});
但是当access_token过期时它会失败。
感谢。
答案 0 :(得分:1)
这个答案怎么样?您可以使用OAuth2 API检索访问令牌的到期时间。如果您想在没有google-api-nodejs-client的情况下检索它,可以使用以下方法。
var uri = "https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=" + accesstoken;
request.get({uri: uri}, (err, res, body) => {
console.log(body)
});
{
"azp": "#####",
"aud": "#####",
"sub": "#####",
"scope": "#####",
"exp": "1234567890", // Expiration time
"expires_in": "3600", // Remaining time
"access_type": "offline"
}
{
"error_description": "Invalid Value"
}
我从以下文件中获得了上述方法。
如果这对你没用,我很抱歉。