Intereting Posts

Подписка на Android и API Google

Я пытаюсь использовать новую подписную систему Android от Google Play в своем приложении (у меня уже была работа с биллингами в приложении). Я успешно выполнил подписку на подписку, но теперь хочу получить информацию об этой подписке, используя google apis, как указано в документации по Android (http://developer.android.com/guide/market/billing/billing_subscriptions.html) ,

Я хочу, чтобы мой сервис мог выполнять вызов API для извлечения этих сведений, но у меня проблемы с аутентификацией (с oauth2). Пока это то, что я делаю (в моем php-сервисе):

require_once 'google-api-php-client/src/apiClient.php' const SERVICE_ACCOUNT_NAME = 'email from services account access'; $key = 'content of my private key retrieved from services account access'; $client = new apiClient(); $cred = new apiAssertionCredentials(SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/androidpublisher'), $key); $assertion = $cred->generateAssertion(); // This generate my encrypted JWT 

Затем я пытаюсь получить токен доступа с этим объектом JWT. Проблема в том, что, когда я использую токен доступа, я получил ошибку, которую учетная запись разработчика не имеет в своем приложении, что неверно.

(Я знаю, что это не способ сделать это, но я просто хотел получить access_token с помощью JWT, чтобы понять, почему он не работает, если я это сделаю, как указано в документации google apis, он тоже не работает).

Мне нужно сделать этот вызов API с сервера, поэтому ни один конечный пользователь не должен участвовать (без согласия руководства).

Solutions Collecting From Web of "Подписка на Android и API Google"

У меня была такая же проблема, и в итоге я обнаружил, что на данный момент учетные записи службы не могут получить доступ к Play API.

Я не уверен, когда Google планирует это исправлять, но вы можете обойти это, создав идентификатор клиента веб-приложения и настроив базовую страницу входа, чтобы сначала создать код с использованием нового веб-приложения. Данные клиента и переход на $ client- > createAuthUrl ():

 $client = new apiClient(); $key = file_get_contents(KEY_FILE); $client->setClientId(CLIENT_ID); $client->setClientSecret(CLIENT_SECRET); $client->setRedirectUri(MY_WEBAPP_URL); $client->setDeveloperKey($key); $client->setScopes(array('https://www.googleapis.com/auth/androidpublisher')); $authUrl = $client->createAuthUrl(); print "<a class='login' href='$authUrl'>Connect Me!</a>"; 

Это приведет вас к странице входа в систему Google, где вы должны войти в систему с учетной записью разработчика. Когда вы авторизуете приложение, оно вернет вас к URL вашего веб-приложения, как это определено при настройке идентификатора клиента с помощью CODE в качестве параметра get. Вы можете использовать для создания токена (и, что более важно, токена обновления), например:

 $url = 'https://accounts.google.com/o/oauth2/token'; $fields = array( 'grant_type'=>'authorization_code', 'code'=>$code, 'client_id'=>CLIENT_ID, 'client_secret'=>CLIENT_SECRET, 'redirect_uri'=>MY_WEBAPP_URL ); // cURL call to OAuth URL with $fields sent as POST 

Это должно вернуть вам данные JSON с токеном обновления. Сохраните этот токен и используйте его для совершения другого вызова, когда вам нужно создать токен доступа. Вы по существу будете запускать тот же код, что и вы, чтобы получить токен обновления, но с разными полями:

 $fields = array( 'grant_type'=>'refresh_token', 'refresh_token'=>$refresh_token, 'client_id'=>CLIENT_ID, 'client_secret'=>CLIENT_SECRET, ); 

Это даст вам токен доступа, который вы можете использовать для получения данных о покупке по следующему URL-адресу: https://www.googleapis.com/androidpublisher/v1/applications/[PACKAGE]/subscriptions/[SKU]/purchases/[PURCHASE_TOKEN]?access_token=[ACCESS_TOKEN]

Трюк получает токен обновления, как только у вас есть, что остальное должно быть довольно простым.

У меня такая же проблема. Это происходит потому, что вы разрешаете пользователю в Google API, который не владеет этим приложением, и пытайтесь получить данные, которые соответствуют вашему приложению.

В этом разделе это хорошо описано. http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=2528691&topic=16285&ctx=topic

Вы должны разрешить OAuth2 владельцу приложения, а затем использовать Google API с полученным токеном.