facebook-graph-api access - facebook:¿Token permanente de acceso a la página?




page generar (12)

Mientras obtenía el token de acceso permanente, seguí los 5 pasos anteriores como Donut mencionó. Sin embargo, en el 5º paso, mientras se genera el token de acceso permanente, se devuelve el token de acceso de larga duración (que es válido durante 2 meses) y no el token de acceso permanente (que nunca caduca). Lo que noté es que la versión actual de Graph API es V2.5. Si tratas de obtener el token de acceso permanente con V2.5 es un token de acceso de larga duración. Intenta realizar una llamada a API con la V2.2 (si no puedes cambiar la versión en el explorador de API de gráficos, pulsa la API https://graph.facebook.com/v2.2/ {account_id} / accounts? access_token = {long_lived_access_token} en la nueva pestaña con V2.2) entonces obtendrás el token de acceso permanente (que nunca caduca)

Trabajo en un proyecto que tiene páginas de Facebook como una de sus fuentes de datos. Importa algunos datos periódicamente sin ninguna GUI involucrada. Luego usamos una aplicación web para mostrar los datos que ya tenemos.

No toda la información es pública. Esto significa que tengo que tener acceso a los datos una vez y luego guardarlos. Sin embargo, no conozco el proceso y aún no he encontrado un buen tutorial sobre eso. Supongo que necesito un access_token , ¿cómo puedo obtenerlo del usuario, paso a paso? El usuario es un administrador de una página de Facebook, ¿tendrá que agregar alguna aplicación de FB a la página?

EDITAR: Gracias @phwd por la propina. Hice un tutorial sobre cómo obtener un token de acceso a la página permanente, incluso con el offline_access ya no existe.

EDITAR: Me acabo de enterar de que se responde aquí: token de acceso de FB de larga duración para que el servidor extraiga la información de la página de FB


Aquí está mi solución usando Graph API Explorer y Access Token Debugger :

  1. Graph API Explorer:
    • Seleccione su aplicación en el menú desplegable superior derecho
    • Seleccione "Obtener token de acceso de usuario" del menú desplegable (campo de token de acceso) y seleccione los permisos necesarios
    • Copiar token de acceso de usuario
  2. Depurador de testigos de acceso:
    • Pegue el token copiado y presione "Depurar"
    • Presiona "Extender token de acceso" y copia el token de acceso de usuario generado de larga vida
  3. Graph API Explorer:
    • Pegar el token copiado en el campo "Token de acceso"
    • Haga una solicitud GET con "PAGE_ID? Fields = access_token"
    • Encuentra el token de acceso a la página permanente en la respuesta (nodo "access_token")
  4. (Opcional) Depurador de tokens de acceso:
    • Pega el token permanente y presiona "Debug"
    • "Caduca" debe ser "Nunca"

(Probado con API Version 2.9-2.11)


Además de los métodos mencionados, vale la pena mencionar que para aplicaciones de servidor a servidor, también puede usar esta forma de token de acceso permanente: app_id | app_secret Este tipo de token de acceso se llama Token de aplicación. En general, se puede usar para llamar a Graph API y consultar nodos públicos dentro de la aplicación back-end. Se menciona aquí: https://developers.facebook.com/docs/facebook-login/access-tokens


Si solo está solicitando datos de página, puede usar un token de acceso a la página. Solo tendrá que autorizar al usuario una vez para obtener el token de acceso del usuario; extenderlo a dos meses de validez luego solicitar el token para la página. Todo esto se explica en el Escenario 5 . Tenga en cuenta que el token de acceso a la página adquirido solo es válido mientras el token de acceso del usuario sea válido.


Hice un script PHP para hacerlo más fácil. Crea una aplicación En Graph API Explorer, seleccione su aplicación y obtenga un token de usuario con permisos de manage_pages y publish_pages. Encuentra la ID de tu página en la parte inferior de su página Acerca de. Complete los valores de configuración y ejecute el script.

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}

Se alcanzó el límite de solicitud de aplicación (n. ° 4) - FB API v2.1 y superior

Esta respuesta me llevó a la "respuesta definitiva para nosotros", por lo que está muy relacionada, así que la añado aquí. Si bien está relacionado con lo anterior, es diferente y parece que FB ha simplificado el proceso un poco.

Nuestro compartir cuenta en nuestro sitio detenido funcionó cuando FB rodó sobre la API a v 2.1. En nuestro caso, ya teníamos una APP de FB y NO estábamos usando el inicio de sesión de FB. Entonces, lo que teníamos que hacer era obtener un token de la aplicación FB para hacer las nuevas solicitudes. Esto es desde el 23 de agosto de 2016.

  1. Vaya a: https://developers.facebook.com/tools/explorer
  2. Seleccione la versión de la API y luego use GET y pegue lo siguiente:

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    Deberá ir a buscar la identificación de su aplicación y su aplicación secreta desde la página de su aplicación. Página principal del desarrollador de aplicaciones FB

  3. Ejecute la consulta de gráfico y verá:

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    Dónde

    "app-id"
    y
    "app-token"
    será su ID de aplicación desde la página de su aplicación FB y la FB App HASH generada que acaba de recibir.

  4. A continuación, pruebe su nuevo token de acceso a la aplicación: FB Access Token tester

  5. Deberías ver, pegando el

    "app-token"
    en el comprobador de fichas, un token basado en una aplicación sin fecha / hora de caducidad.

En nuestro caso, estamos usando el FB js sdk, así que cambiamos nuestra llamada para que fuera así (tenga en cuenta que SOLAMENTE obtiene el recuento de recursos compartidos y no el recuento de compartir y comentar combinados como solía ser) :

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

Esto ahora está funcionando correctamente. Esto requirió mucha búsqueda y un informe oficial de fallas con FB para confirmar que tenemos que comenzar a realizar solicitudes tokenizadas a la API de FB. Como comentario, solicité que ellos (FB) agreguen una pista al código de error (n. ° 4) que menciona la solicitud tokenizada.

Acabo de recibir otro informe de uno de nuestros desarrolladores que dice que nuestro conteo de comentarios FB también se ha roto debido a la nueva necesidad de solicitudes tokenizadas, por lo que voy a actualizar esto en consecuencia.


Además de los pasos recomendados en la respuesta de Vlasec , puede usar:

  • Graph API explorer para hacer las consultas, ej. /{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
  • Acceda a Token Debugger para obtener información sobre el token de acceso.

Otra respuesta de PHP para hacer la vida más fácil. Actualizado para Facebook Graph API 2.9 . Solo llénelo y cárguelo.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

Adición: (alternativa)

Gráfico 2.9 en adelante, puede omitir gran parte de la molestia de obtener un token de acceso largo simplemente haciendo clic en Extender token de acceso en la parte inferior de la herramienta de acceso al depurador de tokens, después de haber depurado un token de acceso corto. Armado con información sobre pageid y longlivedtoken , ejecute el php a continuación para obtener el token de acceso permanente.

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

Aunque el segundo código te ahorra muchas molestias, te recomiendo que ejecutes el primer código php a menos que tengas mucha prisa porque hace una verificación cruzada de pageid y userid. El segundo código no terminará funcionando si elige el token de usuario por error.

Gracias a dw1 y Rob


Siguiendo las instrucciones expuestas en la documentación de los tokens de página de Facebook, pude obtener un token de acceso a la página que no caduca.

Sugiero usar Graph API Explorer para todos estos pasos, excepto donde se indique lo contrario.

0. Crear una aplicación de Facebook

Si ya tiene una aplicación , salte al paso 1.

  1. Ve a Mis aplicaciones .
  2. Haga clic en "+ Agregar una nueva aplicación".
  3. Configura una aplicación de sitio web.

No necesita cambiar sus permisos ni nada. Solo necesita una aplicación que no desaparecerá antes de que haya terminado con su token de acceso.

1. Obtener el token de acceso de corta duración del usuario

  1. Ve al Graph API Explorer .
  2. Seleccione la aplicación para la que desea obtener el token de acceso (en el menú desplegable "Aplicación", no en el menú "Mis aplicaciones").
  3. Haga clic en "Obtener Token"> "Obtener Token de acceso de usuario".
  4. En la ventana emergente, debajo de la pestaña "Permisos extendidos", marca "manage_pages".
  5. Haga clic en "Obtener token de acceso".
  6. Conceder acceso desde una cuenta de Facebook que tenga acceso para administrar la página de destino. Tenga en cuenta que si este usuario pierde acceso, el token de acceso final que nunca expira probablemente dejará de funcionar.

El token que aparece en el campo "Token de acceso" es tu token de acceso efímero.

2. Generar token de acceso de larga duración

Siguiendo estas instrucciones de los documentos de Facebook, realice una solicitud GET para

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id= {app_id} & client_secret = {app_secret} & fb_exchange_token = {short_lived_token}

ingrese la ID y el secreto de su aplicación y el token efímero generado en el paso anterior.

No puedes usar Graph API Explorer . Por alguna razón, se bloquea en esta solicitud. Creo que es porque la respuesta no es JSON, sino una cadena de consulta. Como se trata de una solicitud GET, puede ir a la URL en su navegador.

La respuesta debería verse así:

{"access_token": " ABC123 ", "token_type": "portador", "expires_in": 5183791}

"ABC123" será su token de acceso de larga duración. Puede ponerlo en Access Token Debugger para verificarlo. En "Caduca" debería tener algo así como "2 meses".

3. Obtener ID de usuario

Con el token de acceso de larga duración, realice una solicitud GET para

https://graph.facebook.com/v2.10/me?access_token= {long_lived_access_token}

El campo de id es la identificación de su cuenta. Lo necesitarás para el siguiente paso.

4. Obtenga un token de acceso permanente a la página

Haga una solicitud GET a

https://graph.facebook.com/v2.10/ {account_id} / accounts? access_token = {long_lived_access_token}

La respuesta JSON debe tener un campo de data bajo el cual hay una matriz de elementos a los que el usuario tiene acceso. Encuentra el elemento de la página desde la que deseas que aparezca el token de acceso permanente. El campo access_token debe tener su token de acceso permanente. Cópielo y pruébelo en Access Token Debugger . En "Caduca" debe decir "Nunca".



Después de buscar y usar palabras que no repetiré aquí para no violar las pautas de SO, encontré esta respuesta después de la cual pude dejar de programar y comenzar a dormir ...

Se refiere a esta herramienta que realmente ayudó mucho.

Espero que esta respuesta siga siendo válida cuando leas esto.

S.


  1. Ir al Graph API Explorer
  2. Elige tu aplicación del menú desplegable
  3. Haga clic en "Obtener token de acceso"
  4. Elija el permiso manage_pages (es posible que también necesite el permiso user_events , no estoy seguro)
  5. Ahora acceda a la conexión me/accounts y copie el access_token su página
  6. Haga clic en la identificación de su página
  7. Agregue el access_token la página a los campos GET
  8. Llame a la conexión que desee (p. Ej .: PAGE_ID/events )




facebook facebook-graph-api facebook-access-token