PHP使用Yii2实现Facebook(Api)授权登录并获取信息Demo

  •   
  • 6715
  • PHP
  • 26
  • super_dodo
  • 2016/11/08

在已经安装好相关的扩展的情况下(若未安装Yii2的扩展请移步参考底部的安转的相关文章),注册开发者账号,配置开发者相关的信息。

之后直接上代码:FacebookController.php

<?php
/**
 * User: Dodobook
 * Date: 2016/11/1 08:08:08
 */

namespace app\controllers;

use Yii;
use yii\httpclient\Client;
use yii\web\Controller;
use yii\authclient\clients\Facebook;

//此部分为直接使用官方的文档实践.
//使用Yii的扩展yii\authclient
//备注说明: 需要设置应用域名
//https://developers.facebook.com/docs/php/gettingstarted
//https://developers.facebook.com/docs/php/gettingstarted#install-manually
//https://developers.facebook.com/apps/30***********29/settings/basic/


class FacebookController extends Controller{

    const APP_ID = '30**********29';
    const APP_SECRET = '1a***********************46';
    const VERSION = 'v2.5';     //版本

    CONST USER_INFO_URL = 'https://graph.facebook.com/me/?access_token=';                       //获得用户的基本信息
    CONST USER_FRIEND_URL = 'https://graph.facebook.com/me/friends?access_token=';              //获得用户的好友

    //授权地址
    public function actionAuthUrl(){
        //实例化类
        $client = new Facebook(&#91;
            'clientId' => self::APP_ID,
            'clientSecret' => self::APP_SECRET,
            'version' => self::VERSION,
        ]);

        $param = ['redirect_uri'=>'http://sns.*******.com/facebook/call-back'];
        $url = $client->buildAuthUrl($param);                            //组装成新的URL地址
        $url .= '&force_login=true';                                     //强制用户登录(not work)
        return Yii::$app->getResponse()->redirect($url);                 //跳转到授权的页面
    }


    //回调地址
    public function actionCallBack(){
        $client = new Facebook([
            'clientId' => self::APP_ID,
            'clientSecret' => self::APP_SECRET,
            'version' => self::VERSION,
        ]);

        $authCode = Yii::$app->request->get('code');
        $token = $client->fetchAccessToken($authCode);
        $access_token = $token->getParam('access_token');   //185+-个字符
        $expires = $token->getParam('expires');             //过期时间--5184000 = 6天

        $appsecret_proof = hash_hmac('sha256', $access_token, self::APP_SECRET);        //加密安全
        $userUrl = self::USER_INFO_URL.$access_token.'&appsecret_proof='.$appsecret_proof;      //获取用户信息

        $userClient = new Client();
        $request = $userClient->get($userUrl);
        $response = $userClient->send($request);
        if($response->getIsOk()){      //请求接口成功
            $backData = $response->getData();
            var_dump($backData);				//打印一下回调回来的用户数据
            $userId = $backData['id'] ?? 0;
            
        }

		/*
		[id] => 14********82
		[email] => dev@*******.cn
		[first_name] => **
		[gender] => male
		[last_name] => 林
		[link] => https://www.facebook.com/app_scoped_user_id/14*********82/
		[locale] => zh_CN
		[name] => 林**
		[timezone] => 8
		[updated_time] => 2014-10-29T06:45:10+0000
		[verified] => 1
		*/

		//TODO 你想做的任何事情


        Yii::$app->end();
      
    }

    //得到用户的基本信息
    public function actionUserInfo(){
        $client = new Facebook([
            'clientId' => self::APP_ID,
            'clientSecret' => self::APP_SECRET,
            'version' => self::VERSION,
        ]);

        $accessToken = 'EAAE********************jUwjA';			//很长--大概185个字符左右
        $url = 'https://graph.facebook.com/me/?access_token='.$accessToken;         //用户的信息页面
        $url = 'https://graph.facebook.com/me/friends?access_token='.$accessToken;  //好友列表
        return Yii::$app->getResponse()->redirect($url);
    }

}

Yii2安装加载AuthClient来实现第三方的授权登录

PHP使用Yii2实现Twitter授权登录并获取信息Demo

PHP使用Yii2实现Facebook授权登录并获取信息Demo

PHP使用Yii2实现LinkedIn授权登录并获取信息Demo