Как проверить правильность покупки приложения на сервере Android на Java? - PullRequest
0 голосов
/ 17 октября 2018

Я следовал этому уроку: https://medium.com/@infinitesimal_/doing-android-purchase-validation-api-v3-in-java-5c46fc837368

Но я не могу заставить его работать!Все, что я могу получить, это:

{
  "code" : 401,
  "errors" : [ {
    "domain" : "androidpublisher",
    "message" : "The current user has insufficient permissions to perform the requested operation.",
    "reason" : "permissionDenied"
  } ],
  "message" : "The current user has insufficient permissions to perform the requested operation."
}

Это мой код Java:

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();    

    JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance();        
    String applicationName = "My App";       
    String packageName = "com.my.package";
    final Set<String> scopes = Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER);
    GoogleCredential credential = new GoogleCredential.Builder()                    
        .setTransport(httpTransport)                        
        .setJsonFactory(jsonFactory)                    
        .setServiceAccountId("myAccoutId")                     
        .setServiceAccountScopes(scopes)                    
        .setServiceAccountPrivateKeyFromP12File(
          new File("/my/path"))                    
        .build();

    AndroidPublisher pub = new AndroidPublisher.Builder
            (httpTransport, jsonFactory, credential)                     
            .setApplicationName(applicationName)                    
            .build();            
        final AndroidPublisher.Purchases.Products.Get get = 
            pub.purchases()
            .products()                    
            .get(packageName, "name", "transactionId"); 
        final ProductPurchase purchase = get.execute();            
        System.out.println("Found google purchase item " + purchase.toPrettyString());

Я создал учетную запись службы и дал роль владельца.Я пошел в консоль Google Play, и в разделе «Пользователи и разрешения» я также разрешил эту учетную запись службы в качестве администратора.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Ответ Дмитрия Богдановича не помогает.

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

0 голосов
/ 04 февраля 2019

Мы использовали тот же пример и внесли несколько изменений, чтобы он работал:

  1. Вместо имени приложения используйте имя пакета: замените .setApplicationName(applicationName) на .setApplicationName(packageName)

  2. Вместо P12 мы используем ключ JSON: GoogleCredential credential = GoogleCredential.fromStream(IOUtils.toInputStream(jsonCert));

, где jsonCert - это ключ JSON (учетные записи служб -> Выбратьаккаунт -> Создать ключ) выглядит как

{
"type": "service_account",
"project_id": "api-xxx",
"private_key_id": "xxx",
"private_key": "your_private_key",
"client_email": "api-server-service-account@api-xxx.iam.gserviceaccount.com",
"client_id": "xxx",
"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/api-server-service-account%40api-xxx.iam.gserviceaccount.com"
};

Обновление : в соответствии с @Q Locker, Google может потребоваться некоторое время для предоставления учетной записи службы после создания (до 2 дней в@Q дело Локера).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...