我的问题类似于this one https://stackoverflow.com/questions/35019357/google-play-developer-api-query-purchase-token-returns-invalid-value。但是,我正在使用API Java 客户端库 https://developers.google.com/api-client-library/java/apis/androidpublisher/v2使用服务帐户,从我的服务器调用 API。
我的代码如下this https://developers.google.com/identity/protocols/OAuth2ServiceAccount指南,非常简单。但是,我似乎无法收到适合我的请求的错误。这就是我建立我的AndroidPublisher
:
val credential = GoogleCredential.fromStream(FileInputStream(
"/path/to/json"
)).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER))
androidPublisher = AndroidPublisher.Builder(httpTransport, JSON_FACTORY, credential)
.setApplicationName(packageName)
.build()
JSON 是从开发者控制台的服务帐户下生成的。这就是我提出要求的方式:
androidPublisher.purchases().subscriptions().get(packageName, "valid-sku", "invalid-token").execute()
我的订阅 ID 有效,但我的令牌无效。我预计响应中会出现诸如“无效令牌”之类的错误。然而,我得到的是:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid Value",
"reason" : "invalid"
} ],
"message" : "Invalid Value"
}
这是由于令牌无效而导致的一般错误还是身份验证问题?如果是身份验证问题,我该如何解决?如果是无效令牌问题,我怎么知道?
更多信息:
- 当尝试从 API Explorer 进行该调用时,我也遇到了同样的错误(这次使用客户端 ID 和 API 密钥而不是服务帐户)。
- I have not委派对服务帐户的域范围访问。由于某种原因我必须这么做吗?
- 我可以成功制作其他电话到 API,例如inappproducts.list https://developers.google.com/android-publisher/api-ref/inappproducts/list