Ответ 1
Google предоставляет подтверждение получения через API разработчика Google Play, в рамках API - два конечных точки, которые вас больше всего интересуют: Purchases.products: получите и Покупки.подписки: получите.
Purchases.products: get
можно использовать для проверки покупки без автоматического обновления продукта, где Purchases.subscriptions: get
предназначен для проверки и повторной проверки автоматического обновления подписки на продукт.
Чтобы использовать либо конечную точку, вы должны знать packageName
, productId
, purchaseToken
все это можно найти в полезной нагрузке, которую вы получили при покупке. Вам также нужен access_token
, который вы можете получить, создав учетную запись службы Google API.
Чтобы начать работу с учетной записью службы, перейдите на страницу консоли разработчика Google Play API и нажмите кнопку "Создать новый проект":
Теперь вы должны увидеть новый Связанный проект и несколько новых разделов, в разделе "Учетная запись службы" нажмите кнопку "Создать учетную запись службы".
Вам будет предоставлено информационное окно с инструкциями по созданию учетной записи службы. Нажмите ссылку на Google Developers Console, и появится новая вкладка.
Теперь нажмите "Создать новый идентификатор клиента", выберите "Учетная запись службы" из параметров и нажмите "Создать идентификатор клиента".
Загрузится файл JSON, это ваш токен JSON, который вы будете использовать для обмена access_token
, чтобы он был безопасным.
Затем переместите вкладки обратно в консоль разработчика Google Play и нажмите "Готово" в информационном окне. Вы должны увидеть свою новую учетную запись службы в списке. Нажмите "Доступ к гранту" рядом с электронной почтой учетной записи службы.
Далее в разделе "Выбрать роль для этого пользователя" выберите "Финансы" и нажмите "Добавить пользователя".
Теперь вы создали свою учетную запись службы, и у нее есть все необходимые права доступа для проверки валидации. Затем вы меняете свой JWT на access_token.
Срок действия access_token
истекает через один час обмена, поэтому для этого вам потребуется код сервера, и Google предоставил несколько библиотек на многих языках, чтобы справиться с этим (список не исчерпывающий):
- Ruby: https://github.com/google/google-api-ruby-client
- Node.js: https://github.com/google/google-api-nodejs-client
- Java: https://github.com/google/google-api-java-client
- Python: https://github.com/google/google-api-python-client
Я не буду вдаваться в подробности, потому что есть много документации о том, как использовать эти библиотеки, но я упомянул, что вы хотите использовать https://www.googleapis.com/auth/androidpublisher
как область OAuth2, client_email
из JWT как issuer
и открытый ключ, который вы можете получить из private_key
, а ключевая фраза notasecret
будет использоваться для signing_key
.
После того, как у вас есть access_token
, вам хорошо идти (по крайней мере, в течение следующего часа, после чего вы захотите запросить новый, следуя тому же процессу в предыдущем абзаце).
Чтобы проверить статус покупной (неавтомобильной) покупки, сделайте запрос http get
: https://www.googleapis.com/androidpublisher/v2/applications/com.example.app/purchases/products/exampleSku/tokens/rojeslcdyyiapnqcynkjyyjh?access_token=your_access_token
Если вы получите код ответа 200 http, все пошло так, как планировалось, и ваша покупка была действительной. 404 означает, что ваш токен недействителен, поэтому покупка была скорее всего попыткой мошенничества. 401 будет означать, что ваш токен доступа недействителен, а 403 означает, что у вашей учетной записи службы недостаточно доступа, убедитесь, что вы включили Финансы для учетной записи доступа в консоли разработчика Google Play.
Ответ от 200 будет выглядеть примерно так:
{
"kind": "androidpublisher#productPurchase",
"purchaseTimeMillis": long,
"purchaseState": integer,
"consumptionState": integer,
"developerPayload": string
}
Для объяснения каждого свойства см. https://developers.google.com/android-publisher/api-ref/purchases/products.
Подписки похожи, но конечная точка выглядит так:
https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token?access_token=you_access_token
И ответ должен содержать следующие свойства:
{
"kind": "androidpublisher#subscriptionPurchase",
"startTimeMillis": long,
"expiryTimeMillis": long,
"autoRenewing": boolean
}
См. https://developers.google.com/android-publisher/api-ref/purchases/subscriptions для описания свойств и обратите внимание, что startTimeMillis
и expiryTimeMillis
могут быть изменены в зависимости от продолжительности подписки.
Счастливое подтверждение!