Android订阅和Google API

我正尝试使用Google Play中新的Android订阅系统进入我的应用程序(我已经有了应用内结算工作正常)。 我已经成功地完成了订阅计费,但是现在我想通过使用google apis检索有关此订阅的信息,如android文档(http://developer.android.com/guide/market/billing/billing_subscriptions.html)中所示。 。

我希望我的服务能够执行API调用来检索这些信息,但是我有身份validation问题(使用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对象检索访问令牌。 问题是,当我使用访问令牌时,我得到了开发人员帐户不拥有应用程序的错误,这是不正确的。

(我知道这不是这样做的,但我只是想使用JWT检索access_token来理解为什么它不工作,如果我按照google apis文档中的说明,它不工作)。

我需要从服务器执行这个API调用,因此不需要涉及最终用户(无需手动同意)。

Solutions Collecting From Web of "Android订阅和Google API"

我有同样的问题,并最终发现,截至目前,服务帐户无法访问Play API。

我不知道Google何时计划解决此问题,但是您可以通过创buildWeb应用程序客户端ID并设置基本login页面来首先使用新的Web应用程序客户端数据生成代码,然后转到$ 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>"; 

这应该带您到一个Googlelogin页面,您应该使用开发者帐户login。 当您授权该应用程序时,它会将您返回到您的Web应用程序URL,如您使用CODE作为get参数设置客户端ID时所定义的。 你可以用它来产生一个令牌(更重要的是,一个刷新令牌),像这样:

 $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] : https://www.googleapis.com/androidpublisher/v1/applications/[PACKAGE]/subscriptions/[SKU]/purchases/[PURCHASE_TOKEN]?access_token=[ACCESS_TOKEN] subscriptions/[ https://www.googleapis.com/androidpublisher/v1/applications/[PACKAGE]/subscriptions/[SKU]/purchases/[PURCHASE_TOKEN]?access_token=[ACCESS_TOKEN] purchases/[ 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。