J'essaie d'utiliser la nouvelle API graphique Facebook récemment publiée, mais je n'arrive pas à la faire fonctionner correctement.
J'ai parcouru les étapes et après l'appel/authorize, je reçois un code d'accès:
access_token=109002049121898|nhKwSTJVPbUZ5JYyIH3opCBQMf8.
Lorsque j'essaie d'utiliser ce jeton, je reçois:
{
"error": {
"type": "QueryParseException",
"message": "An active access token must be used to query information about the current user."
}
}
Je suis perplexe car aussi pourquoi ...
-AC
même chose ici. J'ai suivi blog de Ben Biddington pour obtenir le jeton d'accès. Même erreur en essayant de l'utiliser. L'implémentation OAuth de Facebook ne suit pas complètement les spécifications, cela me convient tant que la doc est claire, ce qui n'est évidemment pas le cas ici. De plus, ce serait bien si l'ID utilisateur et le nom d'utilisateur sont retournés avec le jeton d'accès.
Lors de l'utilisation du jeton de votre application Facebook
Si vous utilisez l'alias me
comme dans https://graph.facebook.com/me/
mais que votre jeton est acquis pour un Application Facebook , "moi" n'est plus votre nom - c'est l'application ou peut-être rien. Quoi qu'il en soit, ce n'est pas votre intention que l'application interagisse avec elle-même.
Dans ce cas, vous souhaiterez interagir avec votre compte d'utilisateur personnel à partir d'une application. Ce que vous devez faire (après avoir donné à l'application les autorisations demandées dans l'interface utilisateur quand elle le demande) est de trouver votre identifiant facebook # et de le mettre à la place de "moi" pour accéder à vos propres informations. par exemple. L'utilisateur Facebook de Mark Zuckerberg est 4, il est donc https://graph.facebook.com/4/
L'alias me
ne fonctionne que si vous êtes vous! Il est parfois difficile de se rappeler qui est l'utilisateur actuel lors de la programmation de facebook (c'est-à-dire vous, la page, l'application, etc.) car nous sommes habitués à utiliser l'interface utilisateur de Facebook comme la plupart du temps. Du point de vue de la programmation, cela dépend de ce que représente le jeton acquis.
Un bon article de blog qui m'aide toujours à me corriger est Ben Biddington | Facebook Graph API - Obtenir des jetons d'accès .
Juste pour clarifier - après avoir appelé
https://graph.facebook.com/oauth/authorize?
vous devriez recevoir un CODE qui, associé à votre CLIENT_ID et à CLIENT_SECRET (en supposant que vous ayez enregistré votre application), peut être échangé contre un access_token à l'adresse
https://graph.facebook.com/oauth/access_token?
Si c’est bien ainsi que vous en êtes parvenu avec votre ACCESS_TOKEN, vous devriez alors pouvoir demander
https://graph.facebook.com/me/
L'ajout du paramètre type renvoie le paramètre auth_token au niveau de l'application. Il est donc préférable de l'OMITER. Ce qui a fonctionné pour moi, après d'innombrables tentatives et combinaisons, est d'utiliser le même paramètre redirect_url
dans l'appel à /oath/access_token
que celui utilisé dans l'appel à /oath/authorize
.
La séquence complète pour autoriser votre application au nom de quelqu'un est la suivante:
1. appelez ou redirigez vers:
"https://graph.facebook.com/oauth/authorize?client_id=" + my_clientId + "&scope=publish_stream,offline_access,manage_pages" + "&redirect_uri=" + "http://my_redirect_url?blah"
2. dans la page située au return_url
ci-dessus, émettez une demande ou quoi que ce soit d'autre à cette URL:
"https://graph.facebook.com/oauth/access_token?client_id=" + client_id + "&client_secret=" + secret + "&code=" + Request.QueryString["code"] + "&redirect_uri=" + "http://my_redirect_url?blah"
J'avais le même problème dans IE8 uniquement. La solution pour moi consistait à envoyer le paramètre access_token dans la demande d'API. Quelque chose comme ceci:
FB.api('/me/friends?access_token=<YOUR TOKEN>
J'ai obtenu mon token via PHP comme ceci:
// Create our Application instance.
$facebook = new Facebook(array(
'appId' => '<API_ID>',
'secret' => '<SECRET>',
'cookie' => false,
));
$session = $facebook->getSession();
$token = $session['access_token'];
En fait, j'ai remarqué que si votre retour ne comportait pas de barre oblique, vous avez des problèmes. Je teste actuellement dans le navigateur et return_uri = https: //mondomaine.com ne fonctionne pas mais return_uri = https: //mydomain.com/ fonctionne. Si j'utilise le premier, j'obtiens "Erreur de validation du code de vérification".
Cela semble un peu étrange, mais je viens de rater un mot dans les spécifications/instructions. A perdu deux heures de ma vie à cela cependant.
J'ai eu exactement le même problème. Quelques choses que j'ai faites pour le résoudre:
Je tiens à souligner ce qui a été dit en quelque sorte sur le blog de Ben Biddington et ce que j’ai remarqué en regardant access_token "malformé" dans la question initiale. D'autres ont dit des choses similaires dans ce fil, mais je veux être explicite.
Le jeton n'est pas réellement mal formé, mais plutôt un jeton qui vous permet d'effectuer des actions pour le compte de l'application, pas pour l'utilisateur. C'est le jeton que vous utiliseriez si vous vouliez obtenir tous les utilisateurs de l'application, ou afficher des informations sur votre application, etc., avec les demandes provenant généralement de votre serveur, pas du client. Ce type de jeton est obtenu en utilisant le paramètre type = client_cred. Si vous souhaitez effectuer des tâches pour le compte de l'utilisateur, ne spécifiez pas type = client_cred et veillez à spécifier les paramètres suivants lors de votre appel à http://graph.facebook.com/oauth/access_token :
'client_id' => APP_ID
'redirect_uri' => REDIRECT_URI
'client_secret' => APP_SECRET
'code' => $_GET['code']
J'ai écrit ceci sous la forme de paires clé-valeur d'un tableau PHP, mais je pense que vous comprenez bien. La valeur de code GET est obtenue après l'appel initial à http://graph.facebook.com/oauth/authorize avec les paramètres suivants:
'client_id' => APP_ID
'redirect_uri' => "http://your.connect.url/some/endpoint"
J'espère que ça aide! Ce que disent les documents Facebook, mais ne dites pas bien, c'est que l'obtention d'un access_token est un processus à deux demandes.
J'ai eu le même problème, mais me débarrasser de type=client_cred
et m'assurer que le paramètre redirect_uri est le même lors de la création de l'autorisation et que le access_token call
a résolu le problème.