Google Play Android Developer API 401权限不足

时间:2014-06-18 13:52:55

标签: node.js google-play-services google-oauth

我正在使用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));
        }
    });
}

2 个答案:

答案 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控制台中“设置”->“帐户详细信息”上的许可测试器。