Получить информацию о подписке на покупки в Google Play через API - PullRequest
0 голосов
/ 06 ноября 2018

Вызов Google API получил это сообщение:

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

или это сообщение об ошибке ( ДОБАВЛЕНО ):

{
 "error": {
  "errors": [
   {
    "domain": "androidpublisher",
    "reason": "projectNotLinked",
    "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."
   }
  ],
  "code": 403,
  "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console."
 }
}

Я следую всем указаниям, которые нашел, и у меня продолжает появляться эта ошибка.


НА МОЕЙ СИСТЕМЕ

Мой код

        try {
            ini_set('max_execution_time', 3000);
            $client = new Google_Client();

            if ($credentials_file = $this->checkServiceAccountCredentialsFilePlay()) {
                // set the location manually
                $client->setAuthConfig($credentials_file);
            } elseif (getenv('GOOGLE_APPLICATION_CREDENTIALS')) {
                // use the application default credentials
                $client->useApplicationDefaultCredentials();
            } else {
                $rv= "missingServiceAccountDetailsWarning()";
                return [$rv];
            }

            $client->addScope("https://www.googleapis.com/auth/androidpublisher");
            $serviceAndroidPublisher = new \Google_Service_AndroidPublisher($client);
            $servicePurchaseSubscription = $serviceAndroidPublisher->purchases_subscriptions;

            $rv = $servicePurchaseSubscription->get(
                "com.my.app",
                "sub1month",
                "ajgbkxxxxxxxxx.AO-J1OxTOKENTOKENTOKEN-"
            );

        } catch (\Exception $e) {
            return $e->getMessage();
        }

Файл учетных данных

{
  "type": "service_account",
  "project_id": "project-id",
  "private_key_id": "abababababababababababababababababa",
  "private_key": "-----BEGIN PRIVATE KEY-----KEYBASE64=\n-----END PRIVATE KEY-----\n",
  "client_email": "google-play-account@project-id.iam.gserviceaccount.com",
  "client_id": "123450000000000000000",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/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/google-play-account%40project-id.iam.gserviceaccount.com"
}

НА КОНТРОЛЕ ИГРАЛА GOOGLE

Я связываю проект с игровой консолью Google. enter image description here

Я добавляю учетную запись службы в консоль Google Play. enter image description here

Он присутствует в пользовательском меню консоли Google Play. enter image description here

И я даю ему все разрешение: enter image description here


НА КОНСОЛЕ РАЗРАБОТЧИКА API Google

ADD FYI : мой "идентификатор проекта" находится в организации.

В консоли разработчика Google я дал все возможные разрешения учетной записи службы: enter image description here

И, конечно, я включил Google Play Android Developer Api (показывая мои ошибки): enter image description here

1 Ответ

0 голосов
/ 11 декабря 2018

У меня была такая же проблема.

В моем случае я использовал движок приложения Google (python) в качестве внутреннего сервиса. Сначала я связал новый облачный проект Google в консоли Google Play. Я не совсем уверен, является ли это основной причиной того, что я получил ошибку 401 «Недостаточно прав доступа», но после переключения связанного проекта на мой облачный проект (который я использовал для движка приложения) это сработало на следующий день. Сразу после смены аккаунта я получил ошибку 403 «проекты не связаны». Итак, я предполагаю, что Google не сразу распознает изменение связанных проектов, и вам нужно подождать несколько часов.

Если вы используете ядро ​​приложения, вы должны убедиться, что ваша учетная запись службы по умолчанию для ядра приложения имеет файл учетных данных JSON. Он не создан по умолчанию.

Вот код Python:

        if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
            # production environment
            credentials = oauth2client.contrib.appengine.AppAssertionCredentials(scope='https://www.googleapis.com/auth/androidpublisher')
            http = credentials.authorize(httplib2.Http(memcache))
            response = googleapiclient.discovery.build('androidpublisher', 'v3').purchases().subscriptions()\
                .get(packageName=package_name, subscriptionId=subscription.product_id, token=subscription.token)\
                .execute(http)
        else:
            # local environment
            # setting the scope is not needed because the api client handles everything automatically
            credentials = google.oauth2.service_account.Credentials.from_service_account_file('local_dev.json')
            response = googleapiclient.discovery.build('androidpublisher', 'v3', credentials=credentials).purchases().subscriptions()\
                .get(packageName=package_name, subscriptionId=subscription.product_id, token=subscription.token)\
                .execute()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...