Pregunta

Estoy creando usuarios de pruebas en Facebook para mi aplicación. A veces funciona. Cuando no es así, el error ocurre en esta llamada:

function getTestAccounts($fb, $a) {
$s = urlencode($a);
**$accounts = $fb->api("/{$fb->getAppId()}/accounts/test-users?access_token=$s");**
if( isset($accounts['data']) )
    return $accounts;
else
    return null;
}

El error es:

No se ha referido a OAuthException: (#15) Este método debe llamarse con una aplicación access_token.

Anteriormente obtuve el token con esta función:

function getAppAccessToken($fb) {
$access_token_url = "https://graph.facebook.com/oauth/access_token";
$parameters = "grant_type=client_credentials&client_id=" . $fb->getAppId() .    "&client_secret=" . $fb->getApiSecret() . "&junk=1";
return file_get_contents($access_token_url . "?" . $parameters);
}

Cuando llevo al token ofensivo, se parece a esto y no cambia (¿debería?)

access_token = 229234510434203 | TK2UDOGCPTHCBedIVHRIPKSG8WK

He intentado limpiar las cookies. Eso parecía funcionar, pero podría haber sido coincidente con algo más porque ahora no.

Supongo que el token de acceso regresó de los cambios de FB, pero siempre está volviendo igual.

¿Fue útil?

Solución 2

Cometí un error de Greenhorn. Lo que no noté fue que este problema solo estaba ocurriendo después de abrir otra pestaña del navegador y registrarme a Facebook como yo o un usuario de prueba. La nueva sesión de Facebook estaba interfiriendo con la API.

Supongo que la API utiliza el token de acceso del usuario registrado en lugar de lo que se pasa en la solicitud. ¡Un poco obvio una vez que lo entiendes!

Espero que esto ayude a la próxima persona :-)

Otros consejos

Marca

Para un token de acceso de usuario, uso el siguiente, donde el número es mi identificación de la aplicación. "Usado con PHP-SDK"

$access_token = $_SESSION['fb_135669679827333_access_token'];

Para un token de acceso de aplicación, uso curl

$app_access_token = GetCH();
function GetCH(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
if(substr($url,0,8)=='https://'){
    // The following ensures SSL always works. A little detail:
    // SSL does two things at once:
    //  1. it encrypts communication
    //  2. it ensures the target party is who it claims to be.
    // In short, if the following code is allowed, CURL won't check if the 
    // certificate is known and valid, however, it still encrypts communication.
    curl_setopt($ch,CURLOPT_HTTPAUTH,CURLAUTH_ANY);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
}
$sendCH = curl_exec($ch);
curl_close($ch);
return $sendCH;
};

Déjeme saber si esto ayuda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top