Подтвердить что ты не робот

Android: подтверждение покупки квитанции inApp google play

Я использую google-кошелек для моего платежного шлюза, после покупки продукта google дает мне ниже ответ, который

{ 
 "orderId":"12999763169054705758.1371079406387615", 
 "packageName":"com.example.app",
 "productId":"exampleSku",
 "purchaseTime":1345678900000,
 "purchaseState":0,
 "developerPayload":"bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
 "purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
 }

Я пытаюсь использовать Подтверждение чеков, которые недавно появились в Google Play. В консоли разработчика Google я сделал ключ сертификата по учетной записи службы в разрешении. Но я смущен, как использовать проверку чеков, после покупки Продукта из магазина Google Play.

Так кто может мне помочь, как сделать проверку чеков InApp Purchase.

4b9b3361

Ответ 1

Google предоставляет подтверждение получения через API разработчика Google Play, в рамках API - два конечных точки, которые вас больше всего интересуют: Purchases.products: получите и Покупки.подписки: получите.

Purchases.products: get можно использовать для проверки покупки без автоматического обновления продукта, где Purchases.subscriptions: get предназначен для проверки и повторной проверки автоматического обновления подписки на продукт.

Чтобы использовать либо конечную точку, вы должны знать packageName, productId, purchaseToken все это можно найти в полезной нагрузке, которую вы получили при покупке. Вам также нужен access_token, который вы можете получить, создав учетную запись службы Google API.

Чтобы начать работу с учетной записью службы, перейдите на страницу консоли разработчика Google Play API и нажмите кнопку "Создать новый проект":

Создать новый проект API Google

Теперь вы должны увидеть новый Связанный проект и несколько новых разделов, в разделе "Учетная запись службы" нажмите кнопку "Создать учетную запись службы".

Создать новую учетную запись службы

Вам будет предоставлено информационное окно с инструкциями по созданию учетной записи службы. Нажмите ссылку на Google Developers Console, и появится новая вкладка.

Откройте Google Developers Console

Теперь нажмите "Создать новый идентификатор клиента", выберите "Учетная запись службы" из параметров и нажмите "Создать идентификатор клиента".

Создать новый идентификатор клиентa

Загрузится файл JSON, это ваш токен JSON, который вы будете использовать для обмена access_token, чтобы он был безопасным.

Затем переместите вкладки обратно в консоль разработчика Google Play и нажмите "Готово" в информационном окне. Вы должны увидеть свою новую учетную запись службы в списке. Нажмите "Доступ к гранту" рядом с электронной почтой учетной записи службы.

Предоставить доступ

Далее в разделе "Выбрать роль для этого пользователя" выберите "Финансы" и нажмите "Добавить пользователя".

Задайте роль Финансы

Теперь вы создали свою учетную запись службы, и у нее есть все необходимые права доступа для проверки валидации. Затем вы меняете свой JWT на access_token.

Срок действия access_token истекает через один час обмена, поэтому для этого вам потребуется код сервера, и Google предоставил несколько библиотек на многих языках, чтобы справиться с этим (список не исчерпывающий):

Я не буду вдаваться в подробности, потому что есть много документации о том, как использовать эти библиотеки, но я упомянул, что вы хотите использовать 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 могут быть изменены в зависимости от продолжительности подписки.

Счастливое подтверждение!

Ответ 2

Ответ Marc отличный. Добавлю, что Клиентская библиотека API разработчика Google Play для Java значительно упрощает соединение с сервером на серверах Google Play. Библиотека автоматически обрабатывает обновление токена аутентификации, а также предоставляет API-интерфейс типов, поэтому вам не нужно гадать URL-адреса.

Здесь вы можете настроить Publisher singleton:

httpTransport = GoogleNetHttpTransport.newTrustedTransport();
jsonFactory = JacksonFactory.getDefaultInstance();      
credential = GoogleCredential.fromStream(getClass().getResourceAsStream("/path/to/your/key.json")).createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER));
publisher = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential).setApplicationName(APP_NAME).build();

Следующий код запрашивает покупку продукта:

ProductPurchase product = publisher.purchases().products().get(PACKAGE_NAME, sku, token).execute();
Integer purchaseState = product.getPurchaseState();
product.getPurchaseTimeMillis();
product.getConsumptionState();
product.getDeveloperPayload();

Аналогично можно запросить подписки:

SubscriptionPurchase sub = publisher.purchases().subscriptions().get(PACKAGE_NAME, sku, token).execute();
sub.getAutoRenewing();
sub.getCancelReason();
...

Ответ 3

Этот ответ превосходный. Еще одна проблема, с которой мы столкнулись в процессе, заключалась в том, что учетная запись службы не отображалась в консоли Google Play. Мы решили найти это решение, чтобы помочь: учетная запись службы не появляется в Google Консоли после создания

В основном, перейдите в IAM в Google API Console и добавьте новую учетную запись службы, после чего она появится в Google Play Console. Скриншот