Android: проверка квитанции о покупке в приложении (часть 2)

Я реализую покупку inApp в своем приложении и добавляю продукт как "Управление продуктом". После покупки я хочу выполнить проверку квитанции. Для этого я настраиваю в консоли разработчика, например

Этапы

  1. Консоль разработчика -> Настройки -> Доступ к API
  2. Создать учетную запись сервера
  3. Консоль разработчика Google -> Добавьте учетные данные в учетную запись службы и поместите их как JSON

  4. После добавления я получил файл из консоли разработчика, который содержит

    {
      "type": "service_account",
      "project_id": "api-xxxxx-xxx",
      "private_key_id": "xxxxxxxxxxxxxxxxxxxxxx",
      "private_key": "-----BEGIN PRIVATE KEY-----\ixxxxxxxxxxxxxxxx=\n-----END PRIVATE KEY-----\n",
       "client_email": "test-in-app-receipt-validation@api-xxxxxxx.iam.gserviceaccount.com",
       "client_id": "xxxxxxxxxxxxxxx",
       "auth_uri": "https://accounts.google.com/o/oauth2/auth",
       "token_uri": "https://accounts.google.com/o/oauth2/token",
       "auth_provider_x509_cert_url":   "https://www.googleapis.com/oauth2/v1/certs",
       "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/test-in-app-receipt-validation%40api-9129873511008807687-564452.iam.gserviceaccount.com"
       }
    

Но я не знаю, как сделать следующий шаг. Как использовать этот файл Проверка получения

После покупки получаю ответ как

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

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


person Binil Surendran    schedule 03.02.2016    source источник
comment
как вы получаете ответ, который включает информацию о покупке? Я не знаю, как это вызвать в моем приложении (java)?   -  person Learn2Code    schedule 10.07.2021


Ответы (1)


Продолжая ваш первоначальный вопрос, теперь, когда я знаю, что вы используете Java для вашего серверного кода, вы можете использовать клиентскую библиотеку Google API для Java. . Я сам не очень хорошо разбираюсь в Java, но документацию легко понять.

Во-первых, вам необходимо пройти аутентификацию, взгляните на пример кода предоставляет Google. В настоящее время у вас есть JWT (веб-токен JSON), но вы можете продолжить пример, вместо этого загрузив файл сертификата p12 из того же места на панели инструментов Google API.

Ваш код аутентификации должен выглядеть примерно так:

HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance()

GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
  .setJsonFactory(jsonFactory)
  .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
  .setServiceAccountScopes(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER))
  .setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
  .build();

Также не забудьте установить SERVICE_ACCOUNT_EMAIL и сохранить файл key.p12 в доступном для вашего сервера месте.

Если вам интересно, это документы AndroidPublisherScopes.

Как я уже говорил, мои познания в Java ограничены, поэтому, пожалуйста, не обращайте внимания на любые мои ошибки.

Google сделал несколько примеров кода доступными для скачивания и ссылками на репозитории GitHub. Я предлагаю проверить их.

Отсюда вы можете использовать AndroidPublisher.Purchases.Products.Get для получения сведений о покупке. Документы перечисляют подпись следующим образом:

AndroidPublisher.Purchases.Products.Get(java.lang.String packageName, java.lang.String productId, java.lang.String token)

Для подписки используйте AndroidPublisher.Purchases.Subscriptions.Get.

Если вам нужна дополнительная помощь, попробуйте задать вопрос с тегами java и google-api-java-client.

person Marc Greenstock    schedule 03.02.2016
comment
Большое спасибо, Марк @Marc Greenstock - person Binil Surendran; 04.02.2016