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

Я использую Google wallet для своего платежного шлюза, после покупки продукта 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-store.

Так может кто-нибудь пожалуйста, помогите мне, как сделать прием проверки of InApp купить.

3 ответов


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

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

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

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

Create a new Google API Project

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

Create a new Service Account

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

Open the Google Developers Console

теперь нажмите Create new Client ID, выберите Service account из параметров и нажмите Create Client ИДЕНТИФИКАТОР.

Create a new Client ID

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

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

Grant access

далее под выбрать роль для этого пользователя выберите Finance и нажмите Add user.

Set the role to Finance

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

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

я не буду вдаваться в детали, потому что есть много документации на как использовать эти библиотеки, но вы хотите использовать https://www.googleapis.com/auth/androidpublisher как область OAuth2,client_email от JWT как issuer и открытый ключ вы можете получить от private_key и пароль notasecret будет использоваться для signing_key.

после access_token вам хорошо идти (по крайней мере, в течение следующего часа, когда вы захотите запросить новый, следуя тому же процессу в приведенном выше абзаце).

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

счастливые форумчане!


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

вот как вы настроите Publisher синглтон:

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();
...

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

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