【问题标题】:FACEBOOK API : How do I get the long-lived access token from PHP APIFACEBOOK API:如何从 PHP API 获取长期访问令牌
【发布时间】:2018-07-17 03:07:50
【问题描述】:

我的问题:如何从 PHP API 获取长期访问令牌。我已经阅读了有关此问题的所有先前帖子,但仍然没有答案。 基本上,我从 API 资源管理器中获得了一个短暂的访问令牌。随后,我编写了一个简单的 PHP 程序,调用 facebook 图形 API 来请求长期访问令牌。然而,它不起作用。我在这里遗漏了一些东西。这是我写的 PHP 代码的 sn-p:

  $response = $fb->request("GET", "GET /oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id={my app id}&
    client_secret={my app secret}&
    fb_exchange_token={'the short-lived token obtained from the api 
   explorer'}")
    ..//error checking...
      //

    // then I call this:
    $token = $response->getaccessToken();
   // end of program

结果是 getaccessToken() 返回了与我传递给 API 相同的短期令牌。所以,我正在思考如何让它发挥作用。

根据 API 文档,输入参数为“fb_exhcnage_token”的调用应该返回一个“长期访问令牌”。 然而,我没有得到它。

【问题讨论】:

  • 谢谢。我按照soc的建议做了。然而,没有区别
  • 更奇怪的是,如果我传入一个无效的过期短期访问代码,调用永远不会返回任何错误代码。任何人都可以对此有所了解吗?
  • $fb->request("GET", "GET /oauth/ 错误,删除第二个 GET。
  • 另外,你确实删除了{},对吧?那些仅表示“在此处插入值” ...

标签: php facebook api access-token


【解决方案1】:

这在 2019 年有效,长期代币的有效期为 60 天。以下是 Facebook 将短期令牌(在前端提供)换成长期令牌(仅限服务器)的说明:

https://developers.facebook.com/docs/facebook-login/access-tokens/refreshing/

Generate a Long-lived User or Page Access Token
You will need the following:

A valid User or Page Access Token
Your App ID
Your App Secret
Query the GET oath/access_token endpoint.

curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/access_token?  
    grant_type=fb_exchange_token           
    client_id={app-id}&
    client_secret={app-secret}&
    fb_exchange_token={your-access-token}" 

Sample Response
{
  "access_token":"{long-lived-access-token}",
  "token_type": "bearer",
  "expires_in": 5183944            //The number of seconds until the token expires
}

您可以在 PHP 中使用 curl_init() 发出此 curl 请求:

https://www.php.net/manual/en/book.curl.php


或者,如果您更愿意使用 Facebook PHP SDK,您可以这样做:

1.) 使用您的凭据创建一个 FB 请求对象。 2.) 使用 FB 对象和访问令牌请求长期令牌

public function createFacebookRequestObject($facebookUser)
    {
        try {
            return new Facebook([
                'app_id' => config('env.FACEBOOK_GRAPH_API_ID'),
                'app_secret' => config('env.FACEBOOK_GRAPH_API_SECRET'),
                'default_graph_version' => 'v4.0',
                'default_access_token' => $facebookUser->access_token
            ]);
        } catch (\Facebook\Exceptions\FacebookSDKException $e) {
            return 'Facebook SDK returned an error: ' . $e->getMessage();
        }
    }

public function fetchLongTermAccessToken($fb, $facebookUser)
        {
            return $fb->get(
                "/oauth/access_token?grant_type=
                fb_exchange_token&fb_exchange_token=" 
              . $facebookUser['access_token']  
                . '&client_id=' 
                . config('env.FACEBOOK_APP_ID'), );
        }

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多