我正在使用Google Play Android Developer API来服务器检查用户订阅的订阅状态,但在成功授权并要求现有订阅后,我收到401响应,并显示以下消息:“当前用户权限不足执行请求操作'。 访问https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=XXXXXX我可以看到我确实有请求的范围(https://www.googleapis.com/auth/androidpublisher),但我每次都会得到相同的响应。 还有其他人有同样的问题吗?
编辑:我已经看到了Explore API应用程序的功能,它在请求的查询字符串中添加了键,但我没有这个值。在控制台中,我创建了一个服务帐户客户端ID,它具有客户端ID,电子邮件地址和私钥,但没有显示探索API使用的API密钥。
编辑没有。 2:我已将服务帐户生成的电子邮件添加到Google Play开发者控制台和Google电子钱包控制台,但我仍无法访问。我正在使用nodejs和google-oauth-jwt,因为没有谷歌为nodejs提供lib。
以下是我用来发出请求的代码:
var request = require('google-oauth-jwt').requestWithJWT();
function makeReq() {
request({
url: 'https://www.googleapis.com/androidpublisher/v1.1/applications/{packageName}/subscriptions/{subscriptionId}/purchases/{purchaseToken}',
jwt: {
// use the email address of the service account, as seen in the API console
email: 'blahblahtrutjtrutj@developer.gserviceaccount.com',
// use the PEM file we generated from the downloaded key
keyFile: 'purchases-test.pem',
// specify the scopes you wish to access
scopes: ['https://www.googleapis.com/auth/androidpublisher']
}
}, function (err, res, body) {
if (err) {
console.log(err);
} else {
console.log("BODY IS ------------------------------------------");
console.log(JSON.parse(body));
}
});
}
答案 0 :(得分:1)
有一个与您的服务帐户相关联的电子邮件地址。
这需要在开发控制台和Play商店中拥有适当的权限。请务必将服务地址添加到Play商店。
我接近它的方式是使用
var googleAuth = require('google-oauth-jwt'),
authObject = {
email: 'blahblahtrutjtrutj@developer.gserviceaccount.com',
keyFile: 'purchases-test.pem',
scopes: ['https://www.googleapis.com/auth/androidpublisher']
};
googleAuth.authenticate(authObject, function (err, token) {
next(err, token);
});
我将令牌存储在redis中一小时,并使用该令牌向商店发出请求:
var opts = {
url : verifyUrl + payload.packageName + '/inapp/' + payload.productId + '/purchases/' + payload.token,
headers: {
authorization : 'Bearer ' + token
}
};
request.get(opts, function (error, response, body) {
next(error, response, body);
});
答案 1 :(得分:0)
如果您的应用仅在封闭的Alpha轨道上发布,则还必须将您服务帐户的电子邮件地址(client_email)添加到Play控制台中“设置”->“帐户详细信息”上的许可测试器。