Подтвердить что ты не робот

Получить статус подписки на Android, не удалось с помощью 403

При попытке получить статус подписки на Android в приложении (с датой истечения срока действия), я получаю следующее сообщение об ошибке:

{
 "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."
 }
}

URL-адрес: https://www.googleapis.com/androidpublisher/v2/applications/[packageName]/inapp/[productId]/purchases/[purchase_token]?access_token=[access_token]

В нем говорится, что идентификатор проекта не связан. Я сделал следующее:

1. Create the project in Google Developer Console.
2. Turn on the Google Android Publisher API.
3. Link the project ID as mentioned in API access page (https://developers.google.com/android-publisher/getting_started)
4. Fill in the packageName, productId (from in app-purchase), purchase_token (from Android app)

Не знаю, почему сообщение об ошибке появляется, как указано выше. Я пробовал с игровой площадкой OAuth2 без везения (https://developers.google.com/oauthplayground/)

4b9b3361

Ответ 1

Я потратил некоторое время на это, но в конце в сообщении об ошибке говорится все: "[...] не был связан в консоли разработчика Google Play".

Я часами смотрел в консоли разработчика Google, но место, где можно связать проект, находится в консоли разработчика Google Play.

Просто зайдите в Настройки → Api Access, и вы сможете связать проект, созданный в консоли разработчика Google.

Вот работающее PHP-решение для получения статуса подписки. Вам необходимо создать учетную запись службы в консоли разработчика Google → "ваш проект" → API и Auth → Credential и загрузить клиент PHP API Google из https://github.com/google/google-api-php-client

    set_include_path("../src/" . PATH_SEPARATOR . get_include_path());
    require_once 'Google/Client.php';
    require_once 'Google/Service/AndroidPublisher.php';

    $client_id = '';    //Your client id
    $service_account_name = '';  //Your service account email
    $key_file_location = ''; //Your p12 file (key.p12)

    $client = new Google_Client();
    $client->setApplicationName(""); //This is the name of the linked application
    $service = new Google_Service_AndroidPublisher($client);

    $key = file_get_contents($key_file_location);
    $cred = new Google_Auth_AssertionCredentials(
        $service_account_name,
        array('https://www.googleapis.com/auth/androidpublisher'),
        $key
    );
    $client->setAssertionCredentials($cred);
    if($client->getAuth()->isAccessTokenExpired()) {
      $client->getAuth()->refreshTokenWithAssertion($cred);
    }        
    $apiKey = ""; //Your API key
    $client->setDeveloperKey($apiKey);

    $package_name = ""; //Your package name (com.example...)
    $subscriptionId = "";   //SKU of your subscription item

    //Token returned to the app after the purchase
    $token = "";

    $service = new Google_Service_AndroidPublisher($client);
    $results = $service->purchases_subscriptions->get($package_name,$subscriptionId,$token,array());

    print_r ($results); //This object has all the data about the subscription
    echo "expiration: " . $results->expiryTimeMillis;
    exit;

Ответ 2

У меня такая же проблема. Кажется, аутентификация изменилась в v2 api.

Вы все равно можете использовать старую конечную точку api (v1.1). он отлично работает для меня.

https://www.googleapis.com/androidpublisher/v1.1/applications/{packageName}/inapp/{productId}/purchases/{token}

Ответ 3

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

Ответ 4

Это 2019 год, и эта проблема все еще существует. Однако в другом ответе я обнаружил, что кто-то сказал, что вы должны создать новый продукт в своей учетной записи после настройки этого приложения... и это действительно работает для меня.