2012-05-30 16 views
7

मैं अपने एप्लिकेशन में Google Play से नई एंड्रॉइड सदस्यता प्रणाली का उपयोग करने की कोशिश कर रहा हूं (मेरे पास पहले से ही ऐप-एप बिलिंग ठीक काम कर रहा है)। मैंने सदस्यता बिलिंग सफलतापूर्वक कर ली है, लेकिन अब मैं एंड्रॉइड दस्तावेज (http://developer.android.com/guide/market/billing/billing_subscriptions.html) में बताए गए Google एपिस का उपयोग करके इस सदस्यता के बारे में जानकारी पुनर्प्राप्त करना चाहता हूं। ।एंड्रॉइड सदस्यता और Google एपीआई

मैं चाहता हूं कि मेरी सेवा इन सूचनाओं को पुनर्प्राप्त करने के लिए एपीआई कॉल करने में सक्षम हो, लेकिन मुझे प्रमाणीकरण (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 

मैं तो इस जेडब्ल्यूटी वस्तु के साथ पहुँच टोकन प्राप्त करने का प्रयास करें। समस्या यह है कि जब मैं एक्सेस टोकन का उपयोग करता हूं तो मुझे त्रुटि मिली है कि डेवलपर खाते में एप्लिकेशन का स्वामित्व नहीं है, जो सत्य नहीं है।

(मुझे पता है कि यह करने का कोई तरीका नहीं है, लेकिन मैं यह समझने के लिए जेडब्ल्यूटी का उपयोग करके access_token को पुनर्प्राप्त करना चाहता था, यह समझने के लिए कि यह क्यों काम नहीं कर रहा है, अगर मैं इसे Google एपिस दस्तावेज़ में इंगित करता हूं तो यह काम नहीं कर रहा है भी)।

मुझे सर्वर से यह API कॉल करने की आवश्यकता है, इसलिए कोई अंतिम उपयोगकर्ता शामिल नहीं होना चाहिए (कोई मैन्युअल सहमति नहीं है)।

उत्तर

7

मेरे पास एक ही समस्या थी, और आखिर में पता चला कि अभी तक सेवा खाते Play API तक नहीं पहुंच सकते हैं।

मुझे यकीन नहीं है कि Google इसे ठीक करने की योजना बना रहा है, लेकिन आप वेब ऐप क्लाइंट आईडी बनाकर और एक नया लॉगिन ऐप क्लाइंट डेटा जाकर और कोड बनाने के लिए मूल लॉगिन पृष्ठ सेट करके इसे प्राप्त कर सकते हैं। $ ग्राहक के लिए> 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 = '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 डेटा लौटना चाहिए। इस टोकन को सहेजें और जब भी आपको एक्सेस टोकन उत्पन्न करने की आवश्यकता हो तो एक और कॉल करने के लिए इसका उपयोग करें। आप अनिवार्य रूप से, एक ही कोड आप ताज़ा टोकन प्राप्त करने के लिए किया था चलेगा, लेकिन विभिन्न क्षेत्रों के साथ: 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, 
); 

यह आपको एक पहुँच टोकन आप निम्न URL से खरीद डेटा प्राप्त करने के लिए उपयोग कर सकते दे देंगे

यह चाल एक बार ताज़ा टोकन प्राप्त कर रही है, एक बार जब आपके पास बाकी सीधा होना चाहिए।

+0

@ अहमद ... यह "सर्वशक्तिमान" से एक जवाब की तरह दिखता है! – dell116

+1

यहां मैन्युअल रूप से इसे कैसे करें: https://developers.google.com/android-publisher/authorization – Chloe

0

मुझे एक ही समस्या है। ऐसा इसलिए होता है क्योंकि आप Google एपीआई में उपयोगकर्ता को अधिकृत करते हैं, जिसके पास एप्लिकेशन नहीं है और आपके ऐप पर डेटा प्राप्त करने का प्रयास करें।

इस विषय में यह अच्छी तरह से वर्णित है। http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=2528691&topic=16285&ctx=topic

आपको OAuth2 द्वारा एप्लिकेशन के स्वामी द्वारा अधिकृत करना चाहिए, और फिर प्राप्त टोकन के साथ Google API का उपयोग करना चाहिए।

संबंधित मुद्दे