2016-02-01 5 views
35

Я использую Google кошелек для моего платежного шлюза, после покупки продукта Google дает мне ниже ответ, чтоAndroid: InApp проверка Квитанция о покупке Google Play

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

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

Возможно, кто-нибудь может помочь мне, как сделать Проверка чека от InApp Купить.

+0

Здравствуйте Binil, вы завершили его для покупки подписки? –

+0

его управляющий продукт @Anshul Tyag –

+0

@BinilSurendran .. Мой вопрос отличается от вашего вопроса, но мне нужно знать идентификатор электронной почты, который использовался для покупки в приложении. можете ли вы, пожалуйста, помочь мне получить эту электронную почту, так как мне это нужно для дальнейших ссылок в моем приложении – Pallavi

ответ

87

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

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

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

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

Create a new Google API Project

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

Create a new Service Account

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

Open the Google Developers Console

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

Create a new Client ID

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

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

Grant access

Следующая под Выберите роль для этого пользователя, выберите Финансы и нажмите кнопку Добавить пользователя.

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, вам нужно идти (по крайней мере, на следующий час, в этот момент вам нужно будет запросить новый, следуя тому же процессу в приведенном выше абзаце).

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

Happy validating!

+0

Я добавляю нового пользователя в консоль разработчика, и у меня есть сертификат JSON, который поступает с консоли. Можете ли вы мне помочь, как выполнить проверку чека с загруженным файлом @Marc Greenstock –

+0

@BinilS Вам нужно будет уточнить, на каком серверном языке вы должны писать свой код? –

+0

Я использую java на стороне сервера @Marc Greenstock –

7

Ответ Марка замечательный. Добавлю, что Google Play Developer API Client Library for Java упрощает соединение с сервером на серверах Google Play. Библиотека автоматически обрабатывает обновление токена аутентификации, а также предоставляет API-интерфейс типов, поэтому вам не нужно гадать 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(); 
... 
+0

Это код на сервере Java или выполнен на Android, прежде чем выходить на произвольный сервер? – user

+0

Для PHP проверьте этот ответ https://stackoverflow.com/a/46582528/1046909 – MingalevME

+0

отличный ответ! – vanomart