【问题标题】:Google Android publisher API responds with "410 purchaseTokenNoLongerValid" errorGoogle Android 发布者 API 响应“410 purchaseTokenNoLongerValid”错误
【发布时间】:2018-01-23 02:48:47
【问题描述】:

在获得订阅状态 (https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get) 时,API 会响应

{
  "error": {  
    "errors": [   
      {    
        "domain": "androidpublisher",    
        "reason": "purchaseTokenNoLongerValid",    
        "message": "The purchase token is no longer valid."   
      }  
    ],  
    "code": 410,  
    "message": "The purchase token is no longer valid." 
  }
}

在 Android 发布者 API 的上下文中,无论是在文档中还是在 Google 搜索中,我都找不到任何提及“purchaseTokenNoLongerValid”或“购买令牌不再有效”的内容。

我可以猜到这个错误意味着什么,但最好知道确切,无论如何,在这个错误之后我应该如何处理订阅?

【问题讨论】:

    标签: android subscription google-play-developer-api


    【解决方案1】:

    我最近从 Google Play 团队收到了这条消息,所以HTTP status 410 将是订阅过期超过 60 天的默认回复。

    从 2018 年 5 月 21 日开始,Purchases.subscriptions.get 将返回 HTTP 状态 410,对于已过期 60 天或更长时间的订阅,响应中没有任何内容。对于尚未过期或已过期少于 60 天的有效订阅或已取消订阅,没有任何变化。

    有关how to verify purchases 的更多信息,请访问 Android 开发者网站。

    事实上,我在 5 月 22 日尝试了它,并得到了状态为 410 的响应和这个正文:

    {
        "error": {
            "errors": [
                {
                    "domain": "androidpublisher",
                    "reason": "subscriptionPurchaseNoLongerAvailable",
                    "message": "The subscription purchase is no longer available for query because it has been expired for too long."
                }
            ],
            "code": 410,
            "message": "The subscription purchase is no longer available for query because it has been expired for too long."
        }
    }
    

    【讨论】:

    • 为了 Google 搜索命中:似乎响应原因已更改为 subscriptionPurchaseNoLongerAvailable,消息为 The subscription purchase is no longer available for query because it has been expired for too long.
    • @mroach 谢谢,我用完整的回复更新了答案
    • Google 惊人的未记录功能。非常感谢这个答案!
    【解决方案2】:

    我收到了 Google Play 支持团队关于此错误的官方回复:

    我查看了一下,您提供的订单 ID 与现已删除的帐户相关联。这就是它没有通过验证的原因。这是许可系统按预期工作的一个很好的例子。

    您可以随意忽略此订阅。

    在我询问更多详细信息后,另一封电子邮件:

    从技术上讲,订阅仍然有效,即使它没有附加到帐户 - 因此,它不会显示为已取消。我们知道,如果没有收到有关帐户状态的明确消息而只是收到错误消息,这会令人困惑。这是我们仍在积极开发的产品领域。

    您可以使用 API 来撤销订阅,现在您已经确认帐户已消失,这很好。然后它将读取为已取消,并且在进行 API 调用时将不再抛出错误。

    【讨论】:

    • 您能告诉我们您使用什么地址与 Google 联系以解决此类问题吗?
    • 我使用了 Play 管理中心电子邮件表单
    【解决方案3】:

    我认为 Google 刚刚更新了他们的 API,并开始以状态代码 410 响应带有购买令牌的请求,该令牌长时间未续订(没有订阅续订)。因此,他们 100% 确定不会续订使用此类令牌的订阅。

    所以,这是一个好消息,因为现在您可以检测到此类购买令牌,并且如果您以前这样做过,则根本不需要将它们发送给验证。

    【讨论】:

      【解决方案4】:

      当用户从 Google 帐户更改密码或删除帐户时,购买令牌似乎已被撤销。然后每次请求都会返回这个错误。

      这里列出了使用 OAuth2 令牌的原因 - https://developers.google.com/identity/protocols/OAuth2#expiration,但我觉得情况完全一样。

      • 用户已撤销访问权限。
      • 令牌已六个月未使用。
      • 用户更改了密码,并且令牌包含 Gmail 范围。
      • 用户帐户已超过一定数量的令牌请求。

      【讨论】:

      • 这不是 OAuth2 错误,token 不是指 OAuth2 token。
      • 我没有说它是OAuth2令牌,我说它可以是“相同的情况”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2013-06-17
      • 2014-02-25
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多