9

का उपयोग करके मैं एक अद्यतन पहुंच टोकन कैसे प्राप्त कर सकता हूं, मैं एक ऐसा एप्लिकेशन बना रहा हूं जो व्यवस्थापक को ऑफ़लाइन उपयोग के लिए अपने एनालिटिक्स खाते तक पहुंच प्रमाणित करने की अनुमति देता है, और डेटाबेस में रीफ्रेश टोकन संग्रहीत करता है।संग्रहित रीफ्रेश टोकन

"Access Token Expired. There wan a general error : The OAuth 2.0 access token has expired, and a refresh token is not available. Refresh tokens are not returned for responses that were auto-approved." 

यहाँ मेरी कोड है कि इस त्रुटि को अब तक उत्पन्न करता है::

require_once "lib/google/Google_Client.php"; 
require_once "lib/google/contrib/Google_AnalyticsService.php"; 

$_analytics = new analytics(); 
$_googleClient = new Google_Client(); 
$_googleClient->setClientId($_analytics->gaClientId); 
$_googleClient->setClientSecret($_analytics->gaClientSecret); 
$_googleClient->setRedirectUri($_analytics->gaRedirectUri); 
$_googleClient->setScopes($_analytics->gaScope); 
$_googleClient->setAccessType($_analytics->gaAccessType); 

// Returns last access token from the database (this works) 
$_tokenArray['access_token'] = $_analytics->dbAccessToken($_agencyId); 
$_googleClient->setAccessToken(json_encode($_tokenArray)); 

if($_googleClient->isAccessTokenExpired()) { 
    // Don't think this is required for Analytics API V3 
    //$_googleClient->refreshToken($_analytics->dbRefreshToken($_agencyId)); 
    echo 'Access Token Expired'; // Debug 
} 

if (!$_googleClient->getAccessToken()) { 
    echo '<h2>Error - Admin has not setup analytics correct yet</h2>'; 
} 

मैं के बाद कर रहा हूँ

अब जब मैं दृश्यपटल पर एपीआई का उपयोग करने का प्रयास करें, यह निम्नलिखित त्रुटि देता है setRefreshToken जैसे कुछ चलाने के लिए एक फ़ंक्शन - डेटाबेस से मूल्य दर्ज करना, व्यवस्थापक से पहले इसे ऑनलाइन प्रमाणित करना।

उत्तर

7

आप निम्न का प्रयास कर सकते हैं, आपको अपने डेटाबेस में नया टोकन स्टोर करने के लिए कोड में जोड़ना होगा।

if($_googleClient->isAccessTokenExpired()) { 
    // Don't think this is required for Analytics API V3 
    //$_googleClient->refreshToken($_analytics->dbRefreshToken($_agencyId)); 
    echo 'Access Token Expired'; // Debug 

    $_googleClient->authenticate(); 
    $NewAccessToken = json_decode($_googleClient->getAccessToken()); 
    $_googleClient->refreshToken($NewAccessToken->refresh_token); 
} 
+1

कि यह तय हो गई है, साथ ही मैं पहुँच टी का उपयोग कर टोकन ताज़ा करने के लिए कोशिश कर रहा था ओकेन, ताज़ा टोकन का उपयोग करने के बजाय यह सर्वो है। # फील - धन्यवाद! – mattpark22

+1

क्या आप में से कोई भी जानता है कि मैं एक नया एक्सेस टोकन प्राप्त करने के लिए रीफ्रेश टोकन फ़ंक्शन का उपयोग करके परीक्षण करने की अवधि समाप्त करने के लिए कैसे पहुंच सकता हूं? @mpark – Anagio

+1

@Anagio आपको एक नया टोकन मजबूर करने के लिए '$ _googleClient-> रीफ्रेश टोकन ($ NewAccessToken-> refresh_token) चलाने में सक्षम होना चाहिए;' । फिर यह देखने के लिए कि क्या यह बदल गया है, पुराने के साथ पुराने टोकन की तुलना करें। –

0

कोशिश/पकड़ का उपयोग करें और पहुंच टोकन के पुनर्निर्देशन/ताज़ा करने के लिए पकड़ का उपयोग करें। नीचे समाधान मैं इसी तरह की समस्या के लिए इस्तेमाल किया है:

$plus = new Google_Service_Plus($client); 
try { 
$me = $plus->people->get('me'); 
} catch(Exception $e){ 
     if(!(strpos($_SERVER["REQUEST_URI"],'logout'))){ 
     if (isset($authUrl)){ 
       $redirect = $authUrl; 
     } 
     else{ 
        $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] .'?logout'; 
     } 
     header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL)); 
     exit; 
} 

आप लाइन अपवाद फेंकने के साथ कोशिश के तहत बयान की जगह ले सकता, मुझे लगता है कि

$_googleClient->setClientId($_analytics->gaClientId); 

होगा या आप भी ताज़ा कोशिश कर सकते हैं प्रति समाधान के रूप में टोकन यहाँ दी:

https://stackoverflow.com/a/22096740/1675384

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