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 и нажмите кнопку Создать новый проект:
теперь вы должны увидеть новый проект и несколько новых разделов, в разделе Учетная запись службы нажмите кнопку Создать учетную запись службы.
вам будет представлен информационный ящик с инструкциями по созданию учетной записи службы. Нажмите на ссылку Google Developers Console и появится новая вкладка.
теперь нажмите Create new Client ID, выберите Service account из параметров и нажмите Create Client ИДЕНТИФИКАТОР.
файл JSON будет загружен, это ваш веб-токен JSON, который вы будете использовать для обмена на access_token
так держать его в безопасности.
затем переключите вкладки обратно на консоль разработчика Google play и нажмите "Готово" в поле "информация". Вы должны увидеть свою новую учетную запись службы в списке. Нажмите "предоставить доступ" рядом с электронной почтой учетной записи службы.
далее под выбрать роль для этого пользователя выберите Finance и нажмите Add user.
теперь вы настроили свою учетную запись службы, и она имеет весь необходимый доступ для выполнения проверки квитанций. Далее идет обмен JWT на access_token.
на access_token
истекает после одного часа обмена вам так нужен код сервера для обработки этого, и Google предоставил несколько библиотек на многих языках для обработки этого (список не исчерпывающий):
- Руби:https://github.com/google/google-api-ruby-client
- узел.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
вам хорошо идти (по крайней мере, в течение следующего часа, когда вы захотите запросить новый, следуя тому же процессу в приведенном выше абзаце).
для проверки состояния 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. скриншоты