Google Play 开发者 API - 400 无效值 - InAppPurchases
Google Play Developer API - 400 Invalid Value - InAppPurchases
我的问题类似于 this one. However, I am using the API Java Client Library 的服务帐户,从我的服务器调用 API。
我的代码遵循 this 指南,非常简单。但是,我的请求似乎无法得到适当的错误。这就是我构建 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 有效,但我的令牌无效。我预计响应中会出现 "invalid token" 之类的错误。然而,我得到的是:
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 密钥而不是服务帐户)。
- 我没有授权对服务帐户的全域访问权限。出于某种原因我必须这样做吗?
- 我可以成功地对API进行其他调用,例如
inappproducts.list
原来是因为我用的purchaseToken
错了
我没想到这是原因,因为我认为在无效令牌的情况下,我会收到 "token invalid" 错误(或类似的错误)。事实证明,Google 给出的响应非常不一致(对于无效令牌也可能给出 404)。
根据我的经验,如果您 Invalid Value
出现 HTTP 400
错误,那么该购买或订阅就是 欺诈 。
您可以查看这些购买的订单 ID 部分。可能是 XXXXXXXXXXXX.XXXXXXXXXXXX
的格式错误,应该是 GPA.XXXX.XXXXX.XXXXX.XXX
- 我真的没有数过 X 字符数。我只是添加以显示逻辑。
在我的例子中,问题是我打电话给:
purchases.products.get
而不是:
purchases.subscriptions.get
对于所有 运行 遇到此问题的人,99% 的人需要为内部测试人员发布应用程序。
遵循本指南:https://support.google.com/googleplay/android-developer/answer/6062777?hl=en
挠了挠脑袋几个小时,我的所有参数都正确,然后好吧..我意识到我在找错树(端点)
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
不是这个
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}
/purchases/subscriptions/.. 对比 /purchases/products/..
我的问题类似于 this one. However, I am using the API Java Client Library 的服务帐户,从我的服务器调用 API。
我的代码遵循 this 指南,非常简单。但是,我的请求似乎无法得到适当的错误。这就是我构建 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 有效,但我的令牌无效。我预计响应中会出现 "invalid token" 之类的错误。然而,我得到的是:
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 密钥而不是服务帐户)。
- 我没有授权对服务帐户的全域访问权限。出于某种原因我必须这样做吗?
- 我可以成功地对API进行其他调用,例如
inappproducts.list
原来是因为我用的purchaseToken
错了
我没想到这是原因,因为我认为在无效令牌的情况下,我会收到 "token invalid" 错误(或类似的错误)。事实证明,Google 给出的响应非常不一致(对于无效令牌也可能给出 404)。
根据我的经验,如果您 Invalid Value
出现 HTTP 400
错误,那么该购买或订阅就是 欺诈 。
您可以查看这些购买的订单 ID 部分。可能是 XXXXXXXXXXXX.XXXXXXXXXXXX
的格式错误,应该是 GPA.XXXX.XXXXX.XXXXX.XXX
- 我真的没有数过 X 字符数。我只是添加以显示逻辑。
在我的例子中,问题是我打电话给:
purchases.products.get
而不是:
purchases.subscriptions.get
对于所有 运行 遇到此问题的人,99% 的人需要为内部测试人员发布应用程序。
遵循本指南:https://support.google.com/googleplay/android-developer/answer/6062777?hl=en
挠了挠脑袋几个小时,我的所有参数都正确,然后好吧..我意识到我在找错树(端点)
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
不是这个
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}
/purchases/subscriptions/.. 对比 /purchases/products/..