2012-04-12 10 views
0

Ich versuche, 60 Tage facebook Zugriffstoken von Server Seite Anfrage zu bekommen. Nach Benutzer loged wird in I Zugriffstoken durch getAccessToken() -Funktion von Facebook SDK überprüfen und danach habe ich verwenden getExtendedAccessToken(), die ich irgendwo hier:Facebook Extended Access Token funktioniert nicht - aber alles scheint in Ordnung zu sein (?)

public function getExtendedAccessToken() { 

     try { 
     // need to circumvent json_decode by calling _oauthRequest 
     // directly, since response isn't JSON format. 
     $access_token_response = 
      $this->_oauthRequest(
       $this->getUrl('graph', '/oauth/access_token'), 
        $params = array( 'client_id' => $this->getAppId(), 
           'client_secret' => $this->getApiSecret(), 
           'grant_type'=>'fb_exchange_token', 
           'fb_exchange_token'=>$this->getAccessToken(), 
       )); 

     } catch (FacebookApiException $e) { 
     // most likely that user very recently revoked authorization. 
     // In any event, we don't have an access token, so say so. 
       return false; 
     } 

     if (empty($access_token_response)) { 
      return false; 
     } 

     $response_params = array(); 
     parse_str($access_token_response, $response_params); 
     if (!isset($response_params['access_token'])) { 
      return false; 
     } 

     return $response_params['access_token']; 
     } 

Unfortunanely es noch: How to extend access token validity since offline_access deprecation für 60 Tage Zugriffstoken fragen wird nicht meine Zugriffstoken arbeiten abgelaufen nach 2 Stunden, so habe ich versucht, auch diese:

public function getSimpleExtendedAccessToken(){ 

    $request = 'https://graph.facebook.com/oauth/access_token? 
       client_id='. $this->getAppId(). 
       '&client_secret=' .$this->getApiSecret(). 
       '&grant_type=fb_exchange_token 
       &fb_exchange_token=' .$this->getAccessToken(); 

    $response = file_get_contents($request); 
    $params = null; 
    parse_str($response, $params); 
    return $params['access_token']; 
} 

und dieses auch nach 2 Stunden abgelaufen. Aber wenn ich überprüft, was innerhalb des Arrays $params in der zweiten Funktion dort geschrieben wurde:

Array ([access_token] => AAAFM5sO7 [...] [Ablauf] => 4897)

(Dieser Teil: „AAAFM5sO7[...]“ ist natürlich meine Zugriffstoken Nummer)

Alle Zugriffstoken, die ich erhalten sind die gleichen: erste von getAccessToken(), zweite von getExtendedAccessToken() und dritte von getSimpleExtendedAccessToken().

Natürlich, wenn ich mehr und mehr für Extended Access Token fragen, die Ablaufnummer nicht erneuert, aber es zählt, und das ist aus der Sicht der Facebook-Dokumentation korrekt, weil Sie nicht fragen können jeden Moment ein neues Zugriffstoken, aber warum kann ich kein 60-Tage-Zugangstoken bekommen?

Kann jemand mir helfen, weil ich ein bisschen cofused bin?

+0

Es könnte sich lohnen, den Fehler in Ihrem 'try' /' catch' Block zu finden, da dieser den Schlüssel enthalten könnte. Speichern Sie es in einer Textdatei; Ich glaube, die Facebook-Beispiele haben einfach "error_log ($ e)". –

+0

Ich denke nicht, weil ich ein Zugriffs-Token von der ersten Funktion 'getExtendedAccessToken()' erhalten habe, nicht falsch, wie es in der Fehler-Sektion von 'try/cach' angezeigt wird. Auch die zweite Funktion 'getSimplyExtendedAccessToken()' gibt mir ein gültiges Zugriffs-Token - und diese zweite Funktion hat keinen 'try/cach'-Abschnitt. – Ziemo

+0

... so niemand weiß, wie dieses Problem zu lösen? – Ziemo

Antwort

1

Ich habe eine Teilantwort für meine eigene Frage. Ich habe versucht, ein eigenes Erweiterungs-Token zu erhalten (und ich bin der Besitzer der App), also hat Facebook mir kein erweitertes Token gegeben, aber wenn ich es mit einem anderen versucht habe, erhalte ich ein normales 60-Tage-Zugangstoken.