如何使用PHP续订/扩展facebook访问令牌?

Cli*_*ote 12 php facebook

Facebook已经删除了offline_access令牌功能,现在只要用户访问您的网站以使其保持活动状态,就必须更新令牌.

假设某人已经为您的网站提供了访问权限,并且您已为其存储了令牌.您将使用Facebook的PHP库来更新该令牌的代码是什么?

Ale*_*mov 8

您可以通过以下方式扩展令牌:

原始场景

  • 您的应用请求用户的权限
  • 您提示用户登录/授予权限
  • 你使用grant_type = fb_exchange_token获得用户的令牌(短命的)并通过CURL或其他方式交换60天的令牌
  • 你坚持使用令牌

现在你有了这个令牌可以用它做你想做的事情长达60天.最多,因为用户可以更改密码,取消授权应用程序等,令牌将变为无效.你可以做什么来扩展令牌是每当用户访问你的页面时,你可以检查他们是否通过javascript登录,如果是,请对服务器进行ajax调用,将现有令牌延长60天今天.您可以根据需要拨打任意数量的电话,只有第一个有效.我是这样做的:

  1. 在加载事件期间的某个页面上,添加如下内容:

     FB.getLoginStatus(function (response) {
         if (response.status === 'connected') {
            $.ajax({
                type: "POST",
                async: false,
                url: YOUR_URL,
                dataType: "text",
                data: {token  : response.authResponse.accessToken }
             });
         }
     });
             //rest of jquery ajax call here
    
    Run Code Online (Sandbox Code Playgroud)

这将为用户获取新的客户端访问令牌并将其发送到服务器

  1. 然后,服务器可以获取该令牌并将其交换60天

    $token_url = "https://graph.facebook.com/oauth/access_token?client_id=".FACEBOOK_CLIENT_ID."&client_secret=".FACEBOOK_SECRET."&grant_type=fb_exchange_token&fb_exchange_token=".$token;
    
    $c = curl_init();
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($c, CURLOPT_URL, $token_url);
    $contents = curl_exec($c);
    $err  = curl_getinfo($c,CURLINFO_HTTP_CODE);
    curl_close($c);
    
    $paramsfb = null;
    parse_str($contents, $paramsfb);        
    
    Run Code Online (Sandbox Code Playgroud)

参考:

https://developers.facebook.com/roadmap/offline-access-removal/

如果用户在60天内回到​​您的网站,那只会扩展令牌.如果没有,您将需要再次提示权限.