jedelhu / socialpack
这将允许在Facebook和Twitter上登录和上传数据
dev-master
2016-09-28 13:45 UTC
Requires
- abraham/twitteroauth: ^0.6.4
- facebook/php-sdk-v4: ~5.0
This package is not auto-updated.
Last update: 2024-09-23 13:12:12 UTC
README
Facebook和Twitter库
安装
首先通过Composer安装此包。
在composer.json文件下的"require"部分添加此行
"jedelhu/Socialpack": "dev-master",
在app.php下的'providers'部分添加此行
Jedelhu\Socialpack\SocialpackServiceProvider::class
在命令行中运行此命令
php artisan vendor:publish --provider="Jedelhu\Socialpack\SocialpackServiceProvider"
配置
在config\socialpack.php中提供有效的app_id和app_secret密钥
Twitter的回调函数
http://yourdomain.com/callbackTwitter
Facebook的回调函数
http://yourdomain.com/loginFacebook
更改以下代码(在laravel中转换为facebook sdk v4包)
转到vendor\facebook\php-sdk-v4\src\Facebook\Helpers\FacebookRedirectLoginHelper.php的第123行,
我将此脚本改为
private function makeUrl($redirectUrl, array $scope, array $params = [], $separator = '&')
{
$state = $this->pseudoRandomStringGenerator->getPseudoRandomString(static::CSRF_LENGTH);
$this->persistentDataHandler->set('state', $state);
return $this->oAuth2Client->getAuthorizationUrl($redirectUrl, $state, $scope, $params, $separator);
}
(我添加了Session::put('state', $state);)
private function makeUrl($redirectUrl, array $scope, array $params = [], $separator = '&')
{
$state = $this->pseudoRandomStringGenerator->getPseudoRandomString(static::CSRF_LENGTH);
$this->persistentDataHandler->set('state', $state);
Session::put('state', $state);
return $this->oAuth2Client->getAuthorizationUrl($redirectUrl, $state, $scope, $params, $separator);
}
在第234行,我将此脚本改为
protected function validateCsrf()
{
$state = $this->getState();
$savedState = $this->persistentDataHandler->get('state');
if (!$state || !$savedState) {
throw new FacebookSDKException('Cross-site request forgery validation failed. Required param "state" missing.');
}
$savedLen = strlen($savedState);
$givenLen = strlen($state);
if ($savedLen !== $givenLen) {
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
}
$result = 0;
for ($i = 0; $i < $savedLen; $i++) {
$result |= ord($state[$i]) ^ ord($savedState[$i]);
}
if ($result !== 0) {
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
}
}
(我添加了$this->persistentDataHandler->set('state', Session::get('state'));)
protected function validateCsrf()
{
$state = $this->getState();
$this->persistentDataHandler->set('state', Session::get('state'));
$savedState = $this->persistentDataHandler->get('state');
if (!$state || !$savedState) {
throw new FacebookSDKException('Cross-site request forgery validation failed. Required param "state" missing.');
}
$savedLen = strlen($savedState);
$givenLen = strlen($state);
if ($savedLen !== $givenLen) {
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
}
$result = 0;
for ($i = 0; $i < $savedLen; $i++) {
$result |= ord($state[$i]) ^ ord($savedState[$i]);
}
if ($result !== 0) {
throw new FacebookSDKException('Cross-site request forgery validation failed. The "state" param from the URL and session do not match.');
}
}
如何使用Twitter Api
在控制器顶部添加此调用
use Jedelhu\Socialpack\SocialpackController;
调用函数
$result=$social->loginTwitter($data);
获取简介信息(包括简介信息和图片)
$data=array(
'profile' => "yes",
);
获取推文
$data=array(
'recent_tweets' => array(
"show" => "yes"
)
);
发布推文
$data=array(
'post_tweet' => array(
'show' => "no",
'message' => "Test Tweet"
)
);
如何使用Facebook Api
在控制器顶部添加此代码
use Jedelhu\Socialpack\SocialpackController;
调用函数(在loginFacebook()函数中获取会话)
Session::put('data', $data);
$result=$social->loginFacebook();
获取简介信息
$data=array(
'profile' => "yes",
);
获取好友
$data=array(
'friends' => "yes",
);
获取个人头像
$data=array(
'profile_image' => "yes",
);
获取发布的内容
$data=array(
'published_post' => "yes",
);
获取点赞的页面
$data=array(
'like_pages' => "yes",
);
获取所有照片
$data=array(
'all_photos' => "yes",
);
在时间轴上发布
$data=array(
'post_timeline' => "yes",
array(
"show" => "yes",
"message" => "My post "
),
);
在时间轴上发布图片
$data=array(
'post_timeline' => "yes",
array(
"show" => "yes",
"message" => "My post ",
"url" => ""
),
);
在时间轴上添加文章
$data=array(
'post_link_timeline' => "yes",
array(
"show" => "yes",
"link" => "http://www.espn.in/football/european-championship/74/blog/post/2889086/euro-2016s-six-best-group-games-belgium-vs-italy-england-vs-wales-and-more"
),
);