簡體   English   中英

通過API檢索有關Google Play的應用內購買訂閱的信息

[英]Retrieve info about a in-app purchase subscription of Google Play via API

調用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."
  }
}

或此錯誤消息( ADDED ):

{
 "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 Play控制台上

我將項目鏈接到Google Play控制台 在此處輸入圖片說明

我將服務帳戶添加到Google Play控制台 在此處輸入圖片說明

它存在於Google Play控制台的用戶菜單中 在此處輸入圖片說明

我完全允許他: 在此處輸入圖片說明


在GOOGLE API開發人員控制台上

僅供參考 :我的“項目ID”在某個組織下。

在Google Developer Console中,我將所有可能的權限授予了該服務帳戶: 在此處輸入圖片說明

當然,我已經啟用了Google Play Android開發者Api(顯示我的失敗): 在此處輸入圖片說明

我有同樣的問題。

就我而言,我使用的是Google App Engine(python)作為后端服務。 首先,我在Google Play控制台中鏈接了一個新的Google雲項目。 我不完全確定這是否是我收到401“權限不足”錯誤的主要原因,但是在將鏈接的項目切換到我的雲項目(用於應用程序引擎)后,第二天它就可以工作了。 切換帳戶后,我立即收到403個“未鏈接的項目”錯誤。 因此,我猜想Google無法立即識別出所鏈接項目的更改,因此您需要等待幾個小時。

如果您使用的是App Engine,則必須確保您的App Engine的默認服務帳戶具有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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM