Android发布者权限被拒绝仅检查付款(其他api成功)

Posted

技术标签:

【中文标题】Android发布者权限被拒绝仅检查付款(其他api成功)【英文标题】:Android publisher permission Denied only check payment(other api successfully) 【发布时间】:2019-07-10 11:08:04 【问题描述】:

我正在尝试调用 api Purchases.products: get 来验证您的购买 它会产生这样的结果


 "error": 
  "errors": [
   
    "domain": "androidpublisher",
    "reason": "permissionDenied",
    "message": "The current user has insufficient permissions to perform the requested operation."
   
  ],
  "code": 401,
  "message": "The current user has insufficient permissions to perform the requested operation."
 

项目绑定正确 拥有所有者权限的新服务帐户是created 此服务帐户已被授予google play console 中的权限

Documentation 这里说你能做什么

收到的令牌不仅适用于任何其他 api 的购买检查,它返回结果(Inappproducts: list is work

验证 url 是正确构建的,因为如果你得到一个令牌 client to server,那么这个 api 也可以工作 - 但我需要一个服务器来服务器身份验证

scopes =  ['https://www.googleapis.com/auth/androidpublisher']
authorization = Google::Auth.get_application_default(scopes)

uri = "https://www.googleapis.com/androidpublisher/v3/applications/#ENV['ANDROID_PACKAGE_NAME']/purchases/products/#purchasable.purchase_uuid/tokens/#purchase_token?access_token=#authorization.fetch_access_token!['access_token']"

response = RestClient::Request.execute method: :get,
                                           url: uri,
                                           headers: 'Content-Type':'application/json'


file = File.read('config/google_key.json')
values = JSON.parse(file)


oauth = Signet::OAuth2::Client.new(
          issuer:               values[:client_email]",
          audience:             "https://www.googleapis.com/oauth2/v4/token",
          scope:                "https://www.googleapis.com/auth/androidpublisher",
          client_id:            values[:client_id],
          signing_key:          OpenSSL::PKey::RSA.new(values[:private_key]),
      )

      jwt = oauth.to_jwt

      url = "https://www.googleapis.com/oauth2/v4/token"
      begin
        response = RestClient::Request.execute method: :post,
                                               url: url,
                                               headers: 'Content-Type': 'application/json',
                                               payload: 
                                                   grant_type: "urn:ietf:params:oauth:grant-type:jwt-bearer",
                                                   assertion: jwt
                                               

        result =  JSON.parse response.body
      rescue => e
        puts e.response.to_str
        result =  JSON.parse(e.response.to_s)
      end

我期待这个result

更新 1

添加tokeninfo

【问题讨论】:

【参考方案1】:

我喜欢谷歌。

使用我的第一个服务帐户 7 天后,它工作了 - 但是 7 天!!!! 7天 !!!!这只是恐怖

Google 的各位,您需要 7 天时间才能访问 api! - 这太荒谬了

好的,您需要这样做才能获得访问权限

在谷歌云中创建服务帐户(管理员权限) 创建 google play 控制台并链接项目 google cloud 在 google play 控制台中添加电子邮件服务帐户 1 周后它会起作用

【讨论】:

那么您是否必须联系谷歌支持或 7 天后问题自动解决?是否定期取消检查它是否开始工作或者他们是否向您发送了消息?您能否提供更多详细信息,我现在在同一条船上并试图弄清楚该怎么做。谢谢 @DataGreed 嗨,这是一个问题,7 天后自动解决))我认为 GCP 需要时间来共享访问权限。我的建议是再次检查所有内容,如果一切顺利,请等待几天。明天就会出现问题,您可以尝试创建新的 сredentials 并再等 2 天。您将创建 temp decision 并且当 сredentials 起作用时,您将替换 temp 决定

以上是关于Android发布者权限被拒绝仅检查付款(其他api成功)的主要内容,如果未能解决你的问题,请参考以下文章

Android:java.lang.SecurityException:权限拒绝:启动意图

已授予 Android 运行时权限,但仍被拒绝

在定期计费中,是不是可以退回被拒绝的付款?

尝试在 Android 中将文件写入 sdcard 时出现 FileNotFoundException(权限被拒绝)

Android 5(HTC) EACCES(权限被拒绝)

检查权限总是返回“拒绝”。反应原生