PHP SDK: ¿Cómo capturo el token de acceso después de la aplicación de autenticación del usuario?

Esto es para una aplicación de lienzo en la plataforma de Facebook que usa el nuevo (est) Facebook PHP SDK.

Estamos utilizando el ejemplo de PHP del tutorial de Facebook (https://developers.facebook.com/docs/appsonfacebook/tutorial/) para activar el diálogo OAuth y llevar al usuario de prueba a la URL de redireccionamiento.

En la URL de redireccionamiento, utilizamos el ejemplo de PHP de la página de documentos de solicitud firmada de Facebook (https://developers.facebook.com/docs/authentication/signed_request/) y nuestros usuarios de prueba pueden autorizar con éxito la aplicación.

Sin embargo, después de que el usuario de prueba autentica la aplicación, no podemos capturar el token de acceso y su vencimiento. Podemos verlo en la barra de direcciones adjunta a la URL de redireccionamiento, pero no aparece en la matriz $ _REQUEST. Si agregamos {$ access_token = $ facebook-> getAccessToken ();} a la página de URL de redireccionamiento, muestra un valor para el token de acceso, pero el valor que muestra no es la cadena de token completa que vemos cuando hacemos clic en Mostrar Token en la página Roles de usuario de prueba (que creemos que es el token de acceso correcto para el usuario de prueba).

Aquí hay un ejemplo de la URL de redireccionamiento con un token de acceso agregado:http: //karmakorn.com/karmakorn/alpha20/kk-fb-auth.php#access_token=126736467765%7C2.AQDavId8oL80P5t9.3600.1315522800.1-100002908746828%7CJICJwM1PE97_KMXQp08_K2_p08_05_05_p07_kf_7p08_05_7_kf_pq_p07_05_p07_05_7p08 &quo

Aquí está lo que muestra var_dump para $REQUEST matriz para esa misma página: matriz (3) {["_qca "] => string (26)" P0-709927483-1291994912966 "[" __switchTo5x "] => string (2)" 30 "[" PHPSESSID "] => string (26)" euois02ead39ijumca7nffblh2 "}

No tenemos idea de por qué la matriz $ _REQUEST varía de los valores agregados a la URL y, lo que es más importante, cómo capturar el token de acceso y su fecha de vencimiento.

¿Puede alguien mostrarnos un ejemplo práctico de cómo capturan estos datos después de ejecutar la función parse_signed_request ($igned_request, $ secret) en la página de redireccionamiento? ¡Gracias

INFORMACIÓN ADICIONAL

Aquí está el código pertinente de A) nuestra página de índice de prueba, y B) nuestra página de redireccionamiento de prueba. Si utilizamos nuestra página de índice de texto como la URL de redireccionamiento, se atasca en un bucle sin fin, porque el usuario nunca se identifica.

A) Página de índice

// Create kk-fb app instance
$facebook = new Facebook(array(
    'appId'  => KKFB_ID,
    'secret' => KKFB_KY,
    'oauth' => true,
));

$app_id = KKFB_ID;
$secret = KKFB_KY;
$canvas_auth = 'http://karmakorn.com/karmakorn/alpha20/kk-fb-auth.php';

$auth_url = "https://www.facebook.com/dialog/oauth?" 
                . "client_id=" . $app_id 
                . "&redirect_uri=" . urlencode($canvas_auth) 
                . "&response_type=token" 
                . "&scope=email,publish_stream";

$signed_request = $_REQUEST["signed_request"];

list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

if (empty($data["user_id"])) {
    echo("<script> top.location.href='" . $auth_url . "'</script>");
} else {
    echo ("Welcome User: " . $data["user_id"]);
}

B) Redirigir página

// Create kk-fb app instance
$facebook = new Facebook(array(
    'appId'  => KKFB_ID,
    'secret' => KKFB_KY,
    'oauth' => true,
));

$app_id = KKFB_ID;
$secret = KKFB_KY;

$signed_request = $_REQUEST["signed_request"];

list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

$user = $facebook->getUser();
$access_token = $facebook->getAccessToken();

echo "User: $user <br>";
echo "Access Token: $access_token <br>";
echo "Signed Request: $signed_request <br>";
var_dump($_REQUEST);

Aquí está lo que aparece cuando estos resultados de eco:

Usuario: 0 Token de acceso: 126736467765 | **SECRET ** Solicitud firmada: array (3) {["_qca "] => cadena (26)" P0-709927483-1291994912966 "[" _switchTo5x "] => cadena (2)" 30 "[" PHPSESSID "] => cadena (26)" frugi545cdl15gjind1fnv6pq1 "}

e manera interesante, cuando el usuario de prueba vuelve a la página de índice, se cumple la condición if y podemos obtener el token de acceso correcto:

Bienvenido Usuario: 100002908746828 Token de acceso: 126736467765 | 2.AQBgcyzfu75IMCjw.3600.1315544400.1-100002908746828 | m5IYEm976tJAkbTLdxHAhhgKmz8

Obviamente, ¿todavía nos falta algo? Además, también debemos aprender cómo obtener el tiempo de vencimiento como una variable para poder almacenar ambos en nuestra base de datos.

Respuestas a la pregunta(4)

Su respuesta a la pregunta