API издателя Google Android отвечает ошибкой 410 PurchaseTokenNoLongerValid

При получении статуса подписки (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." 
  }
}

Я не смог найти упоминания о «PurchaseTokenNoLongerValid» или «Токен покупки больше не действителен» в контексте API издателя Android ни в документации, ни в поиске Google.

Я могу догадаться, что означает эта ошибка, но лучше знать точно, и в любом случае, что мне делать с подпиской после этой ошибки?


person ksimka    schedule 15.08.2017    source источник


Ответы (4)


Я получил это сообщение недавно от команды Google Play, поэтому HTTP status 410 будет ответом по умолчанию для подписок, срок действия которых истек более 60 дней.

Начиная с 21 мая 2018 г., Purchases.subscriptions.get вернет HTTP-статус 410 без содержания в ответе для подписок, срок действия которых истек на 60 дней или более. Нет изменений для активных подписок или отмененных подписок, срок действия которых еще не истек или срок действия которых истек менее 60 дней.

Посетите веб-сайт разработчиков Android, чтобы получить дополнительную информацию о том, как подтверждать покупки.

И действительно, я попробовал это 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."
    }
}
person zafeiris.m    schedule 17.05.2018
comment
Для поисковых запросов Google: похоже, причина ответа изменилась на subscriptionPurchaseNoLongerAvailable с сообщением The subscription purchase is no longer available for query because it has been expired for too long. - person mroach; 23.05.2018
comment
@mroach спасибо, обновил ответ полным ответом - person zafeiris.m; 24.05.2018
comment
Удивительно недокументированная функция от Google. Большое спасибо за этот ответ! - person Torsten Ojaperv; 26.02.2019

Я получил официальный ответ от службы поддержки Google Play об этой ошибке:

Я посмотрел, и предоставленный вами идентификатор заказа связан с учетной записью, которая была удалена. Поэтому он не проходит проверку. Это хороший пример правильной работы системы лицензирования.

Вы можете просто проигнорировать эту подписку.

И еще одно электронное письмо после того, как я прошу подробностей:

Технически подписка все еще активна, даже если она не привязана к учетной записи, поэтому она не отображается как отмененная. Мы понимаем, что не получить четкое сообщение о статусе учетной записи и просто вернуть сообщение об ошибке - это сбивает с толку. Это область нашего продукта, над которой мы все еще активно работаем.

Что вы можете сделать, так это использовать API, чтобы отозвать подписку, что можно сделать теперь, когда у вас есть подтверждение того, что учетная запись исчезла. Тогда он будет считаться отмененным и больше не будет выдавать ошибку при вызове API.

person guillaume-tgl    schedule 07.03.2018
comment
не могли бы вы сказать, по какому адресу вы обращались в Google по таким вопросам? - person Stafox; 21.03.2018
comment
Я использовал форму электронной почты Play Console - person guillaume-tgl; 21.03.2018

Я думаю, что Google только что обновил свой API и начал отвечать кодом состояния 410 на запросы с токеном покупки, который не продлевается долгое время (подписка не продлевается). Таким образом, они уверены на 100%, что подписка с таким токеном не будет продлена.

Итак, это хорошая новость, потому что теперь вы можете обнаруживать такие токены покупки и вообще не отправлять их на проверку, если вы это делали раньше.

person Stafox    schedule 22.08.2017

Похоже, токен покупки отменяется, когда пользователь меняет свой пароль от учетной записи Google или удаляет учетную запись. Тогда эта ошибка будет возвращаться при каждом запросе.

Вот список причин использования токенов OAuth2 - https://developers.google.com/identity/protocols/OAuth2#expiration, но я чувствую, что это та же самая ситуация.

  • Пользователь отозвал доступ.
  • Токен не использовался полгода.
  • Пользователь изменил пароли, и токен содержит области Gmail.
  • Учетная запись пользователя превысила определенное количество запросов токенов.
person ksimka    schedule 15.08.2017
comment
Это не ошибка OAuth2, и токен не относится к токену OAuth2. - person Blago; 11.01.2018
comment
Я не сказал, что это токен OAuth2, я сказал, что может быть такая же ситуация. - person ksimka; 25.01.2018