我的问题与这个问题类似。但是,我将 API Java 客户端库 与服务帐户一起使用,从我的服务器调用 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 有效,但我的令牌无效。我预计响应中会出现诸如“无效令牌”之类的错误。然而,我得到的是:
com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid Value",
"reason" : "invalid"
} ],
"message" : "Invalid Value"
}
这是由于令牌无效而导致的一般错误还是身份验证问题?如果是身份验证问题,我该如何解决?如果是无效令牌问题,我怎么知道?
更多信息:
inappproducts.list
根据我的经验,如果您有
HTTP 400
与 Invalid Value
错误,那么该购买或订阅就是 欺诈。
您可以查看这些购买的订单 ID 部分。可能是
XXXXXXXXXXXX.XXXXXXXXXXXX
的格式,这是错误的,应该是 GPA.XXXX.XXXXX.XXXXX.XXX
就我而言,问题是我正在打电话:
purchases.products.get
代替:
purchases.subscriptions.get
所以,发生这种情况的原因只是因为我使用的
purchaseToken
是错误的。
我没想到这是原因,因为我认为在令牌无效的情况下,我会收到“令牌无效”错误(或类似的错误)。事实证明,Google 给出的响应非常不一致(对于无效令牌也可能给出 404)。
挠了我的头几个小时,我所有的参数都是正确的,然后好吧..我意识到我找错了树(端点)
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}
/购买/订阅/.. vs /购买/产品/..
这是很多年后的事了,但当我试图找到答案时,我听到了为什么我会遇到同样的错误。
这个答案救了我!
对我来说,问题基本上是我使用“GPA.XXXX-XXXX-XXXX-XXXX”值(订单 ID)而不是令牌“dipjcnhompnmpbkokmjjdfam.AO-XXXwKJo931-qI0crOddpS1hKm2-vOfXGS2cxJfRsiEepN F4lfjqYTU6deUs6_hAhofJdBD9Az_CbfKm6xQJ5hAhofJdVNXH7zGzxfWt0gd2y3_pehztA"。
有效令牌的长度始终为 144 个字符,以点分隔, 初始 [a-z]{24} 部分之后的 119 个字符、Base64ish 部分, 欺诈企图仅包括(例如 eiorsfdmklehiojapofmknoe)
我希望这可以节省其他人的时间。 。 .
你能帮我吗 这是我的代码: const androidpublisher = google.androidpublisher({ 版本:“v3”, 授权: 授权, });
try {
const response = await androidpublisher.purchases.products.get({
packageName: packageName.trim(),
productId: productId.trim(),
token: purchaseToken.trim(),
});
我收到此错误: 代码:400, 消息:'无效值', 状态:400,
对于所有遇到这个问题的人来说,99%的人都需要发布应用程序供内部测试人员使用。
遵循本指南:https://support.google.com/googleplay/android-developer/answer/6062777?hl=en