2012-05-30 43 views
7

Google Play'den yeni Android abonelik sistemini uygulamamda kullanmaya çalışıyorum (Zaten uygulama içi faturalandırmada iyi çalıştım). Abonelik faturalandırmayı başarıyla tamamladım, ancak şimdi bu dokümanla ilgili bilgileri Google dokümanında belirtildiği gibi google apis kullanarak almak istiyorum (http://developer.android.com/guide/market/billing/billing_subscriptions.html) .Android aboneliği ve Google API

Hizmetimin bu bilgileri almak için API çağrısı yapabilmesini istiyorum, ancak kimlik doğrulamayla ilgili sorun yaşıyorum (oauth2 ile). Şimdiye kadar, bu (benim php hizmetinde) ne olduğunu:

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 

Daha sonra bu JWT nesneyle erişim kodunu almasına deneyin. Sorun şu ki, verilen erişim belirtecini kullandığımda, geliştirici hesabının uygulamaya sahip olmadığına dair bir hata aldım, bu doğru değil.

(Bunu yapmanın bir yolu olmadığını biliyorum, ancak sadece neden çalışmadığını anlamak için JWT'yi kullanarak access_token'i geri almak istedim, eğer google apis belgelerinde belirtildiği gibi yaparsam çalışmaz çok).

Bu API çağrısını bir sunucudan yapmalıyım, dolayısıyla hiçbir son kullanıcı içermemelidir (el ile izin verilmez).

cevap

7

Aynı sorunu yaşadım ve sonuçta şu anda hizmet hesapları Play API'sine erişemediğini keşfettiler.

Google'ın bunu düzeltmeyi planladığından emin değilim, ancak bir web uygulaması istemci kimliği oluşturarak ve önce yeni web uygulaması İstemci verilerini kullanarak bir kod oluşturmak için temel bir giriş sayfası oluşturarak bunu başarabilirsiniz. $ client- için> 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>"; 

Bu geliştirici hesabı ile oturum gereken bir Google giriş sayfasına götürecektir. Uygulamayı yetkilendirdiğinizde, müşteri kimliğini bir CODE ile get parametresi olarak ayarladığınızda, tanımladığınız web uygulama URL'nize geri dönersiniz. Çok gibi (daha da önemlisi, bir yenileme jetonu ve) bir belirteç oluşturmak için kullanabilirsiniz:

$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 

Bu yenileme jetonuyla size JSON verilerini dönmelidir. Bu simgeyi kaydedin ve bir erişim belirteci oluşturmanız gerektiğinde başka bir arama yapmak için kullanın. Sen aslında ama farklı alanlarda, sen yenileme jetonu almak üzere yaptığı aynı kodu çalışacaktır: https://www.googleapis.com/androidpublisher/v1/applications/[PACKAGE]/subscriptions/[SKU]/purchases/[PURCHASE_TOKEN]?access_token=[ACCESS_TOKEN]

:

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

Bu aşağıdaki URL'den alım verileri almak için kullanabilirsiniz belirteç size bir erişim verecektir

Geri kalanlar oldukça basit olması gerektiğinde, hile yenileme jetonunu alıyor.

+0

@ Ahmed ... Bu "Yüce" den bir cevap gibi görünüyor. – dell116

+1

El ile bunu nasıl yapacağınız: https://developers.google.com/android-publisher/authorization – Chloe