微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从FB SDK获取accessToken

如何解决无法从FB SDK获取accessToken

我想将图像从我的Instagram帐户获取到我的网页。因此,我尝试使用FB PHP sdk并首先根据此documentation获取accesstoken。但它返回null。我不知道代码有什么问题。

public function getMedia()
{
    $fb = new \Facebook\Facebook([
        'app_id' => self::APP_ID,'app_secret' => self::APP_SECRET,'default_graph_version' => 'v2.10',//'default_access_token' => '{access-token}',// optional
    ]);

    $helper = $fb->getRedirectLoginHelper();  // Whichever helper I use access-token is null

    dd($helper->getAccesstoken());
}

我需要帮助。可能是如此简单。

编辑:

几个小时后我有了这个,但是最后一个命令抛出了一个Facebook \ Exceptions \ FacebookResponseException无效的OAuth访问令牌签名。如我所见,令牌是通过管道加入的应用ID和应用机密。 “ 733163597544229 | xxxxxxxxxxxxx9d14362xxxx3a6”。这应该可以,但是不可以。

public function getMedia()
{
    $fb = new \Facebook\Facebook([
        'app_id' => self::APP_ID_FB,'app_secret' => self::APP_SECRET_FB,// optional
    ]);

    $token = $fb->getApp()->getAccesstoken();
    $response = $fb->get('https://graph.instagram.com/me/media?fields=media_url,media_type',$token->getValue());

} 

解决方法

根据https://developers.facebook.com/docs/facebook-login/web,如果我对文档的理解正确,并且要动态获取访问令牌,则需要为应用启用fb-login

  1. https://developers.facebook.com/apps/
  2. 选择您的应用
  3. 添加fb登录并按照提示进行操作。

否则,您应该只能够从Web界面获取应用程序的访问令牌并反复使用。

另请参阅:https://developers.facebook.com/docs/facebook-login/access-tokens#apptokens

还有:

https://developers.facebook.com/tools/explorer/?method=GET&path=me%3Ffields%3Did%2Cname&version=v9.0

这使您能够生成访问令牌,并测试对图api的调用,并允许您导出可复制/粘贴的代码:

enter image description here

try {
  // Returns a `FacebookFacebookResponse` object
  $response = $fb->get(
    '/me','{access-token}'
  );
} catch(FacebookExceptionsFacebookResponseException $e) {
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(FacebookExceptionsFacebookSDKException $e) {
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}
$graphNode = $response->getGraphNode();

编辑:

在您最初提出的问题中,我指出:

如我所见,令牌是与管道结合在一起的应用ID和应用机密。 “ 733163597544229 | xxxxxxxxxxxxx9d14362xxxx3a6”。这应该可以,但是不可以。

根据文档,如果您想以{app_id}|{client-token}的形式提供访问令牌(不确定在此使用的是什么秘密),则应将其附加到网址(而不是您所使用的网址)中使用。

在此处查看示例:https://developers.facebook.com/docs/facebook-login/access-tokens#clienttokens

他们使用的URL是:

curl -i -X GET "https://graph.facebook.com/{your-user-id}/accounts?access_token={user-access-token}

对您来说,这是

$response = $fb->get('https://graph.instagram.com/me/media?fields=media_url,media_type&access_token=733163597544229|{client_token}');

编辑2:

我设法使您的示例工作起来,所以也许这些屏幕截图会有所帮助:

PHP代码:

<?php
$accessToken="EAAJIZAj**************************************************************************************************************************************************************************ZD";

require_once __DIR__ . '/Facebook/autoload.php'; // change path as needed

//echo __DIR__ . '/Facebook/autoload.php';
$fb = new \Facebook\Facebook([
    'app_id' => '642**********502','app_secret' => '0185*****************f743','default_graph_version' => 'v2.10','default_access_token' => "{$accessToken}"
]);

try {
    // Get the \Facebook\GraphNodes\GraphUser object for the current user.
    // If you provided a 'default_access_token',the '{access-token}' is optional.
    $response = $fb->get('/me');
} catch(\Facebook\Exceptions\FacebookResponseException $e) {
    // When Graph returns an error
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(\Facebook\Exceptions\FacebookSDKException $e) {
    // When validation fails or other local issues
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

$me = $response->getGraphUser();
echo 'Logged in as ' . $me->getName();

?>

我从https://github.com/facebookarchive/php-graph-sdk获取了源代码,并将src/Facebook目录复制到了我的项目中。我在代码中修改了路径位置

require_once __DIR__ . '/Facebook/autoload.php'; // change path as needed

//echo __DIR__ . '/Facebook/autoload.php'; //<< comment out everything else and check the path is correct with this.

工作代码:(与上面相同),成功输出显示在屏幕截图的底部。

enter image description here

如果您需要获取应用程序密码,请转到应用程序设置以将其发现:

enter image description here

看来您是对的-访问令牌确实已过期,自昨天使用以来,我不得不刷新自己的令牌。

,

据我所知,这可能无法获得访问令牌。 要获取访问令牌,您需要在应用中使用facebook实现登录以获取访问令牌。如果您的应用仅由有限的用户使用,那么您可以在此链接https://developers.facebook.com/tools/explorer/上获得访问令牌,但是如果您的应用被广泛的用户使用,并且每个用户都有自己的数据,那么您需要在应用中实现oauth2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。