Google Play Developer API - 400 无效值 - InAppPurchases

pav*_*163 7 java google-api-java-client kotlin google-oauth google-play-developer-api

我的问题与类似。但是,我使用带有服务帐户的API Java 客户端库,从我的服务器调用 API。

我的代码遵循指南,非常简单。但是,对于我的请求,我似乎无法得到适当的错误。这就是我构建我的方式AndroidPublisher

val credential = GoogleCredential.fromStream(FileInputStream(
        "/path/to/json"
)).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER))

androidPublisher = AndroidPublisher.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(packageName)
        .build()
Run Code Online (Sandbox Code Playgroud)

JSON 是从开发人员控制台生成的,位于服务帐户下。这是我提出请求的方式:

androidPublisher.purchases().subscriptions().get(packageName, "valid-sku", "invalid-token").execute()
Run Code Online (Sandbox Code Playgroud)

我的订阅 ID 有效,但我的令牌无效。我希望响应中出现诸如“无效令牌”之类的错误。但是,我得到的是:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Invalid Value",
    "reason" : "invalid"
  } ],
  "message" : "Invalid Value"
}
Run Code Online (Sandbox Code Playgroud)

这是由于令牌无效而导致的一般错误还是身份验证问题?如果是身份验证问题,我该如何解决?如果是无效的令牌问题,我怎么知道?

更多信息:

  • 尝试从 API Explorer 进行该调用时,我也遇到了同样的错误(这次使用客户端 ID 和 API 密钥而不是服务帐户)。
  • 尚未委派对服务帐户的全域访问权限。我必须出于某种原因吗?
  • 我可以成功地对 API进行其他调用,例如inappproducts.list

pav*_*163 8

所以,发生的原因只是因为purchaseToken我使用的是错误的。

我没想到这是因为我认为在令牌无效的情况下,我会收到“令牌无效”错误(或类似的错误)。事实证明,Google 给出的响应非常不一致(对于无效令牌也可能给出 404)。


Mr *_*nev 8

就我而言,问题是我正在打电话:

purchases.products.get
Run Code Online (Sandbox Code Playgroud)

代替:

purchases.subscriptions.get
Run Code Online (Sandbox Code Playgroud)


Ber*_*ncı 7

根据我的经验,如果您有HTTP 400错误,Invalid Value那么购买或订阅就是欺诈

您可以查看这些购买的订单 ID 部分。可能格式XXXXXXXXXXXX.XXXXXXXXXXXX是错误的,应该是GPA.XXXX.XXXXX.XXXXX.XXX

  • 我真的不计算 X 字符数。我只是添加来显示逻辑。

  • @JoeOkatch 有几种方法可以实现这一点。由于它们不合法,我不会直接分享链接。不过,您可以在 google 上搜索“我们如何在 Google Play 商店中进行应用内购买?” 你会想出类似的东西;“修补程序” (2认同)

Isa*_*tim 6

挠了我的头几个小时,我的所有参数都是正确的,然后好吧..我意识到我找错了树(端点)

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
Run Code Online (Sandbox Code Playgroud)

不是这个吗

https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}
Run Code Online (Sandbox Code Playgroud)

/购买/订阅/.. 与 /购买/产品/..