【问题标题】:Php Facebook API Page access tokensPHP Facebook API 页面访问令牌
【发布时间】:2013-08-02 22:30:19
【问题描述】:

我正在尝试为 question2answer(不需要知识)构建一个插件,当发布新问题时,它会将该问题作为活动发布到 Facebook 页面上。实现这一点不是问题。我遇到的是坚持。

据我了解,如果我错了,请纠正我,您只能通过管理员用户的帐户直接获取页面的访问令牌。当我们存储的访问令牌的页面管理员因注销而过期时,这会导致发布问题。好吧,我们不能指望他们永远保持登录状态,对吧?

还有其他方法可以解决这个问题吗?比如让用户改为在该页面上发帖?

这是我当前使用的代码(这不是最终的,没有错误处理)。任何说 qa_opt 的东西都只是存储在 question2answer 数据库中

$facebook2 = new Facebook(array(
                                                    'appId' => qa_opt('facebook_app_id'),
                                                    'secret' => qa_opt('facebook_secret')

                        ));

                        $facebook2->setAccessToken(qa_opt('facebook_page_access_code'));

                        // Try to extend token
                        $access_token = $facebook2->getExtendedAccessToken();



                        // As is, with the extended token, we currently post as the user, not the page. Let's fix that
                        $accounts = $facebook->api('/me/accounts?access_token='.$access_token);
                        foreach ( $accounts as $account )
                        {
                            if ( $account['id'] == qa_opt('facebook_page_id') )
                            {
                                $page_access_token = $account['access_token'];
                                break; // Stop processing foreach
                            }

                        }

                        $fbPageArgs = array('access_token' => $page_access_token,
                                    'message' => 'A new question has been created!',
                                    'link' => qa_q_path($params['postid'], $params['title'], true),
                                    'name' => $params['title'],
                                    'description' => $params['text'] 
                        );

                        $facebook2->api("/".qa_opt('facebook_page_id')."/feed?fields=access_token","post",$fbPageArgs);

【问题讨论】:

  • 有人有想法吗?以前肯定有人遇到过这种情况。

标签: php facebook facebook-graph-api facebook-php-sdk question2answer


【解决方案1】:

您可以为您的粉丝页面设置一个永不过期的令牌,我想这将解决您的问题。

按照简单的步骤:

  1. 获取管理员(即您的)扩展令牌(有效期为 2 个月)。通过链接获取long-lived token

    Extending tokens

  2. 使用 this token-

    为任何页面获取永不过期的访问令牌
    $facebook->api("/PAGE_ID?fields=access_token");
    

(您可以使用Facebook's Debug Tool来检查令牌的有效性)。

【讨论】:

  • 虽然 yoy 的建议可以防止我们在注销时断开连接,但它仍然以管理员身份发布所有新问题,而不是主页本身。我现在似乎找不到让它做到这一点的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 2013-06-16
  • 2012-04-28
相关资源
最近更新 更多