【问题标题】:Google Play Android Developer API 401 Insufficient permissionsGoogle Play Android Developer API 401 权限不足
【发布时间】:2014-06-18 13:52:55
【问题描述】:

我正在使用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、电子邮件地址和一个私钥,但没有显然 Explore API 使用的 API 密钥。

编辑编号。 2:我已将服务帐户生成的电子邮件添加到 Google Play Developer Console 和 Google Wallet 控制台,但我仍然无法访问。我正在使用 nodejs 和 google-oauth-jwt,因为谷歌没有为 nodejs 提供库。

这是我用来发出请求的代码:

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

【问题讨论】:

  • 向下滚动一点寻找“公共 API 访问”尝试使用它
  • @DaImTo,您是指将公共 API 访问与 OAuth 服务帐户一起使用还是不使用它?而且,除此之外,我已经读过this 几次了,并且没有提到在调用时传递给 API 的密钥
  • 您确实授予了服务帐户对播放帐户的访问权限?注意:我知道服务帐户很少或根本没有 Android 游戏体验 :)
  • 我该怎么做? :) 我去了console 并在 APIs & auth - Credentials 添加了新的客户端 ID,即服务帐户。我不知道还能做什么。

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


【解决方案1】:

如果您的应用仅在封闭的 Alpha 版轨道中发布,您还必须在 Play 管理中心的设置 -> 帐户详细信息中将服务帐户的电子邮件地址 (client_email) 添加到许可测试人员。

【讨论】:

    【解决方案2】:

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

    这需要在开发控制台和 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);
    });
    

    【讨论】:

    • 我这样做了,即使过了一天我也无法访问 API。
    • 更改对我来说是自动的。更新以包括我的流程。我不使用 requestWithJWT,我使用实际的 request npm 模块。
    • 这对我也有用,一旦我在 playstore 开发控制台设置中链接了我的 API 项目
    • 我在 Play 商店中添加了这个帐户,但它只有只读权限。看起来该帐户必须具有“查看财务报告”权限?!?!
    • 该帐户需要管理员权限。
    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2022-01-07
    • 2016-01-12
    • 1970-01-01
    相关资源
    最近更新 更多