PHP的Facebook SDK提供了访问Graph API的接口。
Requires
- php: >=5.4
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-10 02:53:41 UTC
README
PHP的Facebook SDK提供了访问Graph API的接口。与官方PHP SDK相比,Fuss的主要区别在于API。
重新发明轮子
原始的facebook/facebook-php-sdk缺乏关注点的分离。而facebook/facebook-php-sdk-v4则是一个大步的进步。然而,它也带来了我无法忍受的缺点(例如使用有状态编程和全局变量)。API本身被设计来覆盖所有用例,这是官方SDK所期望的,但对于一个普通的Facebook应用程序来说并不必要。Fuss牺牲了一些功能,以换取更直观的API。
我期待通过gk@anuary.com或问题部分收到反馈。
Fuss.js
Fuss.js是Fuss的扩展。它被设计用于处理Facebook用户授权。
一切皆在
以下示例旨在涵盖Fuss最常见的使用场景。如果您需要进一步指导,此文档包含每个Fuss SDK用例和方法的描述。
/** * @param int $app_id App ID. * @param string $app_secret App secret. */ $app = new Gajus\Fuss\App(123, 'abc'); $user = null; $signed_request = $app->getSignedRequest(); if ($signed_request) { $access_token = $signed_request->getAccessToken(); if ($access_token) { if (!$access_token->isLong()) { $access_token->extend(); } $user = new Gajus\Fuss\User($access_token); } } if ($user) { $request = new Gajus\Fuss\Request($user, 'GET', 'me', ['fields' => 'first_name']); $response = $request->make(); // $response['first_name'] }
初始化应用
您需要配置一个Facebook应用,您可以从应用仪表板获取。
使用您的应用ID和密钥初始化SDK
/** * @param string $app_id App ID. * @param string $app_secret App secret. * @param array $options */ $app = new Gajus\Fuss\App('your app ID', 'your app secret');
在原始Facebook PHP SDK中,使用
FacebookSession::setDefaultApplication
来静态地设置默认应用程序凭据,使其在未来的调用中可访问,而不需要引用Gajus\Fuss\App
实例的等效物。
选项
在构建应用程序时接受选项
$app = new Gajus\Fuss\App('your app ID', 'your app secret', [ Gajus\Fuss\App::OPTION_VERSION => 'v2.1', Gajus\Fuss\App::OPTION_FORCE_COOKIE => true ]);
Gajus\Fuss\App::OPTION_VERSION
此选项指定要使用的Graph API的默认版本,例如。
$app = new Gajus\Fuss\App('your app ID', 'your app secret', [ Gajus\Fuss\App::OPTION_VERSION => 'v2.1' ]); $request = new Gajus\Fuss\Request($app, 'GET', 'app');
上述将生成一个针对https://graph.facebook.com/v2.1/app
URL的请求。
您可以在请求时覆盖默认版本
$app = new Gajus\Fuss\App('your app ID', 'your app secret', [ Gajus\Fuss\App::OPTION_VERSION => 'v2.1' ]); $request = new Gajus\Fuss\Request($app, 'GET', 'v2.0/app');
从请求路径中排除版本并未设置Gajus\Fuss\App::OPTION_VERSION
将使所有请求URL无版本,例如。
$app = new Gajus\Fuss\App('your app ID', 'your app secret'); $request = new Gajus\Fuss\Request($app, 'GET', 'app');
上述将生成一个针对https://graph.facebook.com/app
URL的请求。
Gajus\Fuss\App::OPTION_FORCE_COOKIE
(实验性)
如果启用(默认禁用),Fuss SDK将尝试在明确选择不接受第三方cookie的客户端上设置cookie。这是通过将用户重定向到需要设置cookie的域,然后重定向用户回到Facebook页面标签或画布URL来实现的。有关更多详细信息,请参阅原始问题。
获取已签名的请求
已签名的请求包含在Gajus\Fuss\SignedRequest
实体中。当以下任一条件为真时,通过App
实例提供
- 已签名的请求通过
$_POST['signed_request']
接收。 - 用户会话中存在已签名的请求。
- 已签名的请求存在于JavaScript SDK的cookie中。
/** * @return null|Gajus\Fuss\SignedRequest */ $signed_request = $app->getSignedRequest();
您可能已经通过JavaScript SDK(例如 FB.getLoginStatus)获取了已签名的请求。在这种情况下,您可以将它与应用程序共享
/** * Designed to be used for a signed request retrieved via the JavaScript SDK. * * @see https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus#response_and_session_objects * @param string $signed_request * @return null */ $app->setSignedRequest('the signed request');
签名请求存储在用户会话中,可以在后续请求中检索。
已签名请求数据
即使尚未请求权限,已签名请求也包含一些额外的信息字段
/** * User ID when user access token is in or can be derived from the signed request. * * @return null|int */ $signed_request->getUserId(); /** * The content of the app_data query string parameter which may be passed if the app is being loaded within a Page Tab. * The JSON input is automatically decoded. * * @see https://developers.facebook.com/docs/reference/login/signed-request/ * @return mixed */ $signed_request->getAppData(); /** * Return the signed request payload. * * @see https://developers.facebook.com/docs/reference/login/signed-request/ * @return array */ $signed_request->getPayload();
获取用户访问令牌
当以下任一条件为真时,Gajus\Fuss\AccessToken
可用
- 已签名的请求具有
access_token
。 - 已签名的请求具有可以交换为访问令牌的
code
。
/** * Resolve the user access token from the signed request. * The access token is either provided or it can be exchanged for the code. * * @return null|Gajus\Fuss\AccessToken */ $access_token = $signed_request->getAccessToken();
如果您拥有访问令牌(例如存储在数据库中),则可以构建一个AccessToken
/** * @param Gajus\Fuss\App $app * @param string $access_token A string that identifies a user, app, or page and can be used by the app to make graph API calls. * @param self::TYPE_USER|self::TYPE_APP|self::TYPE_PAGE $type */ $access_token = new Gajus\Fuss\AccessToken($app, 'user access token', Gajus\Fuss\AccessToken::TYPE_USER);
扩展访问令牌
通过网页登录生成的访问令牌是短期令牌,但您可以将其升级为长期令牌。
检查访问令牌是否为长期
/** * The issued_at field is not returned for short-lived access tokens. * * @see https://developers.facebook.com/docs/facebook-login/access-tokens#debug * @return boolean */ $access_token->isLong();
扩展短期访问令牌
/** * Extend a short-lived access token for a long-lived access token. * Upon successfully extending the token, the instance of the object * is updated with the long-lived access token. * * @see https://developers.facebook.com/docs/facebook-login/access-tokens#extending * @return null */ $access_token->extend();
了解访问令牌何时过期
/** * @return int UNIX timestamp in seconds. */ $access_token->getExpirationTimestamp();
取一个字符串副本以存储访问令牌以供以后使用
/** * @return string The access token as a string. */ $access_token->getPlain();
初始化用户
要代表一个用户进行调用,您需要使用有效的访问令牌创建User
实体
/** * @param Gajus\Fuss\AccessToken $access_token */ $user = new Gajus\Fuss\User($access_token);
在实例化User
对象后,使用访问令牌获取有关用户的信息。
/** * Get Facebook user ID. * Beware that as of Graph API v2.0, the user ID is app-scoped. * * @see https://developers.facebook.com/docs/apps/upgrading#upgrading_v2_0_user_ids * @return null|int */ $user->getId();
您可以更新用户访问令牌
/** * @param Gajus\Fuss\AccessToken $access_token * @return null */ $user->setAccessToken($access_token);
进行Graph API调用
可以使用Gajus\Fuss\App
或Gajus\Fuss\User
上下文进行API调用。如果使用App
上下文,则使用应用程序访问令牌;如果使用User
上下文,则使用用户访问令牌。
/** * @param Gajus\Fuss\Session $session * @param string $method GET|POST|DELETE * @param string $path Path relative to the Graph API. * @param array $query GET parameters. */ $request = new Gajus\Fuss\Request($app, 'GET', 'app'); /** * @throws Gajus\Fuss\RequestException If the Graph API call results in an error. * @return array Graph API response. */ $request->make();
页面标签
当应用程序在页面标签中加载时,已签名的请求包含有关页面本身的信息。这些信息通过PageTab
类进行抽象
/** * Return PageTab when app is loaded in a page tab. * * @return null|Gajus\Fuss\PageTab */ $page_tab = $signed_request->getPageTab();
可以通过以下方法访问抽象数据
/** * The page ID. * * @return int */ $page_tab->getId(); /** * true if the loading user has liked the page, false if not. * * @deprecated This field will no longer be included for any app created after the launch of v2.1 (August 7th, 2014), and will be permanently set to true for all other apps on November 5th, 2014. * @see https://developers.facebook.com/docs/reference/login/signed-request * @return boolean */ $page_tab->isLiked(); /** * true if the loading user is an admin of the page. * * @return boolean */ $page_tab->isAdmin();
安装
如果您使用Composer作为包管理器,请将以下依赖项添加到composer.json
中,并使用安装参数运行Composer。
{
"require" : {
"gajus/fuss" : "2.0.*"
}
}
测试
测试将使用Travis-CI和受保护的应用程序凭据自动运行。
要本地运行测试,
您应该使用沙盒应用程序来运行测试。