2012-05-30 95 views
7

我正嘗試從Google Play使用新的Android訂閱系統進入我的應用程序(我已經有了應用內結算工作正常)。我已經成功完成了訂閱計費,但是現在我想通過使用google apis檢索有關此訂閱的信息,如android文檔(http://developer.android.com/guide/market/billing/billing_subscriptions.html)中所示。 。Android訂閱和谷歌API

我希望我的服務能夠執行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對象的訪問令牌。問題是,當我使用訪問令牌時,我得到了開發人員帳戶不擁有該應用程序的錯誤,這是不正確的。

(我知道這不是做這件事的方法,但我只是想使用JWT檢索access_token,瞭解它爲什麼不起作用,如果按照google apis文檔中指出的那樣工作,它不起作用太)。

我需要從服務器執行此API調用,因此不需要最終用戶參與(無需手動同意)。

回答

7

我有同樣的問題,並最終發現,截至目前,服務帳戶無法訪問Play API。

我不確定Google何時計劃解決此問題,但您可以通過創建Web應用程序客戶端ID並設置基本登錄頁面以首先使用新的Web應用程序客戶端數據生成代碼並去至$客戶 - > 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>"; 

這應該帶你到谷歌登錄頁面,你應該與開發者帳號登錄。當您授權該應用程序時,它會將您返回到您的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, 
); 

這會給你一個訪問令牌,你可以用它來獲得從以下網址購買數據: https://www.googleapis.com/androidpublisher/v1/applications/[PACKAGE]/subscriptions/[SKU]/purchases/[PURCHASE_TOKEN]?access_token=[ACCESS_TOKEN]

訣竅是獲取刷新令牌,一旦你有其餘的應該是非常簡單的。

+0

@艾哈邁德...這看起來像是從「全能!」的答案。 – dell116

+1

以下是如何手動執行此操作:https://developers.google.com/android-publisher/authorization – Chloe