Node.js Google Play Android开发者API 401权限不足

Node.js Google Play Android开发者API 401权限不足,node.js,google-play-services,google-oauth,Node.js,Google Play Services,Google Oauth,我正在使用服务器对服务器检查用户订阅的订阅状态,但在成功授权并请求现有订阅后,我收到401响应,并显示以下消息“当前用户没有足够的权限执行所需的操作”。 访问时,我可以看到我确实拥有请求的作用域(),但每次都会得到相同的响应。 其他人也有同样的问题吗 编辑:我已经看到了ExploreAPI应用程序的功能,它在请求的查询字符串中添加了键,但我没有该值。在控制台中,我创建了一个服务帐户客户端Id,它有一个客户端Id、电子邮件地址和一个私钥,但没有一个API密钥可以用于探索API的用途 编辑2:我已经

我正在使用服务器对服务器检查用户订阅的订阅状态,但在成功授权并请求现有订阅后,我收到401响应,并显示以下消息“当前用户没有足够的权限执行所需的操作”。 访问时,我可以看到我确实拥有请求的作用域(),但每次都会得到相同的响应。 其他人也有同样的问题吗

编辑:我已经看到了ExploreAPI应用程序的功能,它在请求的查询字符串中添加了键,但我没有该值。在控制台中,我创建了一个服务帐户客户端Id,它有一个客户端Id、电子邮件地址和一个私钥,但没有一个API密钥可以用于探索API的用途

编辑2:我已经将服务帐户生成的电子邮件添加到谷歌Play开发者控制台和谷歌钱包控制台,但我仍然没有访问权限。我正在使用nodejs和,因为没有google为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));
        }
    });
}

有一个与您的服务帐户关联的电子邮件地址

这需要在dev控制台和Play存储中具有适当的权限。确保将服务地址添加到Play store

我接近它的方式是使用

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);
});

如果您的应用程序仅在封闭的alpha轨道中发布,您还必须在播放控制台的“设置”->“帐户详细信息”中将您的服务帐户的电子邮件地址(客户端电子邮件)添加到许可证测试员中。

向下滚动一点,查找“公共API访问”并尝试使用that@DaImTo,您的意思是将公共API访问与OAuth服务帐户一起使用还是不使用它?而且,除此之外,我已经读了好几遍了,在打电话时没有提到要传递给API的密钥。您确实给了服务帐户访问play帐户的权限吗?注意:我知道服务帐户很少或根本没有android游戏体验:)我该怎么做我在API和auth-Credentials下添加了新的客户端ID,即服务帐户。我不知道还能做什么。come chat:)我这样做了,甚至在一天之后我还没有访问API。对我来说,更改是自动的。已更新以包含我的流程。我不使用requestWithJWT,而是使用实际的request npm模块。这对我来说也很有效,一旦我在playstore开发控制台设置中链接了我的API项目,我在playstore中添加了这个帐户,但它具有只读权限。看起来该帐户必须具有“查看财务报告”权限?!?!该帐户需要管理员权限。