1

J'utilise Facebook SDK v5 pour PHP et j'essaie d'obtenir un jeton d'accès USER de longue durée.
Je l'obtiens, fait une longue vie et enregistre dans ma base de données, puis je vais à une autre page où je l'utilise pour obtenir l'accès à Facebook PAGE. À ce stade, tout va bien. Ensuite, j'actualise ma page et User AccessToken a ["expiry at"] défini sur 1970-01-01.
Je n'ai aucune idée de ce qui se passe, parce que je ne réécris pas ce jeton d'accès dans la base de données. Et la chose la plus câblée est que, ce jeton fonctionne avec Facebook. Il y a donc mon code et ma réponse avant et après le rafraîchissement.Facebook PHP SDK Le jeton d'accès de longue durée expire après l'actualisation du site

$config = array(); 
     $config['app_id'] = xxx 
     $config['app_secret'] = xxx 
     $config['fileUpload'] = false;   
     if(!empty(tokenFromDatabse)){    
      $config['default_access_token'] = tokenFromDatabse; 
     }   
     $fb = new Facebook($config); 
     $oAuth2Client = $fb->getOAuth2Client(); 
     if(!empty(tokenFromDatabse)){ 
      try{  
       $tokenMetadata = $oAuth2Client->debugToken($fb->getDefaultAccessToken()); 
       $tokenMetadata->validateAppId($config['app_id']); 
       $tokenMetadata->validateExpiration(); 
       } 

C'est juste tout ce que cette action fait, il y a bien sûr du code catch. Et maintenant, la première réponse de facebook est:

object(Facebook\Authentication\AccessTokenMetadata)#689 (1) { 
    ["metadata":protected]=> 
    array(7) { 
    ["app_id"]=> 
    string(15) "xxx" 
    ["application"]=> 
    string(13) "Local_app" 
    ["expires_at"]=> 
    object(DateTime)#691 (3) { 
     ["date"]=> 
     string(26) "2015-10-20 16:07:56.000000" 
     ["timezone_type"]=> 
     int(3) 
     ["timezone"]=> 
     string(13) "Europe/Berlin" 
    } 
    ["is_valid"]=> 
    bool(true) 
    ["issued_at"]=> 
    object(DateTime)#692 (3) { 
     ["date"]=> 
     string(26) "2015-08-21 16:07:56.000000" 
     ["timezone_type"]=> 
     int(3) 
     ["timezone"]=> 
     string(13) "Europe/Berlin" 
    } 
    ["scopes"]=> 
    array(3) { 
     [0]=> 
     string(12) "manage_pages" 
     [1]=> 
     string(13) "publish_pages" 
     [2]=> 
     string(14) "public_profile" 
    } 
    ["user_id"]=> 
    string(15) "xxx" 
    } 

Et après rafraîchissement ressemble que:

object(Facebook\Authentication\AccessTokenMetadata)#689 (1) { 
     ["metadata":protected]=> 
     array(7) { 
     ["app_id"]=> 
     string(15) "xxx" 
     ["application"]=> 
     string(13) "Local_app" 
     ["expires_at"]=> 
     object(DateTime)#691 (3) { 
      ["date"]=> 
      string(26) "1970-01-01 01:00:00.000000" 
      ["timezone_type"]=> 
      int(3) 
      ["timezone"]=> 
      string(13) "Europe/Berlin" 
     } 
     ["is_valid"]=> 
     bool(true) 
     ["issued_at"]=> 
     object(DateTime)#692 (3) { 
      ["date"]=> 
      string(26) "2015-08-21 16:07:56.000000" 
      ["timezone_type"]=> 
      int(3) 
      ["timezone"]=> 
      string(13) "Europe/Berlin" 
     } 
     ["scopes"]=> 
     array(3) { 
      [0]=> 
      string(12) "manage_pages" 
      [1]=> 
      string(13) "publish_pages" 
      [2]=> 
      string(14) "public_profile" 
     } 
     ["user_id"]=> 
     string(15) "xxx" 
     } 
+0

Peut-être un bug abonnez-vous à ce bug https://developers.facebook.com/bugs/111761385842972 –

Répondre

0

jetons d'accès page étendue ne sont pas d'expiration par défaut du tout. Et en raison des détails d'implémentation, un jeton d'accès utilisateur utilisé pour demander un jeton d'accès à la page étendue devient également "indéfiniment" valide. Donc, la valeur d'expiration sera 0, null ou quelque chose comme ça. Et quand formaté comme une date, cela devient 1970-01-01, puisque c'est le début de l'époque unix.

+0

Mais la date d'expiration est définie par PHP SDK en fonction: $ oAuth2Client-> getLongLivedAccessToken (court-jeton vécu); – Khanrad

+0

Aucune idée de ce que vous entendez par là. – CBroe

+0

Je veux dire que le jeton d'aces utilisateur est changé en étendu avant qu'il ne soit sauvegardé dans la base de données. Et je définis la valeur de "expiry at" avec la fonction du SDK, cela signifie que je n'utilise pas null comme valeur. – Khanrad