Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Facebook页面标签中登录用户,并在服务器端获得access_令牌,以便向提要发送旋转木马?_Facebook_Facebook Graph Api_Facebook Javascript Sdk_Facebook Php Sdk - Fatal编程技术网

如何从Facebook页面标签中登录用户,并在服务器端获得access_令牌,以便向提要发送旋转木马?

如何从Facebook页面标签中登录用户,并在服务器端获得access_令牌,以便向提要发送旋转木马?,facebook,facebook-graph-api,facebook-javascript-sdk,facebook-php-sdk,Facebook,Facebook Graph Api,Facebook Javascript Sdk,Facebook Php Sdk,我有一个页面标签facebook应用程序。我想发布给用户从它的时间线 使用javascript sdk在客户端登录后(我使用angularjs模块访问Ciul/angular facebook(抱歉,无法在此处发布github链接)): 我在服务器端检索access_令牌,并尝试将转盘发送到用户提要: 我有两个问题: 当我接到第一个电话时 图形返回错误:(#210)参数id必须是页面 浏览之后,我发现这可能是由于错误使用令牌造成的。非用户访问令牌。但是我在客户端登录用户 接下来我接到的电话

我有一个页面标签facebook应用程序。我想发布给用户从它的时间线

使用javascript sdk在客户端登录后(我使用angularjs模块访问Ciul/angular facebook(抱歉,无法在此处发布github链接)):

我在服务器端检索access_令牌,并尝试将转盘发送到用户提要:

我有两个问题:

  • 当我接到第一个电话时 图形返回错误:(#210)参数id必须是页面
  • 浏览之后,我发现这可能是由于错误使用令牌造成的。非用户访问令牌。但是我在客户端登录用户

  • 接下来我接到的电话 图表返回错误:此授权代码已被使用
  • 同样,在浏览之后,我发现为了符合OAuth,令牌只能使用一次

    请告诉我怎么做才对

    先谢谢你

    致以最良好的祝愿,
    Vsevolod

    在花了一些时间之后,我正在写我的解决方案,因为它不是很明显,至少对我来说是这样。但是,实际上,所有信息都存在于文档中。

    从问题编号2开始:对于下一个调用,我得到一个返回错误:此授权码已被使用。

    正如评论中提到的,我确实混淆了access_令牌和授权代码。正如我以非常简单的形式理解的那样,机制是:

  • 当您使用facebook javascript sdk登录时,它会将
    授权代码
    写入Cookie
  • 然后在服务器端,您可以从facebook php sdk中提供的javaScriptHelper中检索
    访问\u令牌。此帮助程序具有
    getAccessToken()
    方法,该方法使用
    授权代码
    从Cookie中检索
    访问令牌
    。这就是我困惑的地方。我试图在每个请求上使用
    getAccessToken()
    。由于请求是用AJAX发出的,
    授权代码
    没有更改,而且您只能在我收到错误时使用它互联网上的许多地方都指出了解决方案,但不知怎的,我还是误解了这一点。 下面是代码摘录,它使用会话存储
    access\u token
    ,并且仅当会话中未设置
    access\u token
    时才使用
    getAccessToken()
    方法

        $fb = new Facebook([
            'app_id' => $widget->app_id,
            'app_secret' => $widget->app_secret,
            'default_graph_version' => 'v2.5',
        ]);
    
        $helper = $fb->getJavaScriptHelper();
    
        if ($request->session()->has('facebook_access_token')) {
            $accessToken = $request->session()->get('facebook_access_token');
        } else {
            $accessToken = $helper->getAccessToken();
    
            // OAuth 2.0 client handler
            $oAuth2Client = $fb->getOAuth2Client();
    
            // Exchanges a short-lived access token for a long-lived one
            $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($accessToken);
            $request->session()->put('facebook_access_token', (string) $longLivedAccessToken);
            $request->session()->save();
        }
    
        if ($accessToken) {
            $fb->setDefaultAccessToken($accessToken);
        } else {
            die('No Access Token');
        }
    
  • 我使用Laravel,因此会话处理不是框架无关的。这段代码只是一个例子,最好创建服务并将逻辑移到那里

    现在。关于第一个问题:第一次调用时,I get Graph返回一个错误:(#210)Param id必须是一个页面。

    我又一次混淆了两件事。我的目标是发布一个带有图片和链接的旋转木马。要创建旋转木马,您必须在字段数组中提供
    child_附件
    。虽然您可以将这样的帖子发送到
    '{page id}/feed'
    ,但对于
    '{user id}/feed'
    ,您不能这样做因此,目前您无法向用户提要发布旋转木马。
    因此,当Graph Api获取适用于
    '{page id}/feed'
    的Post数据时,它假设我已通过
    {page id}
    。相反,当获取
    {user id}
    时,Graph Api会喊回“(#210)Param id必须是一个页面。”。

    “我发现为了符合OAuth,令牌只能使用一次”-您混淆了令牌和代码。代码是您需要交换的令牌,并且您只能执行一次。您完全正确。谢谢你的评论。