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

Facebook更改后获取Facebook用户个人资料图片10月24日 1以Facebook提供的任何形式获取access_token 2获取带有附加access_token的完整头像URL PHP中的示例请求快速而肮脏的方式来构建自己的访问令牌不推荐

如何解决Facebook更改后获取Facebook用户个人资料图片10月24日 1以Facebook提供的任何形式获取access_token 2获取带有附加access_token的完整头像URL PHP中的示例请求快速而肮脏的方式来构建自己的访问令牌不推荐

因此,facebook更改了网站获取用户个人资料图像的方式,所有详细信息在此处: https://developers.facebook.com/docs/graph-api/reference/user/picture/

因此,我以及 SOF 都从Facebook获得了用户的个人资料图片,如下所示: https://graph.facebook.com/1108834579148558/picture?type=large

现在,我们获得了Facebook提供的认图像。

在Facebook文档中,他们写道,我们需要附加访问令牌才能从现在开始获取用户个人资料图片

我唯一能想到的是,在用户登录时,facebook可以检索用户个人资料图像,任何人都可以提供帮助,我正在使用.Net core。

解决方法

Facebook在其新文档here中解释了在2020年10月之后获取用户图像的新方法,并指出所需的更改如下:

此终结点支持应用程序范围的用户ID(ASID),用户ID(UID)和页面范围的用户ID(PSID)。当前,您可以无条件查询ASID和UID。但是,从2020年10月24日开始,所有基于UID的查询都将需要访问令牌。如果您查询一个UID,因此必须包含一个令牌:

1。以Facebook提供的任何形式获取access_token

根据您的应用程序结构,您将使用Facebook提供的以下方法之一来获取access_token。您可以在FB文档here中找到有关access_token的更多信息。
App Access Token
Client Access Token

以我正在使用的客户端访问令牌为例:
使用以下参数向https://graph.facebook.com/oauth/access_token发出GET请求:

[
   "client_id"     => #FACEBOOK_CLIENT_ID,"client_secret" => #FACEBOOK_CLIENT_SECRET,"grant_type"    => "client_credentials",]

作为响应,您将获得access_token,您需要将其附加在新的图像URL上。

2。获取带有附加access_token的完整头像URL。

截至2020年10月23日,这对我有用。 现在,完整图片格式为
{$this->graphUrl}/{$this->version}/{$userID}/picture?type=large&redirect=false&access_token={$access_token}

如果设置redirect=false,您将获得一个JSON对象作为响应:

{
    "data": {
        "height": 100,"is_silhouette": false,"url": "https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=10152700727498624&height=100&width=100&ext=1606081666&hash=AeTQyGgugiSbRcB7Sxw","width": 100
    }
}

另一方面,如果您离开redirect=true或根本没有设置它,则会得到Image本身,然后可以将其保存在磁盘上或使用url作为图像路径。但是我不确定给定的URL是否长期存在。我的同一个网址已经使用了将近一个星期,因此,我认为只要您使用有效的access_token要求,该网址就会保持原样。

PHP中的示例请求

正如我在PHP中实现的那样,我无法为您提供示例代码,而是向您展示如何使用Laravel Framework中的Guzzle Client完成此操作。您可以查看我升级后的Laravel Socialite here的提供商类。

    public function getAccessToken(){
        // Make a request to get the Access Client
        $res = Http::get("https://graph.facebook.com/oauth/access_token",[
            "client_id"     => config('services.facebook.client_id'),"client_secret" => config('services.facebook.client_secret'),]);

        // Response is a JSON Object,so decode it into an Array
        $r = $res->json();

        // Return the access_token Array Key out of the response
        return Arr::get($r,'access_token',false);
    }


    public function getFacebookAvatar(array $user){
        // get the access_token from the above method
        $access_token = $this->getAccessToken();

        // build the new URI path for the User Image
        $path = "{$this->graphUrl}/{$this->version}/{$userID}/picture?type=large&redirect=false&access_token={$access_token}";
        $res  = Http::get($path);
        
        // Get the final User Image URL out of the response
        return Arr::get($res->json(),'data.url',false);
    }

快速而肮脏的方式来构建自己的访问令牌(不推荐)

有一种构建自己的access_token的方法,但这仅应用于测试目的,因为您将提供完整的凭据,并且有可能被劫持。您可以通过使用凭据和|作为分隔符(格式为{cliend_id}|{client_secret})来构建串联的字符串来归档该文件。

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